EC-CUBEでテンプレートを弄るだけで規格毎に在庫有無とか価格とかを取得する方法見つけた
新たに作るEC-CUBE使ったECサイトの制作中なわけですが、例によってワンクリックでカゴに入れて欲しいので規格(サイズとか)ごとにカゴに入れるボタンを設置したかったんです。
これまではviewを弄ったりclassを弄ったりしていたのですが、一度変数を全部取得してチェックしてみたら、なんかjavascriptに規格毎の情報が入ってるんですよね。
その対象の変数がこいつ→“tpl_javascript”
tpl_javascriptにstock_findとかprice02とかが規格毎に入ってた。json+javascriptで。
いらんscriptをmb_substrとかでコソギ落とすとこんな感じに。
<!--{php}-->
$classObj = json_decode(mb_substr($this->get_template_vars('tpl_javascript'), 18, strripos($this->get_template_vars('tpl_javascript'),';function lnOnLoad()')-18, 'UTF-8'));
<!--{/php}-->
$classObj -> [classcategory_id] とかで取得できます。中身に手を入れないから色々都合良いかも。
但し処理は若干重くなるかな。
※追記
↑だけだと実装をPHPで展開するハメになるので、Smartyの関数としてassignして使う用にも拡張してみた。
<table id="classtable">
<tr>
<th width="110">サイズ</th>
<th width="90">在庫</th>
<th width="125">ご注文</th>
</tr>
<!--{php}-->
$classObj = json_decode(mb_substr($this->get_template_vars('tpl_javascript'), 18, strripos($this->get_template_vars('tpl_javascript'),';function lnOnLoad()')-18, 'UTF-8'), true);
$this->assign('classObj', $classObj);
$this->assign('pos','#0');
<!--{/php}-->
</td>
<td>
<form name="form<!--{$pc}-->" id="form" method="post" action="/products/detail.php?product_id=<!--{$tpl_product_id}-->">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="<!--{$tpl_product_id}-->" />
<input type="hidden" name="product_class_id" value="<!--{$classObj.$pc.$pos.product_class_id}-->" id="product_class_id" />
<input type="hidden" name="favorite_product_id" value="" />
<input type="hidden" name="classcategory_id1" value="<!--{$pc}-->" />
<input type="hidden" name="classcategory_id2" value="0" />
<a href="javascript:void(document.form<!--{$pc}-->.submit(),'cart')"><img src="../user_data/packages/default/img/button/btn_cartin.jpg" width="166" height="40" class="cart_btn" alt="カゴに入れる" /></a>
</form>
</td>
</tr>
<!--{/if}-->
<!--{/foreach}-->
</table>
規格を1個しか使っていないのでそれ用になっています。規格を2こ掛け合わせる人はさらにカスタマイズ要です。
Smarty上での変数のエスケープの仕方が分からず、#0を見るのに新たに変数作ってしまった。
この辺の解法知ってる人表れたら嬉しいです。