concrete5 でページテンプレートからブロックテンプレートに値を受け渡す

菱川拓郎
菱川拓郎

コンクリートファイブジャパン 菱川です。

今日は concrete5 の技術ネタです。

テーマのページテンプレートから、ブロックのテンプレートに値を受け渡す方法を調べてみました。用途としては、今回ご紹介するサンプルコードのように、エリア内のブロックに連番を振りたい場合などがあるかと思います。それでは、早速サンプルコードです。

まず、ページテンプレートから、ブロックのインスタンスのプロパティに値を設定します。

// うまく動かない例
foreach ($blocks as $i => $b) {
    $b->getInstance()->blockAreaPosition = $i;
}

では、ブロックテンプレートからブロックインスタンスに設定した値を取り出しましょう。ブロックの view.php またはカスタムテンプレートで、次のように記述します。

/** @var \Concrete\Core\Block\BlockController $controller */
$pos = $controller->getBlockObject()->blockAreaPosition;

このように、concrete5 ではブロックを表示する際に、個々のブロックインスタンスに該当する Block クラスと、BlockController クラス、BlockView クラスが連携して動いていますので、値の受け渡しには一工夫が必要です。