In Drupal 7 kann ich drupal_add_js
die Datei template.php eines Themas als theme_preprocess_html(&$vars)
Funktion verwenden:
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
In Drupal 8 habe ich versucht, dies mithilfe attached
der .theme- Datei meines Themas als solche zu konvertieren :
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
... aber das hat nicht funktioniert und es gab keine Fehler im Watchdog / in der Konsole oder auf andere Weise.
Laut der D8-API-Seite für drupal_add_js
:
Veraltet - ab Drupal 8.0. Verwenden Sie stattdessen den Schlüssel #attached in Render-Arrays.
Es gab jedoch nicht viel mehr Informationen darüber. Es scheint, dass drupal_add_css
auch diese Methode verwendet wird. Ich weiß, dass es für Drupal 8 noch sehr früh ist, aber ich hatte gehofft, einen Sprung darauf zu machen.
theming
8
javascript
Danny Englander
quelle
quelle
Antworten:
Es scheint, dass Sie
hook_preprocess_page
mit angehängten als solche verwenden können:Dies funktioniert hervorragend ( theme.inc verwendet diese Methode). Beachten Sie das zusätzliche verschachtelte Array um das Gewicht.
quelle
Der entscheidende Punkt in der Dokumentation ist dieses Bit
Hervorhebung von mir.
Das
$variables
Array in einer Theme / Preprocess-Funktion ist kein Render-Array, sondern nur ein Array mit Variablen. Zur Verwendung#attached
benötigen Sie Folgendes in der Vorverarbeitungsfunktion:Und das in der Vorlagendatei:
Mit anderen Worten, mehr oder weniger das gleiche wie in Drupal 7 (zumindest zu diesem Zeitpunkt).
hook_preprocess_html()
ist übrigens wahrscheinlich nicht der richtige Ort für diesen Code; vergessen Sie nicht , die js / CSS - Dateien sind tatsächlich in dieser Vorlage gemacht, so dass es zu spät ist mehr hinzuzufügenhook_preprocess_page()
,hook_preprocess_node()
oder gleichwertig wahrscheinlich Sie zuverlässigere Ergebnisse erzielen.Sehen Sie sich die Zweig Best Practices - Vorprozess Funktionen und Vorlagen Seite für weitere Informationen über die Vorverarbeitung Variablen.
quelle
{{ foo }}
in der Twig-Welt gemacht werden, es gibt kein PHP / Print-Rendering mehr in Themenvorlagen, dhnode.html.twig
/page.html.twig
#attached
im Kontext eines Render-Arrays verwenden. Die Dokumentation ist korrekt. Sie müssen entweder über die Methode zu verwenden, zusammen mit dieser vorverarbeitet und die Variable vorrendern oder Ihr Thema der .info.yml - Datei zu verwenden , um die JS zu umfassen. Dies sind die einzigen Optionen, die ich bisherhook_library_info
und die Mołot oben impliziert hat. Ich muss ein bisschen damit herumspielen. Vielen Dank.Ab Drupal 8.0.x-beta2 können Sie CSS und JS über Vorverarbeitungsfunktionen anhängen.
Siehe https://www.drupal.org/node/2352319
quelle
In diesem Beispiel verwenden Sie ein echtes Render-Array und nicht eines, das in der Funktion selbst gerendert wird.
Auf diese Weise können andere Module, Themen usw. dies ändern.
quelle
Obwohl es im OP um Drupal 8 geht, könnte dies in Drupal 7 auf ähnliche Weise geschehen, ohne sich daran
drupal_add_js()
zu gewöhnen, nicht in der Nähe zudrupal_add_js()
sein:Optionen können im leeren Array definiert werden, siehe https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7 .
quelle