POPSブログ

BaserCMSブログに機能を付加する/2

14

  Category:  basercms2012/02/05 pops 

ブログとして利用していますので、BaserCMSに簡易タグクラウドを作る試みです。意外と重宝です。


BaserCMSブログに機能を付加する/2


BaserCMSの簡易タグクラウドを作る

TagCloud

ブログでは「カテゴリー」よりも「タグクラウドでの記事探し」のほうが多いようです。細かく分類出来るからでしょう。

BaserCMSの「タグクラウド」は標準ではありませんので作る事にします。登録されているタグリストを取り出しリンクを組めばよい訳です。
BaserCMSでは「タグ記録」を常時直ぐに利用できる状態にはなっていませんので(管理画面では「タグ記録」を呼び出している)、新たにデータベースより取得します。次のようにすれば取得できます。



$formEx->getControlSource('BlogPost.blog_tag_id');
別の取り方もあるかとはおもいますが

但し、あくまでも簡易タグクラウドです。アクセス数などの記録などはありませんので、文字の大きさが変化することもありません。あったほうが便利だから設置しただけです。


普通にリンクつきの形式で作る場合


要素にリンクを貼って書き出す方法
ここでは配置サブフォルダ /main
ブログIDのパス /pops とします
---------------------------------------------------------------
$options = $formEx->getControlSource('BlogPost.blog_tag_id');
//データ取得していれば
if(!empty($options)) {
	$name="";
	$spter=" ";//区切り文字(スペース)
	foreach($options as $option['name']) {
		//フルパスで記入しないとエラーで表示できない(外部リンク)
		$url='http://pops-web.com/main/pops/archives/tag/'.$option['name'];
		//$url='/pops/archives/tag/'.$option['name'];
		$base=$html->link($option['name'], $url);
		$name .= $base.$spter;
	}
	$name = rtrim($name,$spter);//最後の区切り文字を除去
	echo $name;
}
---------------------------------------------------------------
tagでの表示は下記のようにリンクすれば一覧表示できます
http://ドメイン名/サブフォルダ名/ブログID/archives/tag/タグ名

上の「外部リンクaタグの取得」でのURLの書き方に少し違いがあることに注意
原則は http:// から書きますが、無い場合は補充されますので、少し違います
(http://ドメイン名/サブフォルダ名 が補充されるので、/main/pops/archives.... とは書かないでください)
CakePHPの $html->link() で取得しています

Flashなどに受け渡したいためリスト形式にする場合


$formEx->getControlSource()を使用すると常時ないデータでも取り出せます
リストにして取り出す方法
---------------------------------------------------------------
$options = $formEx->getControlSource('BlogPost.blog_tag_id');
//データ取得していれば
if(!empty($options)) {
	$list="";
	$spter=",";//区切り文字
	foreach($options as $option['name']) {
			//リスト化する
			$list .= $option['name'].$spter;
	}
	$list = rtrim($list,$spter);//最後の区切り文字を除去
	echo $list;
}
---------------------------------------------------------------

当方の実際の使用例

実際の使用例です。ブログでのみ使用するようになっていますが、判定部分を削除すればTOPでも使用できます。またサイドバーに直接書き込んでも使用可能ですが、なるべくwidgets管理の中で使用したほうが望ましい。
表示BOXの大きさ、CSSなどは自由です。ブログID名などは使用者の者に合わせてください。


widget管理で埋め込んだ場合の保存場所とctp名
webroot/themed/テーマ名/elements/widgets/tagcloud.ctp


<?php
/**
 * tagcloud.ctp
 * pops
 */
?>
<!-- begin tag-cloud-area -->
<div id="tag_cloud">
<?php
//ブログの場合のみ表示するPopsはブログID
//名前の違う場合はあわせる
$p=$baser->getContentsName(true);
$rcd=ereg('^Pops',$p);
if ($rcd) {
	$options = $formEx->getControlSource('BlogPost.blog_tag_id');
	//データ取得していれば
	if(!empty($options)) {
		$name="";
		$spter=" ";//区切り文字(スペース)
		foreach($options as $option['name']) {
			//フルパスで記入しないとエラーで表示できない(外部リンク)
			$url='http://pops-web.com/main/pops/archives/tag/'.$option['name'];
			//$url='/pops/archives/tag/'.$option['name'];
			$base=$html->link($option['name'], $url);
			$name .= $base.$spter;
		}
		$name = rtrim($name,$spter);//最後の区切り文字を除去
		echo $name;
	}
}
?>
</div><!-- end tag-cloud-area -->
<br />


上のctpは下で解説する条件の中にあります、要らない場合は削除して中だけを使用ください
表示するページの名前を取得して、ブログのID名が取得名の中に含まれるならばブログと判断して実行
$p=$baser->getContentsName(true);
$rcd=ereg('^Pops',$p);
if ($rcd) {
	//内部略す
}

この判定文はページがカテゴリー分類されていなくとも、正しく判定します

注意点等

ほぼどこでも表示は可能ですが、widget管理でサイドバーに埋め込んだ場合「404エラー」などが起きても、widget管理でサイドバーを非表示にしますので画面が乱れることはありません。管理外で埋め込んだ場合は画面が乱れることがあります。
不本意な、エラー画面表示ではブログデータを取得しないで簡略化してページの表示を行っているようです。何らかの判定文を書いて置けば防げますが面倒なことです。悪意のあるものに正常な画面表示して機嫌をとっているのも変な話ですから、、、

サイトUP前に、ローカルでのテストを推奨します。Flashを使用の場合の例は実際作って動作テストをしていますが、返って操作性が悪くなりますので省略します。シンプルが一番です。
時間が経過すればタグクラウドも標準で付くかも知れません。期待しましょう。



[ この記事のURL ]


タグ:php , basercms , series

[ BaserCMSブログに機能を付加する シリーズ記事 ]

BaserCMSブログに機能を付加する/62012.02.10
BaserCMSブログに機能を付加する/52012.02.08
BaserCMSブログに機能を付加する/42012.02.07
BaserCMSブログに機能を付加する/32012.02.06
BaserCMSブログに機能を付加する/22012.02.05
BaserCMSブログに機能を付加する/12012.02.04

 

ブログ記事一覧

年別アーカイブ一覧



[1]