実は、Concrete5公式活用ガイドブックの172ページに記載があるのですが、ちょっと気になった部分がありました。
エリアが空の時には何も表示しない要素を作る記述で以下の様なコードが載っていたのですが、
<?php $a = new Area('Main'); if ($a->getTotalBlocksInArea($c) > 0) : ?> <h1>この見出しはエリア内に何かブロックが配置されているときだけ表示されます</h1> <?php endif; $a->display($c); ?>
これだと初めての編集時にエリアが表示されなかったんです。
編集時にエリアが表示されない = いつまでも編集できない。
つまりこのエリアはいつになっても表示される事がなくなってしまうのではないか。
で、編集モード時には表示されれば問題がないので、$c->isEditMode() を使って下記のようにしました。
<?php $a = new Area('Main'); if ($c->isEditMode() | $a->getTotalBlocksInArea($c) > 0){ ?> <h1>この見出しはエリア内に何かブロックが配置されているときだけ表示されます</h1> <?php $a->display($c); } ?>
これで安心。夜も眠れます。
[追記]
if文の閉じ括弧の部分について、ご指摘ありがとうございました。
下記の様なデザインを想定した場合に、ブロックが無い場合にはsectionごと非表示という方法は、ガイドブックに載っている方法では対応できませんでした。
<?php $a = new Area('Main'); if ($c->isEditMode() | $a->getTotalBlocksInArea($c) > 0){ ?> <section> <h1>この見出しはエリア内に何かブロックが配置されているときだけ表示されます</h1> <?php $a->display($c); // *1 ?> </section> *2 <?php } ?>
*1より前に閉じ括弧があると、*2の</section>タグが出力されてしまいます。
phpの問題というより、htmlのマークアップの問題ですね。
このような状況を想定しているため、先述のコードとなりました。
上部のコードで問題ないと思います。
下部に記されているコードはif 文の閉じかっこの位置 6,7行目が逆ではないですか?
逆ですね。失礼しました。
ピンバック: 知っておくと便利なconcrete5デザインカスタマイズ小ネタ集 | notnil creation weblog
ピンバック: concrete5でエリアにブロックが存在しない時に、その上位を括っているdivとかが空になるの気持ち悪いので対処した