ECCUBE3のデフォルトテンプレートではカテゴリナビゲーションが上部に設置されます。カテゴリがそれほど多くない場合は問題ないのですが、カテゴリが多い場合にはやはりサイドブロックにメインメニューがあるほうがスマートですよね。
今回はカテゴリメニューブロックの内容をコピーして独自メニューブロックを作成する方法を紹介します。
目次
サイドブロックに独自メニューを設置
既存カテゴリメニューブロックの内容をコピーする
管理画面の「コンテンツ管理」→「ブロック管理」→「カテゴリ」の編集をクリック。
【ブロックデータ】の内容をテキストエディタなどにコピーしておきましょう。
新規ブロックを追加する
管理画面の「コンテンツ管理」→「ブロック管理」最下部の【新規入力】より新規ブロックを追加します。
サンプルとして以下のように設定します。
ブロック名:メインメニュー
ファイル名:mainmenu
データベースのロジックフラッグを変更する
ブロックを新規追加しただけでは実際にはまだ表示はされません。表示させるためには追加したブロックのロジックフラッグをデータベースで直接編集する必要があります。
データベース「dtb_block」より追加した「mainmenu」のロジックフラッグを「0」から「1」へ変更します。
ECCUBE3構成ファイルよりコントローラーを登録
続いて追加した「メインメニューブロック」のコントローラーを登録します。
/src/Eccube/ControllerProvider/FrontControllerProvider.php
FrontControllerProvider.phpに「//block」が定義されている箇所があるので以下の一文をブロック定義部の最下部に追加します。
1 |
$c->match('/block/mainmenu', '\Eccube\Controller\Block\MainMenuController::index')->bind('block_mainmenu'); |
上記はファイル名を「mainmenu」にした例です。変更した場合は修正してください。
ECCUBE3構成ファイルよりコントローラーを作成
コントローラーの登録ができたら続いてコントローラの作成を行います。今回は既存のカテゴリメニューをコピーして新しいメニューを作るので以下のファイルをそのままコピーして「MainMenuController.php」リネームします。
/src/Eccube/Controller/Block/CategoryController.php
リネームしたファイルの内容をリネームしたものに変更。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace Eccube\Controller\Block; use Eccube\Application; class CategoryController { public function index(Application $app) { $Categories = $app['eccube.repository.category'] ->findBy( array('Parent' => null), array('rank' => 'DESC') ); return $app->render('Block/category.twig', array( 'Categories' => $Categories )); } } |
↓に変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace Eccube\Controller\Block; use Eccube\Application; class MainMenuController { public function index(Application $app) { $Categories = $app['eccube.repository.category'] ->findBy( array('Parent' => null), array('rank' => 'DESC') ); return $app->render('Block/mainmenu.twig', array( 'Categories' => $Categories )); } } |
実際にブロックを配置して確認してみる
管理画面の「コンテンツ管理」→「ページ管理」→「TOPページ」のレイアウト編集をクリック。新しいブロックがうまく作成できていれば未使用ブロックにメインメニューというブロックができています。
これを#side_leftへドラッグして配置してトップページを確認しましょう。
トップページにサイドバーに表示されていれば成功です。
サイドバーに表示されたメニューのカスタマイズはまたの機会に!