web-dev-qa-db-ja.com

Commerce Add to Cartフォームの送信/支払いボタンとは別に製品バリエーションを印刷するにはどうすればよいですか?

計算された商品価格を「商品バリエーション」選択ウィジェットと「支払い」ボタンの間に入れたいのですが。

commerce-product.html.twig(私の製品には、製品自体にカートへの追加フォームが表示されます)、次のコードがあります。

<article{{ attributes }}>
  <h2>{{ product.title }}</h2>
  {{ product|without('title', 'variation_price' }}
  {{ product.variation_price }}
</article>

variation_priceは計算された価格です。

  1. 製品バリエーション選択ウィジェットを含む変数の名前は何ですか? 回答:product.variations
  2. バリエーションタイプの選択ウィジェットとは別に送信/支払いボタンを配置するにはどうすればよいですか? 回答:??

私は デバッグに少し似ていますが、私のサイトを壊しました (そして、このサイトの人々はそれを修正する方法を親切に説明しました。)それで、バリエーションを示すウィジェットを含む変数の名前がproduct.variations、これは実際には「カートに追加」フォームです(UIで表示ウィジェットを設定しているため)。

したがって、「カートに追加」フォームを2回印刷する必要があると思います。1つのインスタンスでは送信ボタンを表示し、もう1つのインスタンスでは選択ウィジェットを表示します...しかし、どうすればよいですか?

twigデバッグテーマの提案を確認しましたが、「カートに追加」フォームのテンプレートが表示されません。

<!-- FILE NAME SUGGESTIONS:
   * field--commerce-product--variations--contenttype.html.twig
   * field--commerce-product--variations.html.twig
   * field--commerce-product--contenttype.html.twig
   * field--variations.html.twig
   * field--entity-reference.html.twig
   x field.html.twig
3
Patrick Kenny

これは私がこの問題を修正した方法です:

この前処理関数を.themeファイルに追加しました

function YOURTHEME_preprocess_commerce_product(&$variables) {

   // Get the commerce product.
   $product = $variables['elements']['#commerce_product'];
   // Pass the price.
   $variables['price'] = $product->variations->entity->getPrice();
}

私のtwigファイルに、次のように価格を出力します:

{{ price|commerce_price_format }}
4
Fons Vandamme

「カートに追加」フォームは製品バリエーションにバンドルされているので、commerce-product.html.twigテンプレートで以下を使用して機能させています。

<article{{ attributes }}>
      {{ product.title }}
      {{ product.body }}
      {{ product.variation_price }}
      {{ product.variations }}  // show the add to cart button
</article>
1
flamesquirrel

カスタム属性を追加していて、twigでそれらの値にアクセスする場合は、受け入れられた回答に従い、theme/module_preprocess_templateから次のようなkintでデバッグすることをさらに追加します。

  ksm($product,'shows that we have one product to examine - notice array (1)');
  ksm($product->getVariationIds(),'this is $product->getVariationIds()');
  ksm($product->getVariations()[0]->getAttributeValues(),'this is $product->getVariations()[0]->getAttributeValues()'); 
  ksm($product->getVariations()[0]->getAttributeFieldNames(),' this is $product->getVariations()[0]->getAttributeFieldNames()'); 
  ksm($product->getVariations()[0]->getAttributeValue('my_target_attribute')->getName(),"found value at \$product->getVariations)[0]->getAttributeValue('my_target_attribute')->getName()");

次に、変数への値の割り当てに進みます。

$variables['my_target_attribute'] = $product->getVariations()[0]->getAttributeValue('my_target_attribute')->getName();

その後、twig/templateでmy_target_attributeを次のように印刷できます。

{{ my_target_attribute }}
1
vrwired

twigテンプレートでこれを行う方法を理解できませんでしたが、hook_form_alter()で行うことができます:

/**
 * Implements hook_form_FORM_ID_alter().
 * If necessary, you can target specific products like this:
 * (product with ID of 2)
 * function MYMODULE_form_commerce_order_item_add_to_cart_form_commerce_product_2_alter(array &$form, FormStateInterface $form_state, $form_id) {
 */
function MYMODULE_form_commerce_order_item_add_to_cart_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
  // Text shown between variations widget and submit buttons.
  $form['placeholder']['#markup'] = '<p>' . t('This is my message.') . '</p>';
}
0
Patrick Kenny