web-dev-qa-db-ja.com

カスタムモジュールを使用して、表示モードごとにtwigテンプレートの提案を追加する方法は?

カスタムモジュールを使用して、カスタムtwigに基づくテンプレートserview modeに基づいています。試行しているテンプレートファイル私のテーマに追加するには:

  • user.html.twig
  • user--compact.html.twig
  • user--token.html.twig

これらはMYMODULE/templates/というフォルダにあります。

これは私の現在のモジュールコードです:

module_name.module:

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user' => [
      'template'  => 'user',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token' => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];

}
3
Prestosaurus

hook_theme_suggestions_HOOK_alter() は、既存の提案を変更するのに適しています。

この場合、既存の提案を変更せずに提案を追加するだけの場合は、 hook_theme_suggestions_HOOK を使用できます。

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function MYMODULE_theme_suggestions_user(array $variables) {
  return [
    'user__' . $variables['elements']['#view_mode']
  ];
}

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user' => [
      'template'  => 'user',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token' => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];
}
3
Cesar Moore

修正により、テーマの提案が HOOK_theme_suggestions_HOOK_alter() で追加され、テンプレートがuserからuser__fullに切り替わりました。以下は更新されたモジュールコードです:

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYMODULE_theme_suggestions_user_alter(&$suggestions, $variables) {

  $view_mode = $variables['elements']['#view_mode'];
  $suggestions[] = 'user__' . $view_mode;
}

/**
 * Implements hook_theme().
 */
function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'user__full'    => [
      'template'  => 'user--full',
      'base hook' => 'user',
    ],
    'user__compact' => [
      'template'  => 'user--compact',
      'base hook' => 'user',
    ],
    'user__token'   => [
      'template'  => 'user--token',
      'base hook' => 'user',
    ],
  ];
}
2
Prestosaurus