バージョン選択

フォーラム

メニュー

オンライン状況

40 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 40
もっと...

サイト内検索

質問 > フロント機能 > ページ管理で新規作成したページに「カートに入れる」ボタンを設置する

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
newuser
投稿日時: 2021/1/17 15:45
対応状況: 開発中
半人前
登録日: 2021/1/17
居住地:
投稿: 12
ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
EC-CUBE 4.0.5
サーバーOS Linux xserver
DBサーバー MySQL 5.7.31
WEBサーバー Apache
PHP 7.4.13

ページ管理で新規ページを作成しそこに
数量選択と「カートに入れる」ボタンを設置したいのですが
CSRF対策のトークンが作成出来ずエラーになってしまいます。
CSRFを無効にせずに実装したいです。
似たような質問は拝見したのですが理解が足りず
実装できませんでした。
よければアドバイスが欲しいです。
できればコードだけでなくそれをどこに記載するかも
教えていただけるとありがたいです。

                  <div class="lp01_items_buy_box">
                        <form name="form3" id="productForm3" action="{{ url('product_add_cart', {id:3}) }}" method="post">
                            <div class="ec-productRole__actions">
                                <div class="ec-numberInput"><span>数量</span>
                                    <input type="number" id="quantity3" name="quantity" required="required" min="1" maxlength="9" class="quantity form-control" value="1">
                                </div>
                            </div>
                            <input type="hidden" id="product_id3" name="product_id" value="3"><input type="hidden" id="ProductClass3" name="ProductClass" value="12"><input type="hidden" id="_token" name="_token" value="" />
                        </form>
                        <div class="ec-productRole__btn">
                            <button class="lp01_buy_button" data-cartid="3" form="productForm3">
                                購入する
                            </button>
                        </div>
                    </div>


ボタンや数量選択はこのように記述しています
よろしくお願いします。
NMAKINO
投稿日時: 2021/1/18 0:10
対応状況: −−−
半人前
登録日: 2018/9/21
居住地:
投稿: 27
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
おそらくですが、Fromタグの下あたりに
{{ csrf_token_for_anchor() }}

これを追加してみてはいかがでしょうか?
newuser
投稿日時: 2021/1/18 10:22
対応状況: −−−
半人前
登録日: 2021/1/17
居住地:
投稿: 12
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
返信ありがとうございます
教えていただいた通り
{{ csrf_token_for_anchor() }}を

                      <div class="lp01_items_buy_box">
                        <form name="form3" id="productForm3" action="{{ url('product_add_cart', {id:3}) }}" method="post">
                            {{ csrf_token_for_anchor() }}
                            <div class="ec-productRole__actions">
                                <div class="ec-numberInput"><span>数量</span>


のように記載したのですが画面に
token-for-anchor='ZeHSskjkjljsdskjdlksl-VoN3HAhwzv6LMypN7C_PM'
と表示されるだけでカートに入れることができませんでした。
教えてもらったのに活かせずすいません。


<input type="hidden" id="_token" name="_token" value="" />

のvalueの部分に商品詳細ページの同様の記述から
valueの部分をコピーしてきたらカートに入れることができたのですが
時間が経つとまたエラーになりました。

またスマホで確認したところPCではカートに入れるとができたのですが
スマホだとエラーになって入れることができません。
NMAKINO
投稿日時: 2021/1/20 8:24
対応状況: −−−
半人前
登録日: 2018/9/21
居住地:
投稿: 27
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
すいません。。。

<input type="hidden" name="_token" value="{{ csrf_token('_token') }}">


こっちのタグを使ってみてはいかがでしょうか?
newuser
投稿日時: 2021/1/20 10:54
対応状況: −−−
半人前
登録日: 2021/1/17
居住地:
投稿: 12
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
返信ありがとうございます。上記のコードを使うことで
検証モードで調べると

<input type="hidden" name="_token" value="ZeHSskjkjljsdskjdlksl-VoN3HAhwzv6LMypN7C_PM">


となったのですがボタンを押すとエラーとなります。
試しに商品一覧のvalueを確認してみると全く別の値でした。
csrf以外の何かで生成されてるってことなんですかね?

後ネットで調べて

<input type="hidden" id="_token" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />


で設置できるとの記事もありましたが
自分の環境ではエラーになってしまいました。
他にも

<input type="hidden" name="_token" value="{{form_widget(form._token) }}">


を試してみましたが{{form_widget(form._token) }}が
エラーになってしまいダメでした。

苦肉の策としてデフォルトの商品一覧のページを
そのまま全部コピーしてuser_dataに貼り付けたのですが


{% if search_form.category_id.vars.errors|length > 0 %}


でエラーになってしまい表示することが出来ませんでした。
NMAKINO
投稿日時: 2021/1/20 14:00
対応状況: −−−
半人前
登録日: 2018/9/21
居住地:
投稿: 27
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
エラーはどんなのが表示されてますか?

を試してみましたが{{form_widget(form._token) }}が
エラーになってしまいダメでした。


この部分は、おそらく 追加したページを表示する際に使用するコントローラーでFormを生成していないからだと思います。
newuser
投稿日時: 2021/1/20 17:17
対応状況: −−−
半人前
登録日: 2021/1/17
居住地:
投稿: 12
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
未熟な自分に返信ありがとうございます。
エラーの内容ですが

<input type="hidden" id="_token" name="_token" value="{{form_widget(form._token) }}" />


上記が記載に対してのエラーで

__TwigTemplate_74c605b4cf9c312234a56adc99fc78a559bdd27feb411869f5853b8d377b74f9->{closure}()
in /home/orasorriso/sorriso-magico.com/public_html/var/cache/dev/twig/1c/1cf50a338a14e138038801a008b38df5d39e374611d35212ae6bd03d216f0696.php (line 569)

echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(twig_get_attribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 524, $this->source); })()), "_token", [], "any", false, false, false, 524), 'widget');


少し長くなってしまって申し訳ないのですがこれが
おそらくテンプレートの呼び出しエラーかなと考えています。

__TwigTemplate_74c605b4cf9c312234a56adc99fc78a559bdd27feb411869f5853b8d377b74f9->block_main(array('app' => object(AppVariable), 'BaseInfo' => object(BaseInfo),
'eccube_config' => object(EccubeConfig), 'event_dispatcher' => object(TraceableEventDispatcher), 'Layout' => object(Layout),
'Page' => object(Page), 'title' => 'lp_test', 'layoutRoleMain' => 'ec-layoutRole__main'), array('stylesheet' =>
array(object(__TwigTemplate_74c605b4cf9c312234a56adc99fc78a559bdd27feb411869f5853b8d377b74f9), 'block_stylesheet'), 'main' =>
array(object(__TwigTemplate_74c605b4cf9c312234a56adc99fc78a559bdd27feb411869f5853b8d377b74f9), 'block_main'), 'javascript' =>
array(object(__TwigTemplate_74c605b4cf9c312234a56adc99fc78a559bdd27feb411869f5853b8d377b74f9), 'block_javascript')))

in /home/orasorriso/sorriso-magico.com/public_html/vendor/twig/twig/src/Template.php (line 184)

if (null !== $template) {            
  try {               
     $template->$block($context, $blocks);            
         } catch (Error $e) {               
            if (!$e->getSourceContext()) {                    
                $e>setSourceContext($template->getSourceContext());               
          }


これがテンプレートが呼び出せなくてblockが作れない為の
エラーかと考えています。

色々アドバイスしてくださってるのに
エラーに対して対応出来ず申し訳ないです。
この情報で分かることがあれば
よろしくお願いします。
umebius
投稿日時: 2021/1/20 22:18
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
NMAKINOさんが紹介している<input type="hidden" name="_token" value="{{ csrf_token('_token') }}">
ではなく、
<input type="hidden" name="_token" value="{{ csrf_token('Eccube\\Form\\Type\\AddCartType') }}" />

であればトークンが一致しませんか?


ちなみに、<input type="hidden" id="_token" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
は2系のやり方なので、4系では使えないですね。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

newuser
投稿日時: 2021/1/20 23:11
対応状況: 解決済
半人前
登録日: 2021/1/17
居住地:
投稿: 12
Re: ページ管理で新規作成したページに「カートに入れる」ボタンを設置する
教えて頂いた記述に変更したところ
無事に実装することが出来ました。ありがとうございます。
未熟な自分に親切に返信していただき2人ともありがとうございました。
これを元にサイトを作っていきます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,838名です
総投稿数は109,985件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.