POPSブログ

BaserCMS 2.0、テーマヘルパー

106

  Category:  basercms2012/05/20 pops 

新たにテーマ内部にテーマ専用のヘルパーを書ける仕組みが導入されました。便利そうなのでテストして見ました。


BaserCMS 2.0、テーマヘルパー

詳しい「リファレンス」は現時点ではありませんので、詳細はいえませんが、テーマ内部に/helpers/を作り、テーマ名プラス_baserのファイルをUPすれば自動的に認識してくれます。今までは、スクリプトの書く場所に苦労していましたが、これは便利です。(バージョン 2.0.4でテーマヘルパー動作不具合が解消されました)

【参照】basercms.net: テーマヘルパー


1. テーマ内部に helpers フォルダを作る。

2. テーマ名_baser.php のヘルパーファイルを作る。名前の付け方に規則あり。


仮にテーマ名をskeltonとすると
themed/skelton/helpers/skelton_baser.php となる


<?php
/* skelton/helpers/skelton_baser.php */
/**
 * skeltonヘルパー
 */

class SkeltonBaserHelper extends AppHelper {
	//ヘルパースクリプトを記述
}
?>

テーマヘルパーに「タグリスト表示」のコードを

テーマヘルパーに「タグリスト表示」のコードをかいて見る。スクリプトは下記のものを参考にしました。

【参照】mani-lab.com: 【baserCMS】ブログのタグを一覧取得する


表示されるのは「タグのリスト」ですが、少し改造して、本当の「タグクラウド」ではありませんが、「タグクラウド風」にしてみます。ブログのIDを news とします。
文字の大きさなど変えてやれば、本物に近い「偽クラウド」になります。(実際、右サイドバーに TagCloud があります。本当は「タグリスト」です)


以下、ローカル環境でテストしたものです。



<?php
/* skelton/helpers/skelton_baser.php */
/**
 * skeltonヘルパー
 */

class SkeltonBaserHelper extends AppHelper {
	//BcBaserヘルパーなどを使用できるようにする
	var $helpers = array('BcBaser','Form','Html','Javascript');
/**
 * タグ一覧を出力する
 *
 * @return void
 * @access public
 */
	function tagList() {
 
		echo $this->getTagList();
 
	}

/**
 * タグ一覧を取得する
 *
 * @return void
 * @access public
 */
	//[BLOG-TAG-LIST]
	function getTagList() {

		//注意、何処でも使用できるがblogページ以外ではblogContent['name']が違ってくる
 		
		$tagModel = ClassRegistry::init('Blog.BlogTag');
		$tagData = $tagModel->find('all');
		//連結用途
		$tagname;
		$spter=" ";//区切り文字(スペース)

		//Blogに行ってないのでBlog IDを未取得で、newsを直接入れた
		//この辺は状況に応じて設定できるように工夫すればよい
		for($i=0; $i?<count($tagData); $i++){
			//newsを直接入れた
			$url='/news/archives/tag/'.$tagData[$i]['BlogTag']['name'];
			$base=$this-?>Html->link($tagData[$i]['BlogTag']['name'], $url);
			$tagname .= $base.$spter;
		}
		//後処理
		$tagname = rtrim($tagname,$spter);//最後の区切り文字を除去

		if ($tagname) {return $tagname;}
		else {return 'NO-TAG-DATA';}
		
	}
}
?>

実行は表示したいサイドバーに書きこみます。$skeltonBaser->でアクセスします。


<?php
/* skelton/elements/sidebar.php */
/**
 * サイドパー
 */
?>

<div>
<?php $skeltonBaser->tagList(); ?>
</div>

出力HTMLの例

タグ登録 blog memo jquery as3 があり、サブフォルダ階層 basercms2 ブログID news とした場合。


