1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Concrete5 テーマ開発の基礎知識

Last updated at Posted at 2020-04-05

自分用メモなので痒いところに手は届かないと思います。

需要があればそのうちもっと詳細を追記。

参考

テーマ作成の準備

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.phppublic 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.');
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?