web-dev-qa-db-ja.com

特定の表示モードのフィールドテンプレートまたはテンプレートオーバーライドを作成するにはどうすればよいですか?

Drupal 7 Commerceモジュールでは、フィールド、「sku」、「title」、「status」はDisplay Suiteフィールドラッパーで編集できないため、フィールドを編集できません。 Drupalフロントエンドを介したラッパー。テンプレートを使用して "commerce-product-title.tpl.php"をH2ラッパーで更新する必要がありますが、これは 'product_full'に対してのみ必要ですすべての製品の表示モード。テンプレートまたはテーマ機能でのみ、この表示モードでこのフィールドをターゲットにする方法はありますか?

3
dgdoing

田畑

まず、自分でテーマフックの提案を追加する必要があります。フィールドの場合は ノードの場合と同じ だけです。次のスニペットをテーマのtemplate.phpまたはモジュールの*.moduleファイルに配置し、MYTHEME/MYMODULEをテーマまたはモジュールのマシン名に置き換えるだけです。

次に、/modules/field/theme/field.tpl.phpファイルをテーマの/templatesディレクトリにコピーし、次のいずれかのパターンに従って名前を付けます。

  • フィールド-フィールド名--view-mode.tpl.php
  • フィールド-フィールド名-バンドル-ビューモード.tpl.php

/**
 * Implements hook_preprocess_HOOK().
 */
function MYTHEME/MYMODULE_preprocess_field(&$variables) {

  $view_mode = $variables['element']['#view_mode'];
  $field_name = $variables['element']['#field_name'];
  $bundle = $variables['element']['#bundle'];

  $variables['theme_hook_suggestions'][] = 'field__' . $field_name . '__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'field__' . $field_name . '__' . $bundle . '__' . $view_mode;
}

コマース製品のタイトル

Commerceの製品タイトルの場合は少し異なりますが、プリプロセスフック内からビューモードや参照エンティティを取得できないためです。ただし、独自のロジックを使用して、テンプレートの提案を追加できます。たとえば、URLエイリアスのパターンなどです。

次に、/sites/all/modules/contrib/commerce/modules/product/theme/commerce-product-title.tpl.phpファイルをテーマの/templatesディレクトリにコピーし、目的のパターンに合わせて名前を変更します。

  • commerce-product-title--foo.tpl.php

/**
 * Implements hook_preprocess_HOOK().
 */
function MYTHEME/MYMODULE_preprocess_commerce_product_title(&$variables) {

  // The following suggestion only gets added when there's
  // a certain keyword at the third position in the URL alias
  // as in /myproducts/overview/foo/myproduct.
  if (arg(2, drupal_get_path_alias()) === 'foo') {
    $variables['theme_hook_suggestions'][] = $variables['theme_hook_original'] . '__' . 'foo';
  }
}
4
leymannx