Eccube3,4には標準で商品検索と一度にいくつ表示させるかの表示個数、そして新着順などのソート機能がついております。
多くのショッピングカートではもはや当たり前の機能ですが、よくよくみてみると表示個数の変更や順序の変更をしても、タイトルが一切変わらない、どれもまったく同じタイトルでページが表示されおります。
そこに手を加えてみようというのか今回の記事です。
目標
①現在何ページ目を表示しているのか
②一度に何個表示なのか
③何順で表示しているのか
この三つをタイトルに埋め込み、常にオリジナルのタイトルとなるように変更してみます。
twigファイル(app/template/default/Product/detail.twig)の変更により各カテゴリーのタイトルを動的に変更することも考えられますが、この際 キーワード検索においても同様にタイトルを変更できれば楽なので、ProductController.phpに手を加えてみます。
src/Eccube/Controller/ProductController.php 変更前
/** * ページタイトルの設定 * * @param null|array $searchData * * @return str */ private function getPageTitle($searchData) { if (isset($searchData['name']) && !empty($searchData['name'])) { return trans('front.product.search_result'); } elseif (isset($searchData['category_id']) && $searchData['category_id']) { return $searchData['category_id']->getName(); } else { return trans('front.product.all_products'); } }
のページタイトルの設定部分に手を加えてみます。
追加変数
$searchname : 入力された検索キーワードを取得
$pageno : 表示中のページ数を取得
$orderby : ソート方法を取得(価格の高い順・価格の低い順・新着順)
下記のように変更することで、検索・カテゴリー・全商品で条件を満たすタイトル表示できるようになります。
src/Eccube/Controller/ProductController.php 変更後
/** * ページタイトルの設定 * * @param null|array $searchData * @return str */ private function getPageTitle($searchData) { if(empty($searchData['pageno'])){ $pageno = 1; }else{ $pageno = $searchData['pageno']; } $disp_number = $searchData['disp_number']; $orderby = $searchData['orderby']; if (isset($searchData['name']) && !empty($searchData['name'])) { $searchname = $searchData['name']; return "$searchname の検索結果 $pageno ページ目 $disp_number 表示 $orderby"; } elseif (isset($searchData['category_id']) && $searchData['category_id']) { $category = $searchData['category_id']->getName(); return "$category $pageno ページ目 $disp_number 表示 $orderby"; } else { return "全商品 $pageno ページ目 $disp_number 表示 $orderby"; } }
哲学堂書店 浦山幹生
コメント