web-dev-qa-db-fra.com

Quel est le nom du modèle twig pour un formulaire de modification de nœud?

Dans Drupal 8, quel est le twig nom de modèle pour un formulaire de modification de nœud pour un type de contenu personnalisé appelé par exemple "appareil" ".

  • Pour un nœud par défaut, nous utilisons node-edit-form.html.twig
  • Quel est donc le nom du modèle d'édition pour un type de contenu personnalisé?

J'apprécierais votre aide. Merci !

4
david

Vous pourriez jeter un oeil à ce commentaire . Il suggère d'ajouter une suggestion de thème comme celle-ci:

Cela semble bizarre, mais c'est le mieux que je puisse trouver. Ajoutez d'abord ce code à votre fichier admin .theme (probablement un sous-thème de Seven):

function NAMEOFTHEME_theme_suggestions_alter(array &$suggestions, array $variables, $hook) {
   if ($hook == 'node_edit_form') {
     if ($node = \Drupal::routeMatch()->getParameter('node')) {
      $content_type = $node->bundle();
     }
     else {
       $current_path = \Drupal::service('path.current')->getPath();
       $path_args = explode('/', $current_path);
       $content_type = $path_args[3];
     }
     $suggestions[] = 'node_edit_form__' . $content_type;
   } 
 }

Ensuite, créez des modèles twig dans le répertoire de modèles de votre thème sous la forme node-edit-form - NODE-TYPE-SEPARATED-WITH-DASHES.html .twig .

5
Neograph734

Si vous souhaitez créer un thème pour un formulaire spécifique, par exemple le formulaire de modification d'un type de nœud, alors tout ce que vous avez à faire est

/**
 * Implements hook_theme().
 */
function THEMENAME_theme($existing, $type, $theme, $path) {
  return [
    // form id (weather it's an edit node for or a new node form)
    'node_NODE_CONTENT_TYPE_edit_form' => [
      'render element' => 'form',
    ],
  ];
}

Ensuite, créez un fichier twig node-NODE-CONTENT-TYPE-edit-form.html.twig

et le thème comme ceci:

{{ form.field_MACHINE_NAME_OF_FIELD }}
{{ form.field_MACHINE_NAME_OF_FIELD2 }}
...
{# this prints out the submit button #}
{{ form.actions }}
{# you need to have this for the form to work properly #}
{{ form|without('name', 'field_MACHINE_NAME_OF_FIELD2', 'field_MACHINE_NAME_OF_FIELD3') }}
0
Dmitry Boychev

Sur la base de la réponse de Neograph734 et de Berdir son commentaire à ce sujet, le type de nœud est en effet déjà disponible (pas besoin de le sortir du chemin). Je recommanderais d'ajouter la suggestion de thème en utilisant:

/**
 * Implements hook_theme_suggestions_HOOK_alter() for node_edit_form.
 */
function example_theme_suggestions_node_edit_form_alter(array &$suggestions, array $variables) {
  $route_match = \Drupal::routeMatch();

  if ($node = $route_match->getParameter('node')) {
    // When editing an existing node, add the node's bundle as the theme hook
    // suggestion.
    $suggestions[] = $variables['theme_hook_original'] . '__' . $node->bundle();
  } elseif ($node_type = $route_match->getParameter('node_type')) {
    // When a new node is created, the node type (object) is provided.
    $suggestions[] = $variables['theme_hook_original'] . '__' . $node_type->id();
  }

  return $suggestions;
}

Cela vous permet d'écrire des modèles Twig et/ou des fonctions de prétraitement ciblés. Lorsque le nom de machine de votre type de nœud est périphérique, votre modèle Twig doit être nommé node-edit-form--device.html.twig Et votre fonction de prétraitement example_preprocess_node_edit_form__device(&$variables), où exemple est le nom de votre thème (ou module).

0
Watergate