Concrete5 で単純なテーマを作成する場合のメモ。このサンプルで作成するテーマは実用的なものではありません。Concrete5 の構造を自分なりに理解するためのものですのであしからず。
Concrete5 をインストールすると初期状態ではフォルダ構成は以下のようになっている。
主なフォルダには以下のようなものがある。
テーマによりフォルダ内のファイルは少しずつ異なるが、以下のような共通のフォルダやファイルがある。(以下は concrete/themes/default の例)
テーマは、トップレベルの「themes」ディレクトリ内にフォルダーを作成し、 その配下にファイルを保存する。フォルダー名(テーマハンドル)は、半角英小文字数字のみで空白は不可。
/themes/テーマハンドル/
concrete5 にデフォルトでインストールされているテーマは以下のディレクトリーに配置されている。
/concrete/themes/テーマハンドル(テーマ名)/
これらのテーマファイルをカスタマイズする場合、トップレベルの「themes」ディレクトリーに同名のフォルダを作成し、「concrete/themes/テーマハンドル(テーマ名)」のすべてのファイルをそこにコピーしてから変更を行う。 決してオリジナルのテーマ(concrete/themes/テーマハンドル(テーマ名))を変更してはならない。
以下のファイルを制作すると、デフォルトのページタイプと連動する。
上記以外でも、任意のファイル名(例「news.php」「product.php」)のテーマファイルを作成し、ファイル名と同じページタイプ・ハンドル名(例「news」「product」)を設定すると、そのページタイプを表示させる場合は、これらのテーマ php ファイルが読み込まれる
concrete5 では、別の名前でディレクトリーを作成しても構わないが、以下は最も一般的に行われている方法。
ここまでが、Concrete5 のおおまかな構造の説明で、ここから実際のテーマの作成。
レイアウトを決めるHTMLファイルを準備する。以下はこのサンプルで使うレイアウト用のHTMLファイルとCSSファイル。(HTML、CSS の記述はかなり適当です)
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Simple C5</title> <link rel="stylesheet" media="screen" type="text/css" href="main.css" /> </head> <body> <div id="container"> <div id="header"> <h1>Simple C5</h1> <div id="nav"> <!--この部分をconcrete5 が編集出来るエリア(Header Nav)を指定--> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> </ul> </div> <!-- end of #nav --> </div> <!-- end of #header --> <!--★ここより上の部分をheader.phpとして加工する。 ☆ここから下の部分(フッターの手前まで)を使用してdefault.php(ページテンプレート)として加工する。--> <div id="contents" class="clearfix"> <div id="main"> <!--この部分をconcrete5 が編集出来るエリア(Main)を指定--> <p> Paragraph 1 </p> <p> Paragraph 2 </p> <p> Paragraph 3 </p> </div> <!-- end of #main --> <div id="sidebar"> <!--この部分をconcrete5 が編集出来るエリア(Sidebar)を指定--> <p>side bar</p> <p> Paragraph 1 </p> <p> Paragraph 2 </p> <p> Paragraph 3 </p> </div> <!-- end of #sidebar --> </div> <!-- end of #contents --> <!--☆ここまでを使用してdefault.php(ページテンプレート)として加工する。 ★ここより下の部分をfooter.phpとして加工する。--> <div id="footer" class="clearfix"> <small>footer notes</small> </div> </div><!-- end of #container --> </body> </html>
main.css(かなりいい加減)
@charset "utf-8"; .clearfix:before, .clearfix:after { display: table; content: " "; } .clearfix:after { clear: both; } #container { width: 900px; margin: 20px auto; } #header { width: 100%; border: 1px solid #CCC; } #header h1 { font-size: 30px; margin: 20px; color: #777; } #nav { width: 100%; height: 2em; background-color: #666; } #nav ul li { float: left; padding: 10px; list-style-type: none; } #nav ul li a { display: inline-block; text-decoration: none; color: #FFF; } #contents { width: 100%; margin: 20px 0; } #main { width:620px; float: left; margin: 10px; } #main p, #sidebar p { padding: 0 20px; } #sidebar { width: 240px; float: right; margin: 10px; background-color: #EEE; } #footer { width: 100%; margin: auto; text-align: center; }
記事ブロックエディター「TinyMCE」で使用されるCSSファイル(typography.css)については省略。
simpleC5 A simple theme for concrete5.
この段階でのフォルダの構成は以下のとおり。
この例では、ヘッダーエリア、コンテンツエリア、サイドバーエリアの3つのエリアを編集可能にし、concrete5のテーマとする。元のHTMLファイルを、header.php, footer.php, default.php(ページテンプレート)に分割していく。
元の HTML ファイルのヘッダ部分に concrete5 用の PHP コードを記述し、header.php として「elements」ディレクトリーに保存する。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?> <!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Simple C5</title> <link rel="stylesheet" media="screen" type="text/css" href="<?php echo $this->getStyleSheet('main.css')?>" /> <link rel="stylesheet" media="screen" type="text/css" href="<?php echo $this->getStyleSheet('typography.css')?>" /> <?php Loader::element('header_required'); ?> </head> <body> <div id="container"> <div id="header"> <h1>Simple C5</h1> <div id="nav"> <!--この部分をconcrete5 が編集出来るエリア(Header Nav)を指定--> <?php $a = new GlobalArea('Header Nav'); $a->display($c); ?> </div> <!-- end of #nav --> </div> <!-- end of #header -->
以下はテンプレート作成に追加または変更した部分。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
concrete5 のプログラムでないと、ファイルを直接開けないようにするための記述。(defined()は、指定した名前の定数が存在するかどうかを調べ、存在すればTRUE、そうでなければFALSEを返す)
<?php echo $this->getStyleSheet('main.css')?>
スタイルシートの読み込みに使用
[参考]画像を読み込む場合などでは、$this->getThemePath()を使う。これはテーマが保存されているパスをそこに挿入するという命令で、以下は例。
<img src="<?php echo $this->getThemePath()?>/images/logo.png" alt="Logo"/>
<?php Loader::element('header_required'); ?>
concrete5 が使用する Javascript や CSS ファイル、セッション情報やその他の設定を読み込ませるための記述で、ログインした際に編集ツールバーを表示させるために必要。
<?php $a = new GlobalArea('Header Nav'); $a->display($c); ?>
concrete5 が編集出来るエリアを指定(編集可能エリア(ブロック挿入可能部)を定義したphpコード)’Header Nav’は編集の際に表示されるエリアの名前(例:「Header Navに追加」などと表示される)
元のHTMLファイルのフッター部分に concrete5用のPHPコードを記述し、footer.phpとして「elements」ディレクトリーに保存する。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?> <div id="footer" class="clearfix"> <small>footer notes</small> </div> </div><!-- end of #container --> <?php Loader::element('footer_required'); ?> </body> </html>
以下はテンプレート作成に追加または変更した部分。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
concrete5 のプログラムでないと、ファイルを直接開けないようにするための記述。
<?php Loader::element('footer_required'); ?>
ツールバーやアクセス解析コードを埋め込むためのコード
元のHTMLファイルのコンテンツ部分に concrete5用のPHPコード(header.phpの読み込み、footer.phpの読み込みを含む)を記述し、default.phpとして description.txt、thumbnail.pngと同じディレクトリーに保存する。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); $this->inc('elements/header.php'); ?> <div id="contents" class="clearfix"> <div id="main"> <!--この部分をconcrete5 が編集出来るエリア(Main)を指定--> <?php $b = new Area('Main'); $b->display($c); ?> </div> <!-- end of #main --> <div id="sidebar"> <!--この部分をconcrete5 が編集出来るエリア(Sidebar)を指定--> <?php $as = new Area('Sidebar'); $as->display($c); ?> </div> <!-- end of #sidebar --> </div> <!-- end of #contents --> <?php $this->inc('elements/footer.php'); ?>
以下はテンプレート作成に追加または変更した部分。
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
concrete5 のプログラムでないと、ファイルを直接開けないようにするための記述。
$this->inc('elements/header.php');
「elements/header.php」のファイルをここに含めるという命令で、ヘッダーの読み込み
<?php $b = new Area('Main'); $b->display($c); ?> <?php $as = new Area('Sidebar'); $as->display($c); ?>
concrete5 が編集出来るエリアを指定(編集可能エリア(ブロック挿入可能部)を定義したphpコード)’Main’、’Sidebar’は編集の際に表示されるエリアの名前(例:「Mainvに追加」などと表示される)
<?php $this->inc('elements/footer.php'); ?>
「elements/footer.php」を読み込むという命令文。フッターの読み込み
concrete5 のテーマは通常、いくつかのデフォルトテンプレートで構成されている。ここでは full.php を作成。
full.php
<?php defined('C5_EXECUTE') or die(_("Access Denied.")); $this->inc('elements/header.php'); ?> <div id="contents" class="clearfix"> <div id="main" class="full"> <!--この部分をconcrete5 が編集出来るエリア(Main)を指定--> <?php $b = new Area('Main'); $b->display($c); ?> </div> <!-- end of #main --> </div> <!-- end of #contents --> <?php $this->inc('elements/footer.php'); ?>
ここまでに作成したファイルの構成は以下の通り。
管理画面にログインして、「ページとテーマ」を開くと、「インストール可能なテーマ」として保存したテーマが表示されるので、「インストール」をクリック。
次のような画面が表示されるので「テーマ一覧に戻る」をクリックして、テーマ一覧に戻る。
必要であれば「プレビュー」で確認し、「有効化」をクリック。
次のような画面が表示されるので「はい」をクリックするとそのテーマがサイト全体に反映される
レイアウトを決めるHTMLファイルのスクリーンショット
Concrete5 のテーマのスクリーンショット