ページテンプレートにブロックを埋め込む

ブロックの機能を、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();

制限

この方法で埋め込んだブロックは、ブロック表示キャッシュが効きません(データベースに設定が保存されていないため、キャッシュできない)。また、動的な挙動ができません。

原文:Embedding Blocks in a Page Template