LeftblockinFooter
提供: GeeklogJpWiki
functions.phpに,以下の行を1行追加するだけで,左ブロックをフッタテンプレートfooter.thtmlに置けます。通常は,この方法を採用してください。
$_CONF['left_blocks_in_footer'] = 1;
左ブロックの変数{left_blocks}は、通常ではヘッダテンプレート(header.thtml)にしか記述できませんが、このハックによりフッタテンプレート(footer.thtml)にも記述できるようになります。
このハックとCSSレイアウトを併用することにより、内容の重要度のより高いセンターブロックのコンテンツを、左右ブロックの情報よりもHTML上、先に表示させることが可能になります。なお、SEO対策上も重要度の高い情報が先に出現したほうが有利とされています。
このハックは、lib-common.phpに定義されている標準関数COM_siteHeaderおよびCOM_siteFooterに元々備わっている仕組みと、テーマフォルダ内のfunctions.phpを組み合わせた最も簡単な機能拡張の事例であり、このハックによってテーマ作成上の可能性が拡大することも見逃せない点です。
※ 元々config.phpで「$_CONF['left_blocks_in_footer'] = 1;」を設定することにより、ヘッダテンプレート(header.thtml)ではなくフッタテンプレート(footer.thtml)に記述することが可能になりますが、すべてのテーマでそのモードに適応させなければならないので不便でした。このハックでは、config.phpを変更することなくfunctions.phpを編集するだけで左右ブロックをヘッダおよびフッタテンプレートで自由に配置させることができます。
目次 |
テーマ専用関数(functions.php)を編集
lib-common.php からコピー
public_html/layout/[テーマ]/functions.php を編集し,以下の2つの関数をlib-common.php からfunctions.phpへコピーし、関数名をそれぞれ変更します。
- COM_siteHeader → [テーマ]_siteHeader
- COM_siteFooter → [テーマ]_siteFooter
以下、[テーマ]_siteHeader を siteHeader、[テーマ]_siteFooterをsiteFooterと表記します。
{left_blocks}の展開の追加
テーマ専用関数(functions.php)から再び自分自身の関数を呼び出す箇所を削除
コピーした siteHeader, siteFooter から テーマ_siteHeader, テーマ_siteFooter を呼び出す必要はありませんので削除します。
1) siteHeader から以下を削除
$function = $_CONF['theme'] . '_siteHeader';
if( function_exists( $function ))
{
return $function( $what, $pagetitle );
}
2) siteFooterから以下を削除
$function = $_CONF['theme'] . '_siteFooter';
if( function_exists( $function ))
{
return $function( $rightblock );
}
'left_blocks_in_footer'変数による判断のif分を削除して、'left_blocks_in_footer'の影響を受けず{left_blocks}タグを処理するように変更します。
1) siteHeader から「○○○」を除く部分を削除
if( $_CONF['left_blocks_in_footer'] == 1 )
{
$header->set_var( 'geeklog_blocks', );
$header->set_var( 'left_blocks', );
}
else
{
○○○
}
2) siteFooter から「○○○」を除く部分を削除
if( $_CONF['left_blocks_in_footer'] == 1 )
{
○○○
}
左ブロック処理モード未取得不具合の対応
siteHeader で受け取っている処理モード $what を siteFooter にスルーします。
グローバル変数 $g_what を宣言/初期化します。
$g_what = 'menu';
siteHeader で処理モードをグローバル変数に退避します。
global $g_what; $g_what = $what;
siteFooter でグローバル変数の処理モードを受け取ります。
global $g_what; $what = $g_what;
siteFooter 内の処理モードに応じて動作するように変更します。
変更前:
if( is_array( $custom ))
{
$function = $custom[0];
if( function_exists( $function ))
{
$lblocks = $function( $custom[1], 'left' );
}
}
else
{
$lblocks = COM_showBlocks( 'left', $topic );
}
変更後:
if( is_array( $what ))
{
$function = $what[0];
if( function_exists( $function ))
{
$lblocks = $function( $what[1], 'left' );
}
}
else if ( $what <> 'none' )
{
$lblocks = COM_showBlocks( 'left', $topic );
}
ボタン名表示不具合の対応
$LANG_BUTTONS 変数をインクルードします。
変更前:
global $_CONF, $_TABLES, $LANG01, $_PAGE_TIMER, $topic;
変更後:
global $_CONF, $_TABLES, $LANG01, $LANG_BUTTONS, $_PAGE_TIMER, $topic;
ボタン名の展開を siteFooter に追加する。(※siteHeaderからコピーすると楽です)
$footer->set_var( 'button_home', $LANG_BUTTONS[1] ); $footer->set_var( 'button_contact', $LANG_BUTTONS[2] ); $footer->set_var( 'button_contribute', $LANG_BUTTONS[3] ); $footer->set_var( 'button_calendar', $LANG_BUTTONS[6] ); $footer->set_var( 'button_sitestats', $LANG_BUTTONS[7] ); $footer->set_var( 'button_personalize', $LANG_BUTTONS[8] ); $footer->set_var( 'button_search', $LANG_BUTTONS[9] ); $footer->set_var( 'button_advsearch', $LANG_BUTTONS[10] ); $footer->set_var( 'button_directory', $LANG_BUTTONS[11] );
以上で、functions.phpの作業は完了です。
なお、この関数はlib-common.php 内にすでにテーマ専用関数(functions.php)呼出処理が実装済みのため、呼出処理を追加する必要はありません。
テンプレートの変更
実際に,テンプレートファイルを修正して,左右逆に配置するには, ヘッダテンプレート(header.thtml)に右ブロックの変数{right_blocks}, フッタテンプレート(footer.thtml)に左ブロックの変数{left_blocks}を記述します. スタイルシートでdiv#leftblocks div#rightblocksなど関連するスタイルの設定も必要であれば修正します.
以上で,テーマの修正は完了です.