あけましておめでとうございます。今年は例年以上に正月気分にならなかった正月でしたが、皆様いかがお過ごしでしょうか。
……って、今ごろ新年の挨拶かよとか思われそうですが、このネタは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 備忘録でした。
View Comments