baserCMSで固定ページの特定の親カテゴリからツリー構造で配下のページ一覧をサイドバーに表示させる方法

いろいろ教えてもらったりした方法のメモです。

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 )
    •  [ミュージック] ( music )

「[DVD・ミュージック]> [DVD]>[国内]>アニメページ」 にアクセスして、
一番上の親カテゴリ[DVD・ミュージック]配下のページ一覧を出すようにします。

ソースコード

elements/side.php などに以下のソースを記述

[php]

data[‘PageCategory’][‘id’])){
$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) {
?>

sitemap($PageCategoryID); //サイトマップのリスト表示 ?>

element(‘widget_area’, array(‘no’ => $widgetArea));
}
} ?>

[/php]

こんな感じに出力されます。

  • [DVD・ミュージック]
  • [DVD・ミュージック]
    •  [DVD] ( dvd )
      • [国内] ( ja )
        • 映画ページ
        • ドラマページ
        • アニメページ
      •  [海外]
    •  [ミュージック]

先頭にカテゴリ名が重複して出力されるのはsitemap()の仕様のようです。
liタグのclassに “sitemap-category li-level-1”, “sitemap-page li-level-1” とカテゴリかページ、深さが付与されてるのでCSSで調整すればいいと思います。

追記)
baserCMSのサイトマップをカスタマイズ « LANCARD.LAB|ランカードコムのスタッフブログ で、サイトマップのページ名とカテゴリ名が重複する現象の対応策がありました!
しかも、サイトマップの途中にブログやメールフォームを挿入できる機能もあるのでオススメです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*