ページテンプレートにブロックを埋め込む
ブロックの機能を、CMSの編集機能を使わずにページに埋め込みたい場合があるかと思います。例えば、ブロク記事のページテンプレートに、常に特定の場所にタグブロックを設置したいというような場合や、上級権限モードを使わずにサイトの編集者にオートナビブロックの設定を変更させないようにしたい場合などです。このような場合に、ページテンプレートに、ブロックを特定のパラメーターを指定して埋め込むことが可能です。
ブロックタイプコントローラーを使って表示する
サンプル1:タグブロックをハードコードする
$bt = BlockType::getByHandle('tags'); $c = Page::getByID('/path/to/target/page'); $bt->controller->set('title', t('Tags')); $bt->controller->set('target', $c); $bt->render();
サンプル2:オートナビブロックをカスタムテンプレートを指定してハードコードする
breadcrumb カスタムテンプレートを使い、指定したオプションでオートナビブロックを埋め込み、パンくずリストを表示する
$bt = BlockType::getByHandle('autonav'); $bt->controller->orderBy = 'display_asc'; $bt->controller->displayPages = 'top'; $bt->controller->displaySubPages = 'relevant_breadcrumb'; $bt->controller->displaySubPageLevels = 'all'; $bt->render('templates/breadcrumb');
スタックを表示する
スタック内のコンテンツを表示する方が簡単です。埋め込むことでフロントエンドからは編集できなくなりますが、管理画面からは変更できます。
$stack = Stack::getByName('Your Stack Name'); $stack->display();
制限
この方法で埋め込んだブロックは、ブロック表示キャッシュが効きません(データベースに設定が保存されていないため、キャッシュできない)。また、動的な挙動ができません。