POPSブログ

ページごとにサイドバーを変える/1

20

  Category:  basercms2012/02/11 pops 

ページごとにサイドバーを変える方法である、色々なやり方があるとは思いますが、私はereg()を使用してページ判定をしています。


ページごとにサイドバーを変える1


ページの判定が難しい時がある

BaserCMSは「コーポレートサイト」用の簡素なシステムから発展して来ている。WordPress並みの命令は無い。
色々と判別していくには、多少のアイデアは必要であり、CakePHPで出来ていても「PHP」は使用できる。


ページごとにサイドバーを変える、または色々な判定には現在のページの情報を取得して適切に処理せねばならないが、BaserCMS標準 の「データ取得命令」では少し判定し難い面もある。
情報は少ないが、ページ判定に使用出来るものとして、、

  • getContentsName()、はDefault Contact ブログID の判定しか出来ない。
  • getContentsName(true)、は全てのパスが結合した状態の文字列。
    例 (ContactIndex TokusyuuTransition PopsArchivesCategoryIndex など)
  • getCategory()、はカテゴリーを登録していないと使用できない。

よってgetContentsName(true)、で取得した文字列にパスキーワードが含むか検索して使用してみた。
例、ContactIndex ContactConfirm ContactSubmit なら Contact を含むので contact であると判定するなど



ereg() は検索文字をふくめば「真」を返すから

$p = $baser->getContentsName(true);
$rcd=ereg('About',$p);
if ($rcd) {処理...............}

ページ関連の文字を含むか調べてサイドバーを変えている。カテゴリーがあっても大丈夫。

ereg() は非推奨である、しかる時には、ereg_match() に書き換えればよい。


確かめるには「レイアウト」の default.ctp 上部に下のコードを書き、出力を見ると良い


<?php
$p=$baser->getContentsName(true);
echo($p);
?>

使用している判定方法

よって下記のようにしている。Tokusyuu は特集記事、Pops はブログです。



getContentsNameの実行、必ずtrueをいれる

$p=$baser->getContentsName(true);

TOPページの判定、常にindexページはこの判定を用いる

if($baser->isTop()) {
	//index
	$baser->element('sidebar2');
}

その外のページの判定、カテゴリに分類してなくとも正確に判定できる
どのページであっても良い。カテゴリ分類していても判定できる、エラーはindexが使用される。
書き方が大変だが、全部判定しないと不安定

if(!$baser->isTop()) {
	//Tokusyuu 特集カテゴリ階層
	$rcd=ereg('Tokusyuu',$p);
	if ($rcd) {$baser->element('sidebar4');}
	//Pops ブログ階層 (blog階層は使用されているので、blogの名前は使用できない)
	$rcd=ereg('Pops',$p);
	if ($rcd)  {$baser->element('sidebar');}
	//Service serviceファイル
	$rcd=ereg('Service',$p);
	if ($rcd)  {$baser->element('sidebar');}
	//About aboutファイル
	$rcd=ereg('About',$p);
	if ($rcd)  {$baser->element('sidebar');}
	//Sitemap sitemapファイル
	$rcd=ereg('Sitemap',$p);
	if ($rcd)  {$baser->element('sidebar');}
	//Contact 明示的ではないがcontact階層のファイル
	$rcd=ereg('Contact',$p);
	if ($rcd) {$baser->element('sidebar3');}
}

上の場合は長い
sidebarの名前の付け方で規則性があるので、短くするならば下のようにも出来る
elementの中は 文字形 での指定だから、文字連結子で結合させて

if(!$baser->isTop()) {
	$no="";
	if (ereg('Tokusyuu',$p)) {$no="4";}
	if (ereg('Contact',$p)) {$no="3";}
	$baser->element('sidebar'.$no);
}

でも良い

まとめれば


<?php

$p=$baser->getContentsName(true);

if($baser->isTop()) {
	//index
	$baser->element('sidebar2');
}
if(!$baser->isTop()) {
	$no="";
	if (ereg('Tokusyuu',$p)) {$no="4";}
	if (ereg('Contact',$p)) {$no="3";}
	$baser->element('sidebar'.$no);
}

?>

現在上記の判定でやっているが、最終的には 旨く組み合わせて、case文 で処理すべきである。


case文は
これを書き込むことが出来るのが決定打、エラーの恐れがある場合にキチンと非表示になる

default:$baser->element('widget_area',array('no'=>$widgetArea));

【参考】forum.basercms.net: カテゴリごとに異なるサイドバーを表示させたいが


【次のページ】ページごとにサイドバーを変える2


[ この記事のURL ]


タグ:memo , basercms , cakePHP , series

[ ページごとにサイドバーを変える シリーズ記事 ]

ページごとにサイドバーを変える/22012.02.12
ページごとにサイドバーを変える/12012.02.11

 

ブログ記事一覧

年別アーカイブ一覧



[1]