サイトマップページ(人間用)を自動生成する
EC-CUBEには、もともと /sitemap.php にアクセスすると検索エンジン用のサイトマップXMLファイルを出力する機能はありますが、ホームページ閲覧者が見る通常のサイトマップページは用意されていないようなので、作ってみました。
-
「デザイン管理」「ページ詳細設定」で新しいページを作成します。
- 「名称」 サイトマップ
- 「URL」 sitemap
- 「共通のヘッダーを使用する」、「共通のフッターを使用する」はお好みでチェックを入ます
- 最低限の内容は以下の通りです
<ul> <!--{section name=i loop=$arrSitemap}--> <li class="sitemap<!--{$arrSitemap[i].level}-->"> <a href="<!--{$arrSitemap[i].url}-->"><!--{$arrSitemap[i].page_name}--></a> </li> <!--{/section}--> </ul>
-
「デザイン管理」「CSS編集」で以下のサイトマップ用のスタイルを追加登録します(商品カテゴリの深さ+2分用意します)
.sitemap0{ padding-left:1em } .sitemap1{ padding-left:2em } .sitemap2{ padding-left:3em } .sitemap3{ padding-left:4em } .sitemap4{ padding-left:5em } .sitemap5{ padding-left:6em } .sitemap6{ padding-left:7em } .sitemap7{ padding-left:8em } .sitemap8{ padding-left:9em }
-
「コンテンツ管理」「ファイル管理」で user_data/sitemap.php をダウンロードして以下の部分を追加し、上書きアップロードします
// レイアウトデザインを取得 $objLayout->sfGetPageLayout($this); // 画面の表示 $objView->assignobj($this);
を// レイアウトデザインを取得 $objLayout->sfGetPageLayout($this); // サイトマップを取得 $this->arrSitemap = $this->lfGetSitemap(); // 画面の表示 $objView->assignobj($this);
にし、/** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } }
を/** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } function lfGetSitemap(){ $conn = new SC_DBConn(); $arrSitemap[] = array('level' => 0, 'page_name' => 'トップページ', 'url' => SITE_URL); $arrSitemap[] = array('level' => 1, 'page_name' => '会社概要', 'url' => SITE_URL . 'abouts/'); $arrSitemap[] = array('level' => 1, 'page_name' => 'お問い合わせ', 'url' => SITE_URL . 'contact/'); $arrSitemap[] = array('level' => 1, 'page_name' => '特定商取引に関する記載', 'url' => SITE_URL . 'order/'); foreach($conn->getAll("SELECT 1 level, page_name, url FROM dtb_pagelayout WHERE edit_flg = 1") as $i) { $arrSitemap[] = $i; } $arrSitemap[] = array('level' => 1, 'page_name' => '商品紹介(' . $conn->getOne("SELECT SUM(product_count) FROM dtb_category_count") . '品目)', 'url' => SITE_URL . 'products/list.php'); function traverseCategory(&$arrSitemap, $conn, $parent_category_id = 0, $level = 2) { foreach($conn->getAll("SELECT category_id, category_name FROM dtb_category WHERE parent_category_id = $parent_category_id ORDER BY rank DESC") as $row) { $count = $conn->getOne("SELECT product_count FROM dtb_category_total_count WHERE category_id = $row[category_id]") - 0; $page_name = $row['category_name'] . '(' . ($count <= 0 ? '現在取り扱いしておりません' : $count . '品目') . ')'; $arrSitemap[] = array('level' => $level, 'page_name' => $page_name, 'url' => SITE_URL . "products/list.php?category_id=$row[category_id]"); traverseCategory($arrSitemap, $conn, $row['category_id'], $level + 1); } } traverseCategory($arrSitemap, $conn); return $arrSitemap; } }
にします