自分用メモなので痒いところに手は届かないと思います。
需要があればそのうちもっと詳細を追記。
参考
テーマ作成の準備
application/themes
の直下に以下のような構成のテーマディレクトリを作成する。
application/themes
└── my_theme
├── default.php
├── page_theme.php
└── thumbnail.png
- default.php: ページテンプレートが選択されていない時に使用されるテンプレート
- page_theme.php: テーマの設定ファイル
- thumbnail.png: テーマのサムネイル
page_theme.php
$pThemeGridFrameworkHandle
メンバー変数 (protected) でグリッドシステムを指定できる。
以下の4つがコアに含まれている。
- bootstrap3
- bootstrap2
- foundation
- ninesixty
NOTE: 上記以外を追加するにはどうすれば
2020/04/07 追記
concrete/src/Page/Theme/GridFramework/Type
以下のファイルを参考に application/src/Page/Theme/GridFramework/Type
に独自のグリッドタイプを追加すればできそう ( 未検証 )
アセットのパス
以下のコードでテーマへのパス ( http から始まる文字列 ) を取得できる。
$view->getThemePath();
html要素のlang属性
<html lang="<?= Localization::activeLanguage(); ?>">
Concrete5が出力するheadタグとかscriptタグとかの内容
Loader::element
は非推奨になりました。
// headタグの中で
View::element('header_required');
// bodyの閉じタグの前らへんで
View::element('footer_required');
ラッパークラス
HTMLのラッパーのclass属性に以下の返り値を指定
$c->getPageWrapperClass();
NOTE: 最上位のラッパーがbody要素の場合body要素に上記を指定しても正しく表示されるか?
HTMLの共通化
テーマディレクトリに elements
ディレクトリを作成し、その中に部品を作成
default.phpなどテンプレートから読み込む:
$this->inc('elements/header.php');
NOTE: $view
と $this
で何か違う?
エリアの作成
エリアの名前は自由に設定できるけど、他のテーマとあわせておくとテーマを変更後に再設定する手間が省けるらしい。
NOTE: テーマ間の互換性はコアで担保していただきたい, 気が向いたら PRを出してみよう!
グローバルエリア
$a = new GlobalArea('Header Site Title');
$a->display();
エリア
$a = new Area('Main');
$a->enableGridContainer();
$a->display();
管理画面のエディタのカスタマイズ
page_theme.php
に public function getThemeEditorClasses
をはやして配列を返すとボタンなどのクラスのプリセットを定義できるっぽい
コアのブロックの出力をカスタマイズしたい
application/blocks/{block_name}/templates
にファイルを作成する。
ベースはコアからコピペしてくる。
サムネイルの表示
$src = $thumbnail->getThumbnailURL('name');
HtmlObject\Image::create($src);
NOTE: $thumbnail
は必ず存在する変数なのか、コレクションのアトリビュートとかに応じて動的に定義されるのか, てかテンプレートの中で使える変数と関数って何?
おまじない
Concrete5経由で正しくアクセスされているかチェックを行うおまじない。
書かなくても実行はされるが、おそらくセキュリティのために書く方がベター。
すべてのテンプレートに記載した方が良いらしい。
defined('C5_EXECUTE') or die('Access Denied.');