concrete5のページ属性セットを活用して、管理画面で並び替える
concrete5では、似たフォーマットのページをたくさん作る場合、コンポーザーを使うことがよくあります。たとえば、
- 地域のお店ポータルサイトで、お店情報を登録する
- 美容院のサイトで、美容師の情報を登録する
などです。concrete5では、ページとテーマ>ページタイプで、コンポーザーの設定を行います。GUIを使ってコンポーザー設定ができます。コンポーザーで入力することができる項目は、ページ属性(WordPressのカスタムフィールドのようなもの)と呼びます。ページ属性は管理画面から作成・並べ替えができます。
では、ページへの出力(画面表示)はどうでしょうか?
1つの方法として、ページ属性表示ブロックを使う、というものがあります。この方法はブロックを置くだけなので、作業自体は簡単です。しかし、ページ属性が多くなった場合、ページ属性の数だけブロックを置く必要があります。なので作業時間は必ずしも短くありません。
出力を自動化する
作業効率向上のため、出力を自動化するようにしました。仕組みとしては
- 属性のセットを作る(concrete5では属性のセットを使って、属性をグループ分けできます)
- 属性をセットに登録する
- セットに登録されている属性のデータを出力するコードを書く
という形です。1. と 2. は、管理画面から行うことができます。
3. の部分のみ、コードを書きます。コードは以下のようになります。
<?php // 属性セットを取得する $atSet = AttributeSet::getByHandle('shopinfo'); // セットにある属性一覧を取得する $atKeys = $atSet->getAttributeKeys(); // 属性一覧にある属性を順に処理する foreach($atKeys as $ak) { // 属性が、そのページに存在するかチェックする if ($c->getAttribute($ak->getAttributeKeyHandle())) { // 属性名を表示する echo h($ak->getAttributeKeyDisplayName()); // 属性の値(そのページで設定されている値)を表示する echo nl2br(h($c->getAttribute($ak->getAttributeKeyHandle()))); } } ?>
こうすることで、ページ属性がたくさんある場合でも、効率よく設置できます。
その他のメリット
このように実装すると、作業効率が良くなります。さらに、他のメリットがあります。
- ページ属性を追加しやすい
- ページ属性を並べ替えやすい
ページ属性を後から追加するケースも考えられます。たとえば「新しいSNSが流行したので、そのSNS情報をページ属性で追加する」みたいなケースです。その場合でも、ページ属性をセットに登録すれば、テーマ出力部分は変更が不要です。
また、ページ属性の順序は、管理画面上の順序が反映されます。上の例では住所を一番上の項目にしていますが、これは管理画面のページ属性のセットでの並び順が、住所・業種・電話・・・のようになっているからです。管理画面上で並び順を変更すると、テーマでの表示も変更されます。(キャッシュ機能を有効にしている場合は、キャッシュをクリアしてください)