PageList+ブロックのカスタマイズ方法
Posted by admin at 21:59 日時 2015/02/28
concrete5サイトに高度な条件で絞り込んだページの一覧を表示したり、複雑な条件を使った検索機能を追加できる PageList+ アドオンは、concrete5での制作コストを大幅に削減してくれる非常に頼もしいアドオンです。バージョン5.7への対応も進んでいるようですが、今のところ5.6までの対応です。PageList+ の使い方の例については、過去記事「concrete5でノープログラミングで作るイベント情報サイト」で紹介しています。
この PageList+ アドオンのテンプレートのカスタマイズ方法がちょっと特殊なので、その方法の紹介です。
PageList+ ブロックの表示は、大きくわけて5つの要素から成り立っています。
この5つの要素は、それぞれ elements フォルダに共通要素として切り出されていて、Loader::element()
によって読み込まれています。そのため、通常のブロックテンプレートのように、カスタムテンプレートを作成しても、共通要素となっている部分はそのままでは変更できません。
<div class="ccm-page-list sbs_plp_container <?php echo ($controller->allowPagination?'sbs_plp_hasPagination':''); ?> <?php echo ($controller->showSearchFilters&&$controller->submitViaAjax?'sbs_plp_submitViaAjax':''); ?> <?php echo ($controller->showResults&&$controller->receiveViaAjax?'sbs_plp_receiveViaAjax':''); ?>" id="sbs_plp_container-<?php echo $controller->bID; ?>" data-bID="<?php echo $controller->bID; ?>" style="position:relative;"> <?php echo Loader::element('title', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?> <?php echo Loader::element('form', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?> <?php echo Loader::element('results', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?> <?php echo Loader::element('rss', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?> <?php echo Loader::element('pagination', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?> </div><!-- end .ccm-page-list -->
例えば、次のコードは、ページリスト+のタイトルを表示しています。
<?php echo Loader::element('title', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?>
そして、このコードは packages/skybluesofa_page_list_plus/elements/title.php を読み込んでいます。title.php の中身は次のようになっています。
<?php defined('C5_EXECUTE') or die("Access Denied."); ?> <?php if ($controller->title) { ?> <h2><?php echo $controller->title; ?></h2> <?php } ?>
もしこの部分のマークアップを変更したい場合は、先頭の
<?php defined('C5_EXECUTE') or die("Access Denied."); ?>
以外のコードを、
<?php echo Loader::element('title', array('controller'=>$controller), 'skybluesofa_page_list_plus'); ?>
と差し替えることでカスタマイズできます。その他の results.php についても同様です。