知っておくと便利なconcrete5デザインカスタマイズ小ネタ集
Posted by admin at 6:33 日時 2013/06/15
concrete5のテーマやブロックタイプテンプレートを作成する際のTips集です。随時更新していきます。最終更新:2014年7月3日
テーマ
ユーザーがログインしているときだけ表示
編集モードの時だけ表示
特定のセクション内の時だけ表示
URLでページを指定し、該当のページ、またはその下層ページを表示しているかどうかで条件分岐する方法。
if ($this->section('/about')) { // この中は概要ページ(/about)以下でのみ表示される }
編集モードで編集できないグローバルエリアを作る
スタックの画面からは編集できるので、編集モードでは編集しなくていいやという場合
現在見ている親ページへのリンクを取得
ブロックテンプレートでも使えます
エリアが空の時(ブロックが1つも入っていない時)は表示しない
編集モードもチェックした方が何かと良いかも。→[Concrete5]エリア内にブロックがある時にだけ表示する[メモ]
エリア内に入るブロック数を制限する
エリア内の各ブロックを囲むHTMLを指定する
デザイン上、各ブロックを特定のクラス名のdivで囲みたかったりするときに便利
エリア内のブロックのデフォルトテンプレートを変更する
このエリア内の、このブロックは、必ずこのテンプレートになってほしいの!と言う時に、エリア側から、特定のブロックタイプについて、デフォルトで選ばれるカスタムテンプレートを view.php から他のテンプレートに変更することができます。
下記は、Main
エリア内のオートナビブロックのデフォルトのテンプレートをパンくずに変更する例です。
<?php $a = new Area('Main'); $a->setCustomTemplate('autonav','templates/breadcrumb.php'); $a->display($c); ?>
ブロック
編集モードの時だけ表示
ブロックテンプレートからテーマディレクトリを参照する
ブロックテンプレートから、テーマのフォルダにおいてある画像を参照したいとき
ページリストのページネーションをカスタマイズ
詳しい機能は Concrete5_Helper_Pagination クラスを参照。
ブロックテンプレートからブロックオブジェクトを取得
ブロックテンプレートからカスタムテンプレートのURLを出力
echo $this->getTemplateURL();
ブロックテンプレートからブロックタイプフォルダの画像のパスを取得
たとえば blocks/your_block_handle/rss.png など
モバイルテーマを表示しているかどうかで条件分岐
モバイルからのアクセス時かどうかではなく、管理画面から選択したモバイルテーマを表示しているかどうか、というところに注意。
if (MOBILE_THEME_IS_ACTIVE) { echo 'Now mobile theme'; } else { echo 'Now desktop theme'; }
モバイルからのアクセス時にブロックテンプレートを切り替える
テーマはモバイルきりかえ機能があるが、ブロックテンプレートでは標準ではない。が、以下の構成で実現できる。
- blocks/block_handle/templates/template_handle/view.php
- blocks/block_handle/templates/template_handle/default.php
- blocks/block_handle/templates/template_handle/mobile.php
view.php の中身はこのようにする。
ページリストで各ページの公開から○日間「New」マークをつける
ページリストのテンプレートで、各ページの公開から特定の期間「New」アイコンをつけると言う場合のカスタマイズ方法。コード例では3日間。$page を $c に変えればテーマテンプレートでも。
ページリストで並び順をテンプレートから強制する
コアスタック表示ブロックのテンプレートが作れる
スタックの表示は、実は core_stack_display というブロックで行なっているので、通常のブロックと同様にカスタムテンプレートが作れる。例えば、スタックを div class=”hide-for-small” で囲ってみた場合。スタックごとにモバイルで表示するかどうかを選べるようにするために使った。
オートナビで親ページの情報を取得する
あるページの子ページを表示するオートナビを作った場合、親ページのタイトルを出したい時がある。ちょっと強引だけど、コントローラーに書いてある処理をそのまま取ってきてみた。
ページリストで親ページの情報を取得する
ページリストブロックのテンプレートから、「サイト中の場所」で選択したページの情報を取得する方法です。