『カートに入れる』ボタンを自作したい
オリジナルの『カートに入れる』ボタンを作成したいときに調べたときのことをメモ。
対象バージョンは4.1.1
参考ページ
ここにあったソースをちょっと改造
上記ページにあった参考のソースのままではなぜか、{{ product_class_id }}
を取得することができなかったので、{{ form.ProductClass.vars.value }}
に変更したら取得できました。このコードを商品ページのテンプレート(/app/template/default/Product/detail.twig)に置いてテストしてみたところ、ちゃんとカートに入れることができました。
<div class="好きな名前"> <form name="form{{ Product.id }}" id="productForm{{ Product.id }}" action="{{ url('product_add_cart', {id:Product.id}) }}" method="post"> <div class="好きな名前"> <div class="好きな名前"><span>数量</span> <input type="number" id="quantity{{ Product.id }}" name="quantity" required="required" min="1" maxlength="9" class="test5" value="1"> </div> </div> <input type="hidden" id="product_id{{ Product.id }}" name="product_id" value="{{ Product.id }}"> <input type="hidden" id="ProductClass{{ Product.id }}" name="ProductClass" value="{{ form.ProductClass.vars.value }}"> <!--<input type="hidden" id="ProductClass{{ Product.id }}" name="ProductClass" value="{{ product_class_id }}">--> <input type="hidden" id="_token{{ Product.id }}" name="_token" value="{{ csrf_token('Eccube\\Form\\Type\\AddCartType') }}" /> </form> <div class="ec-productRole__btn"> <button class="ec-blockBtn--action add-cart" data-cartid="{{ Product.id }}" form="productForm{{ Product.id }}" type="submit"> 購入する </button> </div> </div>
カートに入れるために必要な情報
カートに入れるためには「数量、商品ID、クラスID、トークン」の4つが揃っていないとエラーになるようです。
<input type="number" id="quantity{{ Product.id }}" name="quantity" required="required" min="1" maxlength="9" class="test5" value="1"> <input type="hidden" id="product_id" name="product_id" value="{{ Product.id }}"> <input type="hidden" id="ProductClass" name="ProductClass" value="{{ product_class_id }}"> <input type="hidden" id="_token" name="_token" value="{{ csrf_token('Eccube\\Form\\Type\\AddCartType') }}" />
トークンの部分は以下のコードでもいいみたいです。
<input type="hidden" id="_token" name="_token" value="{{ form._token.vars.value }}" />
純正コードの控え
<form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1"> {% if Product.stock_find %} <div class="ec-productRole__actions"> {% if form.classcategory_id1 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id1) }} {{ form_errors(form.classcategory_id1) }} </div> {% if form.classcategory_id2 is defined %} <div class="ec-select"> {{ form_widget(form.classcategory_id2) }} {{ form_errors(form.classcategory_id2) }} </div> {% endif %} {% endif %} <div class="ec-numberInput"><span>{{ '数量'|trans }}</span> {{ form_widget(form.quantity) }} {{ form_errors(form.quantity) }} </div> </div> <div class="ec-productRole__btn"> <button type="submit" class="ec-blockBtn--action add-cart"> {{ 'カートに入れる'|trans }} </button> </div> {% else %} <div class="ec-productRole__btn"> <button type="button" class="ec-blockBtn--action" disabled="disabled"> {{ 'ただいま品切れ中です。'|trans }} </button> </div> {% endif %} {{ form_rest(form) }} </form>