cakePHP 3 を 直接 触って 覚えてみることにした No.3
この記事は 2017年 2月 14日 に書かれた記事です。
前回のままだと cakePHP の 標準のデザインですので 管理画面用の デザインに変更します
というわけで 僕の 大好きな Bootstrap を 用いて コーディング していきます
まだ alpha.6 ですが こちらを 使いたいと思います
Bootstrap 4
https://v4-alpha.getbootstrap.com/
Bootstrap 4 に 必要な jQuery と tether は 以下から ダウンロード できます
Download jQuery
http://jquery.com/download/
tether
https://github.com/HubSpot/tether/releases
webroot
上記 URL で ダウンロード した ファイル を
CSS ファイル は /plugins/Admin/webroot/css/ に
JS ファイル は /plugins/Admin/webroot/js/ に それぞれ 入れていきます
ファイル名は 任意に変えても問題ないです
レイアウト指定
Admin 以下を 指定のレイアウト に変更します
というわけで /plugins/Admin/src/Controller/AppController.php に 追記します
namespace Admin\Controller; use App\Controller\AppController as BaseController; // ここから追加 use Cake\Event\Event; //ここまで追加 class AppController extends BaseController { // ここから追加 public function beforeFilter( Event $event ) { $this->viewBuilder()->layout( 'Admin.admin' ); } //ここまで追加 }
レイアウト作成
レイアウト を 指定しただけでは ファイルがないので エラーページになります
plugins/Admin/src/Template/Layout/admin.ctp に ファイルを 作成し レイアウト を 作成します
<!DOCTYPE html> <html lang="ja"> <head> <meta name='robots' content='noindex,follow'> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="format-detection" content="telephone=no,address=no,email=no"> <?= $this->Html->css( 'Admin.bootstrap.min' ).PHP_EOL ?> <?= $this->Html->css( 'Admin.bootstrap.diff' ).PHP_EOL ?> <?= $this->Html->css( 'Admin.admin' ).PHP_EOL ?> <title><?= $title_for_layout ?></title> </head> <body> <nav class="fixed-top navbar-inverse bg-inverse" role="navigation"> <div class="navbar navbar-toggleable-md"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#mainNavigation" aria-controls="mainNavigation" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> <?php echo $this->Html->link( '管理ページ', [ 'controller' => '/' ], [ 'class' => 'navbar-brand' ] ); ?> <div class="collapse navbar-collapse" id="mainNavigation"> <ul class="nav navbar-nav navbar-right"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">設定</a> <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink"> <li><?php echo $this->Html->link( 'ユーザ一覧', [ 'controller' => 'users', 'action' => 'index' ], [ 'class' => 'dropdown-item' ] ); ?></li> <li><?php echo $this->Html->link( 'ユーザの追加', [ 'controller' => 'users', 'action' => 'add' ], [ 'class' => 'dropdown-item' ] ); ?></li> <li class="dropdown-divider"></li> <li><?php echo $this->Html->link( 'ログアウト', [ 'controller' => 'users', 'action' => 'logout' ], [ 'class' => 'dropdown-item' ] ); ?></li> </ul> </li> </ul> </div> </div> </nav> <?= $this->fetch( 'content' ) ?> </body> <?= $this->Html->script( 'Admin.jquery.min' ).PHP_EOL ?> <?= $this->Html->script( 'Admin.tether.min' ).PHP_EOL ?> <?= $this->Html->script( 'Admin.bootstrap.min' ).PHP_EOL ?> </html>
front_page.ctp
最後に あまり良くない方法かもしれませんが plugins/Admin/src/Template/Pages/front_page.ctp に タイトル の 設定をします
<?php $title_for_layout = 'Dashboard'; $this->set( 'title_for_layout', $title_for_layout ); ?>
これで ページにアクセスしたとき タイトルが 正しく反映されるかと思います
また デザインも Bootstrap の デザインになっているかと思います
手探りで 勉強しているので 間違っていたら ご指摘いただけると助かります!!