<div>
<a href="/basercms2/news/archives/tag/blog">blog</a> <a href="/basercms2/news/archives/tag/memo">memo</a> <a href="/basercms2/news/archives/tag/jquery">jquery</a> <a href="/basercms2/news/archives/tag/as3">as3</a>
</div>

2012/08/19/追記

バージョン 2.0.4でテーマヘルパー動作不具合が解消されました。また、下記のようにも設定出来るようにもなりましたので、「テーマ変更」で書き換えが省けるようです。



保存場所は同じ、使用テーマ階層に
/themed/使用テーマ/helpers/demo.php
別の名前がつかえる、
demo.php

記載はヘルパーの規則
class DemoHelper extends AppHelper {
	ヘルパースクリプトを記述、内容は前と同じ
}

実行
<div class="taglist"><?php $demo->tagList(); ?></div>

これだと、テーマを変更しても書き換え不要である。前の書き方も引き続き使用できるようです。


スゴイズラ。こりゃ便利だ!!


● 404エラー時動作しません (バージョン 2.0.4で解消されました)

2012/08/11/追記

現在の、BaserCMS 2.0.3を調べ、テーマの作成テストで、「403エラー」「404エラー」を出してみたら、テーマヘルパーが動作(認識)しません。おそらく「404エラー」時などはシステムが簡略処理でエラー画面の表示に進んでいるのではないでしょうか。
アドレス間違い、「不正アクセス」の場合ですので、そのままでも問題は起きないのですが。一応回避策として次ぎのようにすれば画面の乱れなど回避できます。
「404エラー」時等の場合、Error 文字が吐き出されますのでそれで判定すれば良い。いずれ直るでしょうが。

2012/08/19/追記、バージョン 2.0.4でテーマヘルパー動作不具合が解消されました。404エラー時の処理は行った方が賢明です。


標準状態で使用している場合は問題ありません。個人で独自の関数などを追加した場合の話です。

contentsName()を使用して、エラー回避の判定文をいれてからヘルパーにアクセスする。この書き方では、404エラー時には関数を実行しない。


<?php
/* skelton/elements/sidebar.php */
/**
 * サイドパー
 */
?>

<div>
	<?php if($bcBaser->contentsName() !='Error'): ?>
		<?php $skeltonBaser->tagList(); ?>
	<?php endif ?>
</div>

その外の場合でも、404エラー時の問題は下記のようにすれば解決する。


404エラー時の処理回避
<?php if($bcBaser->contentsName() !='Error'): ?>
	通常時に処理する関数などを書く
<?php endif ?>

--------------------------------------------

<?php
if($bcBaser->contentsName() !='Error') {
	通常時に処理する関数などを書く
}
?>

説明図


図示しますと、404エラー時 4. 5 番目のようになって表示されるでしょう。上部のリンクは生きています。

なお、「タグリスト表示」機能はバージョン2.0.4当たりから関数として追加されるようです。どのような形式かは不明ですが。少し便利になる。

以上、追記します。


通常はブログ表示のページで使用するものですが、ブログのIDを受け渡すなどの処理を行うと、ブログ以外のページでも利用可能です。但し、ブログを1つ登録している場合です。
そのほか、色々とカスタムの関数などかけますから大変便利です。

参照元コードでは、ブログでの使用を前提としていますので blogContent['name']で判定しています。私の場合はブログ以外で使用する前提ですので、blogContent['name'] はブログ以外のページでは別の名前を取得します。よって直接URLを入れたわけです。


テーマが変更なれば、名前などの書き換え作業が付随はするが、レイアウト、サイドバーなどで使用されることが多いと思われるので、たいした作業ではない。便利が一番。
上の追記で書いていますが、不具合など解消され、使いやすくなっています。

この記事を書いた 2012/05/20 時点では、正式の「リファレンス」は発表されて居ないので、詳細は正式の「リファレンス」を参照ください。


以上です。


[ この記事のURL ]


タグ:basercms2 , memo , cakePHP

 

ブログ記事一覧



[1]