web-dev-qa-db-fra.com

Comment spécifier un modèle twig pour une page Drupal 8) personnalisée?

J'essaie de créer un Drupal 8 itinéraire personnalisé avec un contenu prédéfini, comme /about-us, qui n'est pas un nœud, juste une page autonome.

Le didacticiel suivant n'est utile que jusqu'au point où je dois ajouter le contenu de la page à l'aide de #markup: https://www.drupal.org/node/2116767

Comment puis-je spécifier un modèle twig que j'aimerais utiliser pour le contenu de la page?

4
mkudenko

Je l'ai fait fonctionner. Voici ma solution.

Créez un modèle dans path/to/your/module/templates/my-custom-page.html.twig.

/**
 * Implements hook_theme().
 */
function mymodule_theme($existing, $type, $theme, $path)
{
    return [
        'my_custom_page' => [
            'render element' => 'custom_page',
            'path' => $path . '/templates',
            'template' => 'my-custom-page',
            'variables' => [
                'var1' => 'default value for var1',
            ],
        ],
    ];
}

Je ne pouvais pas comprendre ce que render element est pour, mais il est obligatoire.

L'élément variables définit les variables disponibles dans votre modèle et leur fournit des valeurs par défaut. Vous pouvez les remplacer dans votre contrôleur.

use Drupal\Core\Controller\ControllerBase;

/**
 * Class CustomPageController
 */
class CustomPageController extends ControllerBase
{

    public function getPage()
    {
        return array(
            '#theme' => 'my_custom_page',
            '#var1' => 'Actual value for var1',
        );
    }

}

Videz le cache et visitez l'itinéraire de votre page personnalisée. Tout devrait fonctionner.

Liens utiles:

8
mkudenko