作成例: 2つ目のテーマ
ここでは2つ目の例として、CSS、Javascript、プラグインの対応などBluditのテーマを最初から作る方法を紹介します。
このテーマはMars
と呼びましょう。
もし、このチュートリアルに興味がない場合は、こちらからソースコードをダウンロードできます。 Mars theme.
フォルダー構造
/bl-themes/
フォルダーにテーマのフォルダーを作成します。パスは/bl-themes/mars/
のようになります。
次に言語、CSS、JSフォルダを作成します。
/bl-themes/mars/
フォルダーにlanguages
フォルダーを作成します。/bl-themes/mars/
フォルダーにcss
フォルダーを作成します。/bl-themes/mars/
フォルダーにjs
フォルダーを作成します。
/bl-themes/mars/
css/
js/
language/
名前と情報
テーマ情報を含むファイルを作成します。このファイルはテーマのルートフォルダーにあり、metadata.json
という名前にする必要があります。以下のJSONコードを含めてください。
{
"author": "Bludit",
"email": "",
"website": "",
"version": "1.0",
"releaseDate": "2019-01-01",
"license": "MIT",
"compatible": "3.0",
"notes": ""
}
en.json
というテーマの名前と説明を書いたファイルも作成します。下のJSONコードを記述して/bl-themes/mars/languages/
フォルダーに配置します。
{
"theme-data":
{
"name": "Mars",
"description": "これは2番目のBluditテーマです。"
}
}
Index.php
それではindex.php
の作業をしましょう。/bl-themes/mars/
フォルダーに下のHTMLコードを記述したファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
</body>
</html>
CSSファイル
CSSファイルを追加します。CSSファイルの追加には2つ方法があります。
Theme::css()
ヘルパーオブジェクトを使用する- またはHTMLタグを使う`
今回は、ヘルパーを使ってCSSファイル/bl-themes/mars/css/style.css
を追加します。ヘルパーを使用すれば、絶対パスを指定する必要はありません。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
</head>
<body>
</body>
</html>
Javascriptファイル
JavaScriptファイルを追加します。JavaScriptファイルの追加には2つ方法があります。
Theme::js()
ヘルパーオブジェクトを使用する- またはHTMLタグを使う`
ここでは、ヘルパーを使ってJavascriptファイル/bl-themes/mars/js/mars.js
を追加します。ヘルパーを使用すれば、絶対パスを指定する必要はありません。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
</head>
<body>
</body>
</html>
プラグインサポートの追加
プラグインのサポートを追加するには、Theme::plugins()
ヘルパーを使用します。
サイトのプラグインフックは以下のとおりです。
siteHead
にはすべてのプラグインが含まれており、<head>...</head>
タグ内のコードを返します。siteBodyBegin
にはすべてのプラグインが含まれており、上部の<body>...</body>
タグ内のコードを返します。ウェルカムバナーやページ上部にあるツールバーに利用できます。siteBodyEnd
にはすべてのプラグインが含まれており、下部の<body>.</body>
タグ内のコード(JavaScriptコードなど)を返します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
<!-- siteHeadフックでプラグインをロード -->
<?php Theme::plugins('siteHead') ?>
</head>
<body>
<!-- siteBodyBeginフックでプラグインをロード -->
<?php Theme::plugins('siteBodyBegin') ?>
<!-- ここに残りすべてのHTMLコード -->
<!-- siteBodyBeginフックでプラグインをロード -->
<?php Theme::plugins('siteBodyEnd') ?>
</body>
</html>
サイトロゴ、タイトル、スローガン
Site-Objectを使ってロゴやタイトル、スローガンを取得できます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
<!-- siteHeadフックからプラグインをロード -->
<?php Theme::plugins('siteHead') ?>
</head>
<body>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyBegin') ?>
<img src="<?php echo $site->logo() ?>" alt="" width="128">
<h1><?php echo $site->title() ?></h1>
<h2><?php echo $site->slogan() ?></h2>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyEnd') ?>
</body>
</html>
私はどこ
では、サイトのコンテンツを操作してみましょう。
ユーザーがサイトのどのページを参照しているかを特定するには変数$WHERE_AM_I
を使用します。たとえば、ユーザーがページを閲覧している場合、変数の値はpage
という文字列を持ち、ユーザーがフロントページ(ホームページ)を閲覧している場合は、変数の値はhome
になります。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
<!-- siteHeadフックからプラグインをロード -->
<?php Theme::plugins('siteHead') ?>
</head>
<body>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyBegin') ?>
<h1><?php echo $site->title() ?></h1>
<h2><?php echo $site->slogan() ?></h2>
<?php if ($WHERE_AM_I=='page'): ?>
<p>ユーザーは特定のページを見ています</p>
<?php elseif ($WHERE_AM_I=='home'): ?>
<p>ユーザーはホームページを見ています</p>
<?php endif ?>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyEnd') ?>
</body>
</html>
メインコンテンツ
ユーザーがホームページにいる場合、Bluditはすべての公開ページを含むグローバル配列$pages
を生成します。各ページは Page Object
です。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
<!-- siteHeadフックからプラグインをロード -->
<?php Theme::plugins('siteHead') ?>
</head>
<body>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyBegin') ?>
<h1><?php echo $site->title() ?></h1>
<h2><?php echo $site->slogan() ?></h2>
<?php if ($WHERE_AM_I=='page'): ?>
<p>ユーザーは特定のページを見ています</p>
<?php elseif ($WHERE_AM_I=='home'): ?>
<?php foreach ($content as $page): ?>
<h3><?php echo $page->title(); ?></h3>
<?php endforeach ?>
<?php endif ?>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyEnd') ?>
</body>
</html>
ユーザーが特定のページを表示している場合、BluditはグローバルPage-Object$page
を生成します。この例では、タイトルとコンテンツを表示します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- CSS -->
<?php echo Theme::css('css/style.css') ?>
<!-- Javascript -->
<?php echo Theme::js('js/mars.js') ?>
<!-- siteHeadフックからプラグインをロード -->
<?php Theme::plugins('siteHead') ?>
</head>
<body>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyBegin') ?>
<h1><?php echo $site->title() ?></h1>
<h2><?php echo $site->slogan() ?></h2>
<?php if ($WHERE_AM_I=='page'): ?>
<h3><?php echo $page->title(); ?></h3>
<?php elseif ($WHERE_AM_I=='home'): ?>
<?php foreach ($pages as $page): ?>
<h3><?php echo $page->title(); ?></h3>
<?php endforeach ?>
<?php endif ?>
<!-- siteBodyBeginフックからプラグインをロード -->
<?php Theme::plugins('siteBodyEnd') ?>
</body>
</html>