スポンサードリンク
Categories: ネット

BaserCMS ブログカテゴリー表示を任意にする方法とか


photo credit: Mark Faulkner Photography

  • 2014/06/26追記
    この記事の内容は、BaserCMS 1.xで検証した内容であり、現在の最新版である3.xでは使えない可能性があります。おそらく最新の環境でテストされたと思われる記事からピンバックをいただきましたので、そちらもあわせてご参照ください。
    http://blog.s-giken.net/51.html

 

あけましておめでとうございます。今年は例年以上に正月気分にならなかった正月でしたが、皆様いかがお過ごしでしょうか。

……って、今ごろ新年の挨拶かよとか思われそうですが、このネタは1月2日に投稿予定だったものの、このブログを置いてた SaaSes Industria が絶不調だったため、サーバーが復旧するまで待とうと、色々試したり問い合わせを行っていた間中寝かしていたので、こんな有様となっております。結局 Industria はまともにならず今でもクソ重いので、さくらのVPS に出戻りました。

ということで、ネタの鮮度的にはアレな感じになりましたが、新年の休みを潰して BaserCMS のテーマファイルを作成してた際に作成・利用した Tips 的な内容を、備忘録として新年一発目のネタとさせていただきます。

 

ブログカテゴリー表示を任意のコードで行う

BaserCMSには、ブログのカテゴリー一覧をリストタグで表示してくれるという、便利な関数

$blog->getCategoryList()

がありますが、これだとちょっと凝ったリスト出力をしたいとか、もしくはリストタグ以外で出力する時に困ってしまうということがありました。

Blog プラグインのウィジェットテンプレートである、blog_category_archives.ctp を見ても、この関数でカテゴリー一覧を出力していたため、方法はないのかなーと思っていましたが、月別アーカイブを出力するための blog_monthly_archives.ctp では、個別の出力コードとなっていたので、これを参考にしてコードを書いたところ、うまくいきました。

コードはこんな感じです。これを 適当なファイル名.ctp として、テーマの elements ディレクトリに保存し、Blog 用のテンプレートから呼んでやると、カテゴリー一覧が任意のタグで表現できます。

<?php

if(!isset($count)) {
	$count = true; //ここは好みで false に
}
if(isset($blogContent)){
	$id = $blogContent['BlogContent']['id'];
}else{
	$id = $blog_content_id;
}
if($count) {
	$actionUrl = '/blog/get_categories/'.$id.'/1';
} else {
	$actionUrl = '/blog/get_categories/'.$id;
}
$data = $this->requestAction($actionUrl);
$categories = $data['categories'];
$this->viewVars['blogContent'] = $data['blogContent'];
$baseCurrentUrl = $blogContent['BlogContent']['name'].'/archives/category/';
?>

<div class="widget widget-blog-monthly-archives widget-blog-monthly-archives-<?php echo $id ?> blog-widget">

	<!-- ここからコード出力 -->
	<?php if($categories): ?>

	<ul class="category_menu">

		<?php foreach($categories as $category): ?>

			<?php if($count && isset($category['BlogCategory']['count'])): ?>
				<?php $category['BlogCategory']['title'] .= '('.$category['BlogCategory']['count'].')' ?>
			<?php endif ?>

			<!-- 選択状態のカテゴリーを active に。それ以外を none にする -->
			<?php if($this->params['url']['url'] == $baseCurrentUrl.$category['BlogCategory']['name']): ?>
				<?php $class = 'active' ?>
			<?php else: ?>
				<?php $class = 'none' ?>
			<?php endif ?>

			<!-- 記事数カウント分岐 -->
			<?php if($view_count): ?>
				<?php $title = $category['BlogCategory']['title'].' ('.$category['BlogCategory']['count'].')' ?>
			<?php else: ?>
				<?php $title = $category['BlogCategory']['title'] ?>
			<?php endif ?>

		<!-- リスト出力ループ カスタマイズ部分 -->
		<li>
			<?php $baser->link('<span class="xxx">'.$title.'</span>', array(
				'admin'			=> false,
				'plugin'		=> '',
				'controller'	=> $blogContent['BlogContent']['name'],
				'action'		=> 'archives',
				'category', $category['BlogCategory']['name']
			), array('title'=> $title, 'class'=> $class)) ?>
		</li>
		<?php endforeach; ?>
	</ul>
	<?php endif; ?>
</div>

実際に出力されるコードはこんな感じ。

<ul class="category_menu">
	<li>
		<a href="/basercms/index.php/blog_name/archives/category/category_name1" title="カテゴリー名 1(100)" class="active"><span class="xxx">カテゴリー名 1(100)</span></a>
	</li>
	<li>
		<a href="/basercms/index.php/blog_name/archives/category/category_name2" title="カテゴリー名 2(50)" class="none"><span class="xxx">カテゴリー名 2(50)</span></a>
	</li>
</ul>

カテゴリー名の後ろの (100) とか (50) の部分は、そのカテゴリーに投稿された記事数が出ます。出したくない場合は、

$count = true; //ここは好みで false に

を、false にすれば桶。

出力部を変更してやれば、リストタグ以外にも色々と変更が可能なので、その辺りはお好みでー。

 

サイトマップごとのカテゴリリンクを出力するコード

最近よく見る、フッターをサイトマップ代わりにする時に便利なコードです。各ページカテゴリーのカテゴリー番号を設定してやることで、それぞれのカテゴリーごとにサイトマップリンクを出力できます。

<?php
	$baseroot = str_replace('/index.php/','/index.php',$baser->getRoot());
	$pages = $baser->getPageList(1); //カテゴリー番号を設定

	echo '<ul>';
		foreach($pages as $page){
			echo '<li><a href="'.$baseroot.$page['url'].'">'.$page['title'].'</a></li>';
		}
	echo '</ul>';
?>

出力されるコードはこんな感じ。

<ul>
	<li>
		<a href="/basercms/index.php/category/index">トップページ</a>
	</li>
	<li>
		<a href="/basercms/index.php/category/page">セカンドページ</a>
	</li>
</ul>

 

画像にリンクを張る

よく忘れるのでメモ。自分はこんな感じでやってますが、もっと効率のいい方法があったら教えてください。

<?php
	$img = $baser->getImg('/gazou.jpg', array('alt'=> '画像ファイル'));
	$baser->link($img, '/category', array('title'=> '画像リンク'))
?>

出力されるコードはこんな感じ。

<a href="/basercms/index.php/category" title="画像リンク"><img src="/basercms/app/webroot/themed/themedir/img/gazou.jpg" alt="画像ファイル" /></a>

 

ページが属しているカテゴリ名を表示する

他にもっとシンプルなやり方があったと思うんだけど、思い出せないので力業コード。

<?php
	$category = $page->getCategory();
	echo $category['title'];
?>

出力結果は……そのページが属しているカテゴリ名だけなので、要らないよね。

 

全てのコードは自分が作成して利用したものなので、問題はないとは思いますが、ブログ掲載用にコードクリーニングしたため、その部分でおかしくなる可能性はあります(まず問題ないとは思うけど)。

また、mod_rewrite を利用しない環境用に作成したコードなので、mod_rewrite を利用するとうまく動かない可能性があります。その場合はそれらしい部分を適当に書き換えてみてください。

ということで、BaserCMS の Tips 備忘録でした。

スポンサードリンク
GUILZ.ORG

View Comments

Share
Published by
GUILZ.ORG
スポンサードリンク