高度なエリアの操作

concrete5のページテンプレートに編集可能なエリアを追加するのはとても簡単ですが、シンプルにエリアのコンテンツを表示する、グリッドフレームワークをサポートする、以外の機能も提供されています。

エリア内のブロック数を取得

エリアの中にいくつブロックが存在するかを知ると便利な場合があります。次のコードで取得できます。

通常のエリア

<?php
$a = new Area("Main");
print $a->getTotalBlocksInArea($c);

グローバルエリア

$a = new Area("Header Nav");
print $a->getTotalBlocksInArea();

この機能は、現在のページが編集中かを確認する「isEditMode()」メソッドの組み合わせでよく使われます。次のスニペットで、エリア内にブロックが存在するか、もしくは編集モードの時だけ、ページにコンテンツを出力することができます。

$as = new GlobalArea('Header Search');
$blocks = $as->getTotalBlocksInArea();
$displayThirdColumn = $blocks > 0 || $c->isEditMode();
 
if ($displayThirdColumn) { ?>
    <div class="search-column">
        <h3>Search</h3>
        <? $as->display()?>
    </div>
<? } ?>

ブロックタイプごとに使用するカスタムテンプレートを指定する

注意:この機能はconcrete5 5.7.3.2以降で対応しています。

次のスニペットで、ブロックタイプごとに自動でカスタムテンプレートを指定することができます。このエリアに追加された画像ブロックは自動で「theme_pic」テンプレートが適用されます。また、記事ブロックは「paragraphes」テンプレートが適用されます。

$a = new Area('Main');
$a->setCustomTemplate('image', 'theme_pic.php');
$a->setCustomTemplate('content', 'paragraphs.php');
$a->display($c);

注意

カスタムテンプレートが単一ファイル(例:application/blocks/content/templates/paragraphs.php)の場合は、 setCustomTemplate の2つ目の引数に .php を含める必要があります。もしフォルダの場合(例:application/blocks/content/templates/featured/view.php, application/blocks/content/templates/featured/view.css)は、.php の拡張子は必要ありません。

エリア内の全てのブロックオブジェクトを取得

エリア内のブロックオブジェクトを、画面に表示せずに取得したい場合は、Area::getAreaBlocksArray() メソッドを使うことができます。

$a = new Area('Main');
$blocks = $a->getAreaBlocksArray($c);

エリア API

API リファレンス

原文:Advanced Area Operations