テーマのOverRide
出典: GeeklogJpWiki
以下のハックは,Geeklog1.4.1用です。Geeklog1.5,1.6からは,KZ_Templateクラスを利用してください。
- 開発 kino
このハックにより,選択したテーマのディレクトリにテンプレートファイルが無ければ,指定したベースとなるテーマのディレクトリにあるファイルが使用されます。これにより追加作成したテーマは変更のあるファイルだけを準備すればよいので,容量の削減およびメンテナンスの向上が図れます。
日本語版標準パッケージ2007.7.30版以後,OverRideハックを行って提供しています。この開発により,とくにProfessionalCSSのカスタムテーマが大変つくりやすくなりました。
新しいテーマのディレクトリにスタイル・画像・テーマ固有のテンプレート・functions.phpをアップ
上記設定で新しいテンプレートに存在しないファイルはベーステンプレートにあるファイルを見に行くようになるので,新しいテンプレートから変更の必要の無いファイルは不要となります。 このとき、OverRideされるファイルは template で set_file 関数を使って設定されるファイルのみなので,thtml や css のファイル内で直接しているファイルは対象にならないことに注意してください。
functions.phpは,テーマを作成するごとに,以下のようにハックが必要となります。
通常あたらしいテーマに必要なファイルは,以下のファイルのみとなります。
| ファイル | 説明 |
|---|---|
| style.css | 後述の修正が必要です。 |
| custom.css | style.cssから呼ばれるテーマ固有のスタイル。 |
| images/* | custom.cssから呼ばれる画像(images/custom/*)等もあわせてアップ。 |
| テーマ固有のテンプレート | header.thtml, footer.thtmlなど,あたらしいテーマ固有のテンプレートファイル群。固有のテンプレートが無ければアップする必要はありません。 |
| forum/image_set/*, forum/javascript/*, forum/index.html,navbar/* | 掲示板プラグインを利用する場合は,forum下のforum/layout/*以外のファイルは,テンプレートファイルではなくJavaScriptや画像ファイルなのでアップする必要があります。さらにnavbar/*も必要です。 |
| navbar/index.html, navbar/images/* | navbar/images下のファイルは,テンプレートファイルではなく画像ファイルなのでアップする必要があります。 |
| javascript | javascriptファイルはアップする必要があります。 |
| functions.php | 後述のハックが必要です。 |
| admin/*, navbar/*, advanced_editor_header.thtml (管理画面をprofessionalテーマにする場合はアップしない) | 2007.7.30版からのハックにより,admin以下のテンプレートが無ければ管理画面をテーマ「professional」に設定します。以前の仕様と同様に管理画面も通常のテーマで作業したい場合には,アップする必要があります。 admin/*をアップする場合には必ずnavbar/*, advanced_editor_header.thtmlをあわせてアップしてください。 |
- サブディレクトリのテンプレートファイルの注意
- サブディレクトリのテンプレートは,サブディレクトリごとすべてアップロードします。サブディレクトリのテンプレートからさらにサブディレクトリのテンプレートを呼ぶことが多いため,サブディレクトリ内で一部だけをアップしたり一部だけ削除しないでください。
style.cssの変更事例
スタイルシートは,OverRideしないので,stye.cssなどから直接あたらしいテーマのスタイルを読み込むよう,指定してください。
@charset "utf-8";
/*==============================================================================
タイトル: インポート用スタイルシート
著者 : Fumito Arakawa as Phize (http://phize.net/)
説明 : 各CSSファイルをインポートします。
==============================================================================*/
/* デバッグ用スタイル {
@import url("../ProfessionalCSS/css/debug.css");
} デバッグ用スタイル */
/* 基本スタイルシート */
@import url("../ProfessionalCSS/css/default.css"); /* デフォルトスタイル */
@import url("../ProfessionalCSS/css/common.css"); /* 共通スタイル */
@import url("../ProfessionalCSS/css/layout.css"); /* 基本レイアウトスタイル */
@import url("../ProfessionalCSS/css/block.css"); /* ブロックスタイル */
@import url("../ProfessionalCSS/css/option.css"); /* オプションメニュースタイル */
@import url("../ProfessionalCSS/css/form.css"); /* フォームスタイル */
@import url("../ProfessionalCSS/css/story.css"); /* 記事スタイル */
@import url("../ProfessionalCSS/css/article/article.css"); /* 個別記事ページスタイル */
@import url("../ProfessionalCSS/css/comment/comment.css"); /* コメントスタイル */
@import url("../ProfessionalCSS/css/navbar/navbar.css"); /* ナビゲーションスタイル */
@import url("../ProfessionalCSS/css/preferences/preferences.css"); /* 設定ページスタイル */
@import url("../ProfessionalCSS/css/profiles/profiles.css"); /* メール送信ページスタイル */
@import url("../ProfessionalCSS/css/search/search.css"); /* 検索ページスタイル */
@import url("../ProfessionalCSS/css/stats/stats.css"); /* アクセス情報ページスタイル */
@import url("../ProfessionalCSS/css/submit/submit.css"); /* 投稿ページスタイル */
@import url("../ProfessionalCSS/css/trackback/trackback.css"); /* トラックバックスタイル */
@import url("../ProfessionalCSS/css/users/users.css"); /* アカウント情報ページスタイル */
/* 管理者ページスタイルシート */
@import url("../ProfessionalCSS/css/admin.css"); /* インポート用スタイルシート(管理者ページ) */
/* プラグインスタイルシート */
@import url("../ProfessionalCSS/css/plugin.css"); /* インポート用スタイルシート(プラグイン) */
/* カスタムテーマスタイルシート */
@import url("custom.css");
functions.phpをハックする
layout/theme/functions.php を下記の内容に変更してサイトのエンコード(UTF-8)で保存してください。 この事例では,ベースのテーマをProfessionalCSSとしています。ベースのテーマはどのテーマ名でもかまいませんが,テーマのフルセットが用意されていなければなりません。
<?php
if (strpos ($_SERVER['PHP_SELF'], 'functions.php') !== false) {
die ('This file can not be used on its own!');
}
// 左ブロックを右側(フッタテンプレート内)に配置したいとき
// $_CONF['left_blocks_in_footer'] = 1;
//
// 常時右ブロックを表示したいとき
// $_CONF['show_right_blocks'] = true;
$_BASE_TEMPLATE = 'ProfessionalCSS';
if(file_exists($_CONF['path_themes'] . $_BASE_TEMPLATE . '/functions.php'))
{
require_once( $_CONF['path_themes'] . $_BASE_TEMPLATE . '/functions.php' );
}
// $_BASE_TEMPLATE のテンプレートに対応する関数があるときのみ以下の2つの関数を定義してください。
// その際,{'theme'} は実際のテーマの名称に置き換えてください。
// ※ProfessionalCSSの場合には,定義する必要はありません。
//
//function {'theme'}_siteHeader( $what = 'menu', $pagetitle = '', $headercode = '' )
//{
// global $_BASE_TEMPLATE;
//
// $function = $_BASE_TEMPLATE . '_siteHeader';
//
// if( function_exists( $function ))
// {
// return $function( $what, $pagetitle, $headercode );
// }
//}
//
//function {'theme'}_siteFooter( $rightblock = -1, $custom = '' )
//{
// global $_BASE_TEMPLATE;
//
// $function = $_BASE_TEMPLATE . '_siteFooter';
//
// if( function_exists( $function ))
// {
// return $function( $rightblock, $custom );
// }
//}
?>




