EC-CUBEのカスタマイズで、特別な人にだけ商品を見れるページを作ってほしいと要望があった。
会員専用商品とはまた違う、EC-CUBE内の商品検索には引っかからず、URLを知ってる人だけ入れるページ・・・みたいな感じだそうです。
という訳で、そういう風にカスタマイズしました。
EC-CUBEのバージョンは2.4.1と2.12でやりました。
1.管理画面のシステム設定->マスターデータ管理(バージョンによっては、基本情報管理->マスターデータ管理)
の、mtb_dispに3 シークレット商品として追加。
2.商品管理->カテゴリー管理でシークレット商品としてカテゴリーを追加。
※この時自動的にふられるカテゴリーIDは毎回違うので、注意。今回はカテゴリーIDを1とします。
3./data/Smarty/templates/default/admin/products/product.tplの146行目付近
<td bgcolor="#ffffff" width="557" class="fs12n"><input type="radio" name="status" value="1" <!--{if $arrForm.status == "1"}-->checked<!--{/if}-->/>公開 <input type="radio" name="status" value="2" <!--{if $arrForm.status == "2"}-->checked<!--{/if}--> />非公開</td>
↓
<td bgcolor="#ffffff" width="557" class="fs12n"><input type="radio" name="status" value="1" <!--{if $arrForm.status == "1"}-->checked<!--{/if}-->/>公開 <input type="radio" name="status" value="2" <!--{if $arrForm.status == "2"}-->checked<!--{/if}--> />非公開 <inputtype="radio" name="status" value="3" <!--{if $arrForm.status =="3"}-->checked<!--{/if}--> /> シークレット商品</td>
色がついているところを追加。
4./data/class/pages/products/LC_Page_Products_List.phpの156行目付近
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($_POST['product_id']) || !$objDb->sfIsRecord("dtb_products", "product_id", $_POST['product_id'], "del_flg = 0 AND status = 1 ")) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
} else {
↓
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($_POST['product_id']) || !$objDb->sfIsRecord("dtb_products", "product_id", $_POST['product_id'], "del_flg = 0 AND status = 1 OR status = 3 ")) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
} else {
色がついているところを追加。
5.同じく/data/class/pages/products/LC_Page_Products_List.phpの435行目付近
// 商品検索条件の作成(未削除、表示)
$where = "del_flg = 0 AND status = 1 ";
↓
// 商品検索条件の作成(未削除、表示)
switch($category_id){
case 1 :
$where = "del_flg = 0 AND status = 3 ";
break;
default :
$where = "del_flg = 0 AND status = 1 ";
}
色がついているプログラムに変更。
※この時caseの「1」はカテゴリーIDなので、環境によって変動。
6./data/class/pages/products/LC_Page_Products_Detail.phpの123行目付近
} else {
$status = false;
$where = "del_flg = 0 AND status = 1 ";
}
} else {
$status = false;
$where = "del_flg = 0 AND status = 1 OR status = 3 ";
}
色がついているところを追加。
7./data/class/pages/products/LC_Page_Products_Detail.phpの335行目付近
※モバイルサイト対応用。バージョンによってあったりなかったり。2009/07/15現在の最新Ver2.4.1ではあった。2.1.2ではなかった。
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($tmp_id)|| !$objDb->sfIsRecord("dtb_products", "product_id", $tmp_id, 'del_flg = 0 AND status = 1)) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
}
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($tmp_id)|| !$objDb->sfIsRecord("dtb_products", "product_id", $tmp_id, 'del_flg = 0 AND status = 1 OR status = 3')) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
}
8./data/class/pages/products/LC_Page_Products_DetailImage.phpの62行目付近
} else {
$where = "del_flg = 0 AND status = 1";
}
} else {
$where = "del_flg = 0 AND status = 1 OR status = 3 ";
}
色がついているところ追加。
以上で、プログラム修正は終わり。
あとは、商品登録の時の公開・非公開のラジオボタンをシークレット商品にチェックして、
http://www.hogehoge.com/products/detail.php?product_id=1
URLのproduct_idを商品IDで指定する。
カテゴリでまとめたい場合は、シークレット商品のカテゴリーにいれて、
http://www.hogehoge.com/products/list.php?category_id=1
URLのcategory_idをカテゴリーIDで指定する。
そんな感じで全部終わり。
会員専用商品とはまた違う、EC-CUBE内の商品検索には引っかからず、URLを知ってる人だけ入れるページ・・・みたいな感じだそうです。
という訳で、そういう風にカスタマイズしました。
EC-CUBEのバージョンは2.4.1と2.12でやりました。
1.管理画面のシステム設定->マスターデータ管理(バージョンによっては、基本情報管理->マスターデータ管理)
の、mtb_dispに3 シークレット商品として追加。
2.商品管理->カテゴリー管理でシークレット商品としてカテゴリーを追加。
※この時自動的にふられるカテゴリーIDは毎回違うので、注意。今回はカテゴリーIDを1とします。
3./data/Smarty/templates/default/admin/products/product.tplの146行目付近
<td bgcolor="#ffffff" width="557" class="fs12n"><input type="radio" name="status" value="1" <!--{if $arrForm.status == "1"}-->checked<!--{/if}-->/>公開 <input type="radio" name="status" value="2" <!--{if $arrForm.status == "2"}-->checked<!--{/if}--> />非公開</td>
↓
<td bgcolor="#ffffff" width="557" class="fs12n"><input type="radio" name="status" value="1" <!--{if $arrForm.status == "1"}-->checked<!--{/if}-->/>公開 <input type="radio" name="status" value="2" <!--{if $arrForm.status == "2"}-->checked<!--{/if}--> />非公開 <inputtype="radio" name="status" value="3" <!--{if $arrForm.status =="3"}-->checked<!--{/if}--> /> シークレット商品</td>
色がついているところを追加。
4./data/class/pages/products/LC_Page_Products_List.phpの156行目付近
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($_POST['product_id']) || !$objDb->sfIsRecord("dtb_products", "product_id", $_POST['product_id'], "del_flg = 0 AND status = 1 ")) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
} else {
↓
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($_POST['product_id']) || !$objDb->sfIsRecord("dtb_products", "product_id", $_POST['product_id'], "del_flg = 0 AND status = 1 OR status = 3 ")) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
} else {
色がついているところを追加。
5.同じく/data/class/pages/products/LC_Page_Products_List.phpの435行目付近
// 商品検索条件の作成(未削除、表示)
$where = "del_flg = 0 AND status = 1 ";
↓
// 商品検索条件の作成(未削除、表示)
switch($category_id){
case 1 :
$where = "del_flg = 0 AND status = 3 ";
break;
default :
$where = "del_flg = 0 AND status = 1 ";
}
色がついているプログラムに変更。
※この時caseの「1」はカテゴリーIDなので、環境によって変動。
6./data/class/pages/products/LC_Page_Products_Detail.phpの123行目付近
} else {
$status = false;
$where = "del_flg = 0 AND status = 1 ";
}
} else {
$status = false;
$where = "del_flg = 0 AND status = 1 OR status = 3 ";
}
色がついているところを追加。
7./data/class/pages/products/LC_Page_Products_Detail.phpの335行目付近
※モバイルサイト対応用。バージョンによってあったりなかったり。2009/07/15現在の最新Ver2.4.1ではあった。2.1.2ではなかった。
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($tmp_id)|| !$objDb->sfIsRecord("dtb_products", "product_id", $tmp_id, 'del_flg = 0 AND status = 1)) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
}
// 値の正当性チェック
if(!SC_Utils_Ex::sfIsInt($tmp_id)|| !$objDb->sfIsRecord("dtb_products", "product_id", $tmp_id, 'del_flg = 0 AND status = 1 OR status = 3')) {
SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
}
8./data/class/pages/products/LC_Page_Products_DetailImage.phpの62行目付近
} else {
$where = "del_flg = 0 AND status = 1";
}
} else {
$where = "del_flg = 0 AND status = 1 OR status = 3 ";
}
色がついているところ追加。
以上で、プログラム修正は終わり。
あとは、商品登録の時の公開・非公開のラジオボタンをシークレット商品にチェックして、
http://www.hogehoge.com/products/detail.php?product_id=1
URLのproduct_idを商品IDで指定する。
カテゴリでまとめたい場合は、シークレット商品のカテゴリーにいれて、
http://www.hogehoge.com/products/list.php?category_id=1
URLのcategory_idをカテゴリーIDで指定する。
そんな感じで全部終わり。