concrete5の各属性タイプの情報を表示するコード集 5.7対応版
Posted by admin at 18:36 日時 2015/06/29
<?php foreach ($pages as $page): ?> <?php /* この記事のサンプルコードはページリストブロックの foreach 文の間に記載することを想定しています */ ?> <?php endforeach; ?>
ページリストブロックではなく、テーマなどで現在のページの情報を表示したい場合は、先に次のコードを記載しておくことで同じように書けます。
<?php $page = Page::getCurrentPage(); ?>
/* * テキストタイプ属性 */ $text = $page->getAttribute('text'); // getAttributeの引数には、属性のハンドルを指定します。 // そのまま出力可能 echo h($text); /* * テキストエリアタイプ属性 */ $textarea = $page->getAttribute('textarea'); // エディタの場合はサニタイズなしで出力可能 echo $textarea; /* * チェックボックスタイプ属性 */ $checkbox = $page->getAttribute('checkbox'); // そのまま出力可能 echo h($checkbox); // 1 or 0 if ($checkbox) { echo 'チェックされている時'; } else { echo 'チェックされていない時'; } /* * 日付/時刻タイプ属性 */ $date_time = $page->getAttribute('date_time'); // そのまま出力可能 echo h($date_time); // 2015-06-29 17:50:00 // 書式を指定して表示 echo Core::make('date')->formatCustom('Y年n月j日', $date_time); /* * 画像/ファイルタイプ属性 * 画像をimgタグで表示 */ $image = $page->getAttribute('image'); // 画像はechoが使えません // echo $image; // 画像が選択されていかどうか is_object でチェック if (is_object($image)) { /** * 画像の表示方法の詳細は * http://concrete5-japan.org/help/5-7/recipes/how-to-use-core-html-image/ */ $tag = Core::make('html/image', array($image))->getTag(); echo $tag; } else { echo '画像が選択されていません'; } /* * 画像/ファイルタイプ属性 * ファイルダウンロードリンクを表示 */ $file = $page->getAttribute('file'); // ファイルはechoが使えません // echo $file; // ファイルが選択されていかどうか is_object でチェック if (is_object($file)) { // ファイルの閲覧権限のチェック $fp = new Permissions($file); if ($fp->canViewFile()) { // 通常ダウンロードリンク(ブラウザで表示できるファイルはブラウザで表示) ?> <a href="<?php echo $file->getDownloadURL() ?>"><?php echo h($file->getTitle()) ?></a> <?php // 強制ダウンロードリンク(ブラウザで表示できるファイルでも表示しない) ?> <a href="<?php echo $file->getForceDownloadURL() ?>"><?php echo h($file->getTitle()) ?></a> <?php } else { echo 'ファイルの閲覧権限がありません。'; } } else { echo 'ファイルが選択されていません。'; } /* * 数字タイプ属性 */ $number = $page->getAttribute('number'); // そのまま出力可能 echo h($number); /* * 評価タイプ属性 */ $rating = $page->getAttribute('rating'); // そのまま出力すると、100点満点の数字で表示される echo h($rating); // 星マークで表示(Bootstrap) $rh = Core::make('helper/rating'); echo $rh->outputDisplay($rating); /** * <div class="ccm-attribute ccm-attribute-rating ccm-rating"> * <div class="fa fa-star"><a href="javascript:void(0)"></a></div> * <div class="fa fa-star"><a href="javascript:void(0)"></a></div> * <div class="fa fa-star"><a href="javascript:void(0)"></a></div> * <div class="fa fa-star-o"><a href="javascript:void(0)"></a></div> * <div class="fa fa-star-o"><a href="javascript:void(0)"></a></div> * </div> */ /* * 選択タイプ属性 */ $select = $page->getAttribute('select'); // そのまま出力も可能。 // 複数の項目が選択されている場合は、改行区切りで表示される echo $select; // 選択項目をいったん配列にしてから表示する例 if (is_object($select)) { $options = array(); $list = $select->getOptions(); foreach ($list as $l) { $options[] = h($l->getSelectAttributeOptionDisplayValue()); } echo implode(', ', $options); // カンマ区切りで結合 } /** * トピックタイプ属性 */ $topics = $page->getAttribute('topic'); // トピックはそのまま出力できません // echo $topics; if (is_array($topics) && count($topics)) { foreach($topics as $topic) { echo $topic->getTreeNodeDisplayName(); } } else { echo 'トピックが選択されていません。'; }
注意:画面に値を出力する際は基本的にセキュリティのため h() 関数を使いましょう。
5.6の方はこちら。