web-dev-qa-db-ja.com

twigコメント返信フォームのテンプレート提案

Drupal 8のコメント返信フォームにテンプレートの提案はありません。どのように作成できますか? Drupalがテンプレートを提案するノードに表示される返信フォームについて話していません。

field--node--comment--article.html.twig

コメントで[返信]をクリックした後のリダイレクトページのフォームについて話しています。テンプレートの提案はなく、このテンプレートのみが提案されます

form.html.twig

テーマの.themeファイルに特定のテンプレートを作成する方法を教えてください。

1
octogone.dev

あなたが正確に何を達成したいのかは少し不明確です。ただし、フォームに hook_theme_suggestions_HOOK_alter を実装することで、フォームIDに基づいて別のテンプレート候補を簡単に追加できます。フォームIDは$variablesで確認できます。ただし、ノードルートまたは応答ルートのどちらにいても、comment_comment_formが返されます。

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_form_alter(array &$suggestions, array $variables) {
  $form_id = $variables['element']['#form_id'];
  // Add template suggestion based on form ID.
  $suggestions[] = 'form__' . $form_id;
}

返信ルートで別のことを実行する場合は、/replyおよび/comment引数の現在のパスを確認できますORルートパラメータにPIDが含まれているかどうかを確認します。これは親コメントIDになります。

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_form_alter(array &$suggestions, array $variables) {
  // Add template suggestion based on form ID.
  $suggestions[] = 'form__' . $variables['element']['#form_id'];
  // Add template suggestion based on form ID and parent comment ID.
  if ($pid = \Drupal::routeMatch()->getParameter('pid')) {
    $suggestions[] = 'form__' . $variables['element']['#form_id'] . '__reply';
    $suggestions[] = 'form__' . $variables['element']['#form_id'] . '__reply__' . $pid;
  }
}

これにより、次のテーマが提案されます。

<!-- FILE NAME SUGGESTIONS:
   * form--comment-comment-form--reply--1.html.twig
   * form--comment-comment-form--reply.html.twig
   * form--comment-comment-form.html.twig
   x form.html.twig
-->
1
leymannx