属性の「選択」の表示のカスタマイズについて

2015年9月21日 at 14:37

下記内容で作成した属性の「選択」のカスタマイズする方法を教えて頂けると助かります。
一覧用と詳細用のページにカスタマイズした内容を表示したい。

・属性で「選択」を作成
・「選択」の作成内容
 - ハンドル:select
 - 名前:選択
 - 複数のオプションを選択可能にする。:チェック
 - 並び順:表示順
 - 値:下記値を作成
  hoge01:hogeA
  hoge02:hogeB
  hoge03:hogeC
  hoge04:hogeD

◇詳細ページ
・下記内容をphpに記載

・ページを作成し、「選択」の表示したい値にチェック
・ブロック追加でページ属性表示を選択
・表示するプロパティで上記で作成した属性を選択
・「選択」の値の下記内容がソース上に表示される
  hoge02:hogeB
  hoge03:hogeC
・この時HTMLのソース上で下記内容で書き出したい。
 <ul class="XXXX">
  <li class="hoge02"><span>hogeB</span></li>
  <li class="hoge03"><span>hogeC</span></li>
 </ul>
 
◇一覧ページ
・下記内容をphpに記載

・ページを作成し、ブロック追加でページリストを選択
・一覧に表示する各詳細ページに詳細ページ同様にHTMLのソース上で下記内容で書き出したい。
詳細1
 <ul class="XXXX">
  <li class="hoge02"><span>hogeB</span></li>
  <li class="hoge03"><span>hogeC</span></li>
 </ul>

詳細2
 <ul class="XXXX">
  <li class="hoge03"><span>hogeC</span></li>
  <li class="hoge04"><span>hogeD</span></li>
 </ul>

-------------
・使用PC:windows8
・concrete5 のバージョン:5.7.5.1
-------------

タグ:

Re: 属性の「選択」の表示のカスタマイズについて

2015年10月4日 at 13:18
yuskhnmさん

ulリストをページリストブロックのカスタムテンプレートで出力する事を想定して、
カスタムテンプレートの例を記載させて頂きます。

半角の":"で分割する為に、PHPの関数「split()」等を使用しています。

表示のパターンの違いがある場合は、それぞれカスタムテンプレートで対応して頂ければいいかと思いますので、1パターンのサンプルで・・・

<?php
// このサンプルでは使用していませんが、helperを呼び出し
$th = Loader::helper('text');
// ここも、サンプルでは使用していませんが、カレントページ情報の宣言
$c = Page::getCurrentPage();

// ページ取得されているページリスト内でループする
foreach ($pages as $page) {
$hoge = $page->getAttribute('hoge');

?>
<ul class="XXXX">
<?php
foreach ($hoge_str as $hoge){
list($h_class, $h_span) = split(":", $hoge_str);
?>
<li class="<?php echo $h_class ?>"><span><?php echo $h_span ?></span></li>
<?php
}
?>
</ul>

}


ページ属性が選択されていない場合などの、ロジックは記載しておりませんが、ご参考にしてください。
 

Re: 属性の「選択」の表示のカスタマイズについて

2015年10月4日 at 21:34
ページ属性表示ブロックタイプのカスタムテンプレートを作る方法です。
1.application/blocksディレクトリ内に
page_attribute_displayデレクトリ作成します。

2.page_attribute_displayディレクトリ内に
templatesディレクトリを作成します。

3.templatesディレクトリ内に
attribute_ul_li.phpファイルを作成します。

4.attribute_ul_li.phpファイルに下記を記述します。

<?php
defined('C5_EXECUTE') or die(_("Access Denied."));
echo $controller->getOpenTag();
echo "<span class=\"ccm-block-page-attribute-display-title\">".$controller->getTitle()."</span>";

$category = explode("\n",$controller->getContent());

echo '<ul class="XXXX">';
foreach($category as $ctg){
$spec = explode(":",$ctg);
echo '<li class="' . h($spec[0]) . '"><span>' . h($spec[1]) . '</span></li>';
}
echo '</ul>';

echo $controller->getCloseTag();

保存し、カスタムテンプレート適用すれば、可能だと思います。