Dans Drupal 7, je peux utiliser drupal_add_js
dans le fichier template.php d' un thème en tant que theme_preprocess_html(&$vars)
fonction:
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
Dans Drupal 8, j'ai essayé de convertir ceci en utilisant attached
dans le fichier .theme de mon thème en tant que tel:
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
... mais cela n'a pas fonctionné et il n'y a eu aucune erreur dans watchdog / console ou autre.
Selon la page API D8 pour drupal_add_js
:
Déconseillé - à partir de Drupal 8.0. Utilisez plutôt la clé #attached dans les tableaux de rendu.
Il n'y avait cependant pas beaucoup plus d'informations que cela. Il semble que drupal_add_css
va également utiliser cette méthode. Je sais que c'est encore tôt pour Drupal 8 mais j'espérais faire un saut là-dessus.
theming
8
javascript
Danny Englander
la source
la source
Réponses:
Il semble que vous pouvez utiliser
hook_preprocess_page
avec attaché en tant que tel:Cela fonctionne très bien ( theme.inc utilise cette méthode), notez le tableau imbriqué supplémentaire autour du poids.
la source
Le point clé de la documentation est ce bit
Je souligne.
Le
$variables
tableau dans une fonction thème / prétraitement n'est pas un tableau de rendu, c'est juste un tableau contenant des variables. Pour l'utiliser,#attached
vous aurez besoin de quelque chose comme ceci dans la fonction de prétraitement:Et cela dans le fichier modèle:
En d'autres termes, plus ou moins les mêmes que dans Drupal 7 (en ce moment, au moins).
hook_preprocess_html()
n'est probablement pas le bon endroit pour ce code; n'oubliez pas que les fichiers js / css sont réellement rendus dans ce modèle, il est donc trop tard pour en ajouter d'autreshook_preprocess_page()
,hook_preprocess_node()
ou l'équivalent vous donnera probablement des résultats plus fiables.Consultez la page Meilleures pratiques Twig - Fonctions de prétraitement et modèles pour plus d'informations sur les variables de prétraitement.
la source
{{ foo }}
dans le monde Twig, il n'y a plus de rendu php / print dans les modèles de thème, c'estnode.html.twig
-à- dire /page.html.twig
#attached
dans le contexte d'un tableau de rendu; la documentation est correcte. Vous devez soit utiliser la méthode ci-dessus, avec celle-ci pour prétraiter et pré-rendre la variable, soit utiliser le fichier .info.yml de votre thème pour inclure le JS. Ce sont les seules options que je peux dire jusqu'à présent, sans descendre sur la route de la bibliothèquehook_library_info
et que Mołot a impliqué ci-dessus. Je vais devoir jouer un peu avec ça. Merci.Depuis Drupal 8.0.x-beta2, vous pouvez attacher CSS et JS à partir de fonctions de prétraitement.
Voir https://www.drupal.org/node/2352319
la source
Dans cet exemple, vous utilisez un véritable tableau de rendu et non celui qui est rendu dans la fonction elle-même.
De cette façon, d'autres modules, thèmes, etc. peuvent le modifier.
la source
Bien que l'OP concerne Drupal 8, cela pourrait être fait de manière similaire dans Drupal 7 sans utiliser
drupal_add_js()
pour commencer à s'habituer à ne pas avoirdrupal_add_js()
autour:Les options peuvent être définies dans le tableau vide, voir https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7 .
la source