web-dev-qa-db-ja.com

テンプレートファイルを使用して製品ページを作成する

久しぶりにオブザーバーになってから、答えが見つからない質問をしました。こことGoogleの両方で検索してみましたが、役に立ちませんでした。

Drupal 8.3.2とDrupal Commerce 2モジュールを組み合わせて使用​​しています。

製品ページをテーマにしようとしています。 twigデバッグを切り替えて、デフォルトのファイルを上書きするために独自の 'commerce-product.html.twig'ファイルを作成しました。

私が抱えている問題は、twigテンプレートエンジンを使用して、サイトの一部のページのカスタムコンテンツタイプに対して行ったように、htmlにさまざまなフィールドを挿入できるようにしたいということです。 。

<div class="header">
  <h5>{{ fields.field_header.content}}</h5>
</div>
<div class="body">
  {{ fields.body.content}}
</div>

上記の例では、ビューとブロックを作成し、ブロック内で上記のマークアップを使用してビュー内のフィールド値を呼び出しました。

製品ページに来たので、どちらが正しい方法であるかわかりません。

商品ページのビューを作成する必要がありますか、それとも上記と同様の方法で商品の値を呼び出すことができますか?例えば。

{{ product.field_product_image.content}}

または、カスタムコンテンツタイプに対して行ったのと同様の方法で、ビューを作成し、表示するフィールドを選択する必要がありますか。

答えを探してみましたが、あまり助けが見つかりませんでした。

ここに着陸して、最初の投稿をしました。

5
Dean Morgan

まず、Commerceモジュール/modules/contrib/commerce/modules/product/templates/commerce-product.html.twigからテンプレートをコピーする必要があります。

{#
/**
 * @file
 *
 * Default product template.
 *
 * Available variables:
 * - attributes: HTML attributes for the wrapper.
 * - product: The rendered product fields.
 *   Use 'product' to print them all, or print a subset such as
 *   'product.title'. Use the following code to exclude the
 *   printing of a given field:
 *   @code
 *   {{ product|without('title') }}
 *   @endcode
 * - product_entity: The product entity.
 * - product_url: The product URL.
 *
 * @ingroup themeable
 */
#}
<article{{ attributes }}>
  {{- product|without('variation_attributes') -}}
</article>

次に、カスタムフィールドに応じて表示を調整できるため、次のようになります。

<article{{ attributes.addClass('product') }}>
  {{ product.field_header }}

  <div class="body">
      {{ product.body }}
  <div>
  {{- product|without('field_header','body') -}}
</article>
2
Duncanmoo