デフォだと新商品とかのタグを付けても一覧にアイコン表示とかそういうのができない。システムをいじることになるけどそこまで手間じゃない。
参考
EC-CUBE3, EC-CUBE4カスタマイズ – 商品に特定のタグが設定されているかどうかを判断する方法
ぶっちゃけこのサイトに書いてあることのパクリというか解説というか。
慣れてる人はこのサイトを見たほうが良い。
ECCUBE3というかtwigというかに慣れてないけどやらなきゃいけない人用のつもりで以下記述。
準備
対象となるECCUBE3の管理画面を覗いてどういうタグが登録されているか確認する。
- 「設定」>「システム情報設定」>「マスターデータ管理」を開く
- 「mtb_tag」を選んで「選択」をクリック
設定をしていなかったら新商品、おすすめ商品、限定品の3つが登録されてるはず。とりあえずこの段階で必要なものを追加するなりして、IDとNameをチェックしておく。
Product.phpをいじる
まあここでつまづいたってだけなんだけど。
\src\Eccube\Entity\Product.php
ここにあるこれをやる。
開いて、
public function ***(***)
{
****
}
こういうのが大量に書かれてるのでそれらと同じ階層に以下の内容を貼り付ける。
/**
* 商品にタグが設定されているかどうかをbooleanで返却するメソッド
* @see https://umebius.com/eccube/check_if_product_has_tag/
* @param $Tag \Eccube\Entity\Master\Tag|integer|string
* @return bool
*/
public function hasTag($Tag){
return false === $this->ProductTag->filter(function (ProductTag $T) use ($Tag){
if (is_int($Tag)) {
if ($T->getTagId() === $Tag) {
return true;
}
} else if (is_string($Tag)) {
if ($T->getTag()->getName() === $Tag) {
return true;
}
} else if ($Tag instanceof \Eccube\Entity\Master\Tag) {
if ($T->getTag() === $Tag) {
return true;
}
}
return false;
})->isEmpty();
}
保存して閉じる。
出力方法
list.twigとかで商品の情報を引っ張ってくるどうのこうのを書く中に
{% if Product.hasTag(1) %}<span class="tag01">新商品</span>{% endif %}
{% if Product.hasTag(2) %}<span class="tag02">おすすめ商品</span>{% endif %}
{% if Product.hasTag(3) %}<span class="tag03">限定品</span>{% endif %}
こんな感じで書けば表示される。
まとめというか
wpに慣れると違和感でしかないんだけど、ECCUBE3はカテゴリでソートできるのにタグの扱いが悪すぎる。なんでこれを?ってことができないから、でもわかんないから有料プラグインに頼らないといけないみたいな感じのが多くて、今回はたまたま何とかなったけど足掛かりがなさすぎて、中途半端な状態で足を突っ込むのはホント危険だなと思いました。
コメント