concrete5でテーマにページリストブロックを直接埋め込む
Posted by admin at 13:22 日時 2013/08/28
こちらがサンプルコード。
- 表示件数5件
- 現在のページの親ページの子ページを一覧表示(同階層ということですね)
- 表示順はサイトマップ順
- 「blog_entry」ページタイプのページのみ表示
テーマにこのコードを埋め込んでおけば編集モードで入れなくてもページリストブロックがページ内に表示される。ただし、この方法だとブロックキャッシュが効かないので、最終手段と思ってほしい。基本的には、ページタイプのデフォルトで設置すべきだ。
$page_list = BlockType::getByHandle('page_list');
ブロックタイプハンドルからブロックタイプのオブジェクトを取得している。ブロックタイプハンドルとは、すなわち blocks フォルダ内の各ブロックタイプのフォルダ名と同一である。
ブロックタイプの表示上の挙動を設定するには、ブロックタイプオブジェクトのからコントローラーにアクセスし、各プロパティを設定していく。もちろんpublicなプロパティでないとアクセスはできない。また、どんなプロパティが存在するかは各ブロックタイプのcontroller.phpを読んで理解する。ここではページリストブロックタイプのパラメーターを紹介する。
$page_list->controller->num
表示するページ数。
$page_list->controller->cParentID
親ページを指定する。表示するページを絞り込むことができる。
$page_list->controller->cThis
現在のページを指定する。テーマに埋め込む場合、通常は設定する必要はない。
$page_list->controller->orderBy
表示順を指定する。デフォルトは新着順である。
- ‘display_asc’:サイトマップ順
- ‘display_desc’:サイトマップの逆順
- ‘chrono_asc’:古い順
- ‘alpha_asc’:ページ名でソート
- ‘alpha_desc’:ページ名でソートの逆順
$page_list->controller->ctID
表示するページタイプを指定する。ページタイプID(ctID)で指定する。数値で指定してもいいが、サンプルのようにハンドルで取得したほうが楽だろう。
$page_list->controller->rss
RSSを表示するかどうか。ただしこのオプションは直接埋め込む場合は使わないほうがいいと思う。
$page_list->controller->displayAliases
エイリアスを表示するかどうか。デフォルトは表示しない。
$page_list->controller->bID
ブロックIDを指定する。RSSを表示する場合は必須になると思う(未検証)
$page_list->controller->displayFeaturedOnly
特集ページのみ
$page_list->controller->includeAllDescendents
全ての子ページを表示
$page_list->controller->paginate
ページ付けナビゲーションを表示
プロパティの設定をしたら、最後に render メソッドで表示する。引数にはカスタムテンプレートを指定することもできる。
$page_list->render('templates/blog_index');