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 のテーマのスクリーンショット