一部カテゴリーを非表示としたい(特別会員専用ページのようなもの)
要件は下記のような感じ
・カテゴリーID指定であれば一覧を表示
・全商品一覧には表示しない
・キーワード検索では表示しない
・対象カテゴリーの一覧、商品にはmetaタグで検索エンジンにindexされないようにする。
・カテゴリー一覧に表示されないようにする
■検索処理の修正
修正ファイル
/data/config/config.php
/data/class/pages/products/LC_Page_Products_List.php
▼config.php
ここに会員専用カテゴリーの値を設定する。
配列をsirialize化した値を設定する。
|
# 非公開カテゴリ(sirializeで指定) define("Special_Category_ids", 'a:1:{i:0;i:37;}'); |
カテゴリーIDが10の場合は下記の配列になる。
array(0=>10);
これをsirialize化すると上記のような値になります。
▼LC_Page_Products_List.php
404行目のlfGetSearchConditionメソッドに処理を追加します。
下記の処理に追加します。
|
list($searchCondition['where_category'], $searchCondition['arrvalCategory']) = SC_Helper_DB_Ex::sfGetCatWhere($arrSearchData['category_id']); // カテゴリからのWHERE文字列取得 if ($arrSearchData['category_id'] != 0) { list($searchCondition['where_category'], $searchCondition['arrvalCategory']) = SC_Helper_DB_Ex::sfGetCatWhere($arrSearchData['category_id']); // 全商品一覧の場合、特定カテゴリーを表示しない } else { $searchCondition['where_category'] = "category_id NOT IN (?)"; $searchCondition['arrvalCategory'] = unserialize(Special_Category_ids); } |
これで全商品一覧、キーワード検索で対象商品が出てこなくなります。
■カテゴリー一覧の修正
カテゴリが自動生成されるので生成されないように処理を追加
/data/Smarty/templates/default/frontparts/bloc/category.tpl
/data/Smarty/templates/sphone/frontparts/bloc/category.tpl
必要あればガラケーのテンプレートも修正
/data/Smarty/templates/mobile/frontparts/bloc/category.tpl
まずはconfig.phpに設定したカテゴリーIDの値をテンプレートに渡します。
* 29行目付近の</script>の後に追記
|
<!--{php}--> $this->assign("Special_Category_ids", unserialize(Special_Category_ids)); <!--{/php}--> |
指定カテゴリーでなければ表示という処理を追加
|
<!--{if $arrTree[cnt].display == 1}-->の後ろにifを追加 <!--{if !in_array($arrTree[cnt].category_id, $Special_Category_ids)}--> <!--{/if}-->の後ろに<!--{/if}-->で閉じる |
下記のような感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<!--{* 表示フラグがTRUEなら表示 *}--> <!--{if $arrTree[cnt].display == 1}--> <!--{*非表示カテゴリ以外であれば表示*}--> <!--{if !in_array($arrTree[cnt].category_id, $Special_Category_ids)}--> <!--{assign var=level value=`$arrTree[cnt].level`}--> <!--{assign var=levdiff value=`$level-$preLev`}--> <!--{if $levdiff > 0}--> <ul> <!--{elseif $levdiff == 0 && $firstdone == 1}--> </li> <!--{elseif $levdiff < 0}--> <!--{section name=d loop=`$levdiff*-1`}--> </li> </ul> <!--{/section}--> </li> <!--{/if}--> <li class="level<!--{$level}--><!--{if in_array($arrTree[cnt].category_id, $tpl_category_id)}--> onmark<!--{/if}-->"> <p> <a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$arrTree[cnt].category_id}-->"<!--{if in_array($arrTree[cnt].category_id, $tpl_category_id)}--> class="onlink"<!--{/if}-->><!--{$arrTree[cnt].category_name|h}-->(<!--{$arrTree[cnt].product_count|default:0}-->)</a> </p> <!--{if $firstdone == 0}--><!--{assign var=firstdone value=1}--><!--{/if}--> <!--{assign var=preLev value=`$level`}--> <!--{/if}--> <!--{/if}--> |
■metaタグの埋め込み
/data/Smarty/templates/default/site_frame.tpl
以下のコードを埋め込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<!--{*非表示カテゴリの配列を取得&設定 *}--> <!--{php}--> $this->assign("Special_Category_ids", unserialize(Special_Category_ids)); <!--{/php}--> <!--{if $arrSearchData}--> <!--{if in_array($arrSearchData.category_id, $Special_Category_ids)}--> <meta name="robots" content="noindex,nofollow"> <!--{/if}--> <!--{/if}--> <!--{if $arrRelativeCat}--> <!--{section name=r loop=$arrRelativeCat}--> <!--{section name=s loop=$arrRelativeCat[r]}--> <!--{if in_array($arrRelativeCat[r][s].category_id, $Special_Category_ids)}--> <meta name="robots" content="noindex,nofollow"> <!--{/if}--> <!--{/section}--> <!--{/section}--> <!--{/if}--> |
以上です。