いろいろ教えてもらったりした方法のメモです。
baserCMSの標準ウィジェットのローカルナビゲーションって便利なんですが、同じカテゴリのページ一覧しか出せない欠点があります。
固定ページでツリー構造でページ管理する時は、親カテゴリから全部表示させたい事も多いと思います。
そんな時はウィジェットではなくて、 $bcBaser->sitemap()を使って出しちゃえ、って強引な方法を紹介します。
sitemap()関数について
サイトマップを出力する http://basercms.net/reference_2/archives/59
$bcBaser->sitemap([$pageCategoryId], [$recursive])
引数名 説明 初期値 $pageCategoryId ページカテゴリを指定して絞り込む場合にページカテゴリIDを指定。 null $recursive ページカテゴリの階層を指定。 null
引数にページカテゴリIDを投げちゃえば、それ以下のページリストがお手軽に取得できるわけです。
固定ページの構成例
[***]がカテゴリ、 ({name}, {id} )がカテゴリネームとカテゴリID
- [本・漫画・雑誌] ( book, 1 )
- [DVD・ミュージック] ( dvd-music, 2 )
- [DVD] ( dvd )
- [国内] ( ja )
- 映画ページ
- ドラマページ
- アニメページ ←※ここにアクセス
- [海外] ( overseas )
- [国内] ( ja )
- [ミュージック] ( music )
- [DVD] ( dvd )
「[DVD・ミュージック]> [DVD]>[国内]>アニメページ」 にアクセスして、
一番上の親カテゴリ[DVD・ミュージック]配下のページ一覧を出すようにします。
ソースコード
elements/side.php などに以下のソースを記述
[php]
$PageCategoryID = $bcPage->data[‘PageCategory’][‘id’]; //ページのカテゴリIDを取得
}
//子カテゴリ以下の固定ページにアクセスした時、親カテゴリIDをアクセスしてるURLから分岐
$uri = $this->here;
if (strpos($uri, ‘index.php’) == 1) { //対策:スマートURLがOFF時
$uri = substr($uri, strlen(“index.php”) + 1);
}
$Path = split(“/”, $uri); // “/”で分割して配列に格納
$p = $Path[1]; //親カテゴリ名を格納
//親カテゴリ名から分岐処理(決め打ち)
if ($p === ‘book’)
$PageCategoryID = 1; //[本・漫画・雑誌]
elseif ($p=== ‘dvd-music’)
$PageCategoryID = 2; //[DVD・ミュージック]
if ($PageCategoryID) {
?>
element(‘widget_area’, array(‘no’ => $widgetArea));
}
} ?>
[/php]
こんな感じに出力されます。
- [DVD・ミュージック]
- [DVD・ミュージック]
- [DVD] ( dvd )
- [国内] ( ja )
- 映画ページ
- ドラマページ
- アニメページ
- [海外]
- [国内] ( ja )
- [ミュージック]
- [DVD] ( dvd )
先頭にカテゴリ名が重複して出力されるのはsitemap()の仕様のようです。
liタグのclassに “sitemap-category li-level-1”, “sitemap-page li-level-1” とカテゴリかページ、深さが付与されてるのでCSSで調整すればいいと思います。
追記)
baserCMSのサイトマップをカスタマイズ « LANCARD.LAB|ランカードコムのスタッフブログ で、サイトマップのページ名とカテゴリ名が重複する現象の対応策がありました!
しかも、サイトマップの途中にブログやメールフォームを挿入できる機能もあるのでオススメです!
コメント