Blog

concrete5で選択(select)タイプのページ属性のオプション値を出力する

Posted by admin at 15:24 日時 2013/08/17

今回はニッチなネタなのでメモ程度に。concrete5の属性(Attribute)は高度に抽象化されておりまして、そのおかげでとても楽チンに使うことができます。たとえば、属性のハンドルネームを指定して、検索用に選択肢を表示する場合はこんなふうに書けます。

concrete5の属性にはテキスト(text)、テキストエリア(textarea)、セレクトボックス(select)、チェックボックス(boolean)、数値(number)、日付(date_time)などの属性タイプ(Attribute Type)があるのですが、そのどれであっても上記のコードで自動で適切なフォーム部品が使われて表示されます。

便利なので、極力このまま使いましょう!デザイン段階から気をつけましょう。マジで。

今回はデザイン上、タグを「セレクト」タイプのページ属性で実装し、ページに表示したタグ一覧をクリックするとすぐ検索結果に遷移するという動きになっていました。その挙動は、concrete5の用意したテンプレートにはありません。なので、自力で実装してみました。大変でした…

CollectionAttributeKeyからまず属性タイプのコントローラーを取得する、ここが一番重要です。なぜなら属性は属性タイプごとに処理が全く異なるし、データ構造も異なるからです。この関係性が理解できればだいぶ前進します。冒頭のコードでは $ak->render(‘search’); と書いていますが、これは “search” というテンプレートを使って出力しなさい、ということです。このテンプレートは下記にありますので、中のコードを参考にしながらデザインにマークアップを合わせていけばOK。ただし、このテンプレート内の $this とは AttributeTypeView クラスのインスタンスなのでそこのところ注意!

/ concrete / models / attribute / types / select / search.php

このコードをブロックテンプレートなりテーマのテンプレートなりに記載すると、以下の様なリンクの一覧の形式で表示されます。

<ul>  	<li class="selected"><a href="/index.php/search/?akID[12][atSelectOptionID][]=1">Tag A</a></li>  	<li><a href="/index.php/search/?akID[12][atSelectOptionID][]=2">Tag B</a></li>  	<li><a href="/index.php/search/?akID[12][atSelectOptionID][]=3">Tag C</a></li>  </ul>

concrete5の属性みたいな複雑に抽象化されたデータ構造を設計できるとは到底思えないので、やはり自分はプログラマーには向いてないなと思いました(・ω<)


Share this entry