Pregunta:
En Drupal 7, puedo usar drupal_add_js
dentro del archivo template.php de un tema como una función theme_preprocess_html(&$vars)
:
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
En Drupal 8, intenté convertir esto usando attached
en el archivo .theme de mi tema como tal:
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
… pero eso no funcionó y no hubo errores en el perro guardián / consola o de otra manera.
Según la página de la API D8 para drupal_add_js
:
En desuso: a partir de Drupal 8.0. En su lugar, use la clave #attached en las matrices de renderizado.
Sin embargo, no había mucha más información que esa. Parece que drupal_add_css
también utilizará este método. Sé que todavía es temprano para Drupal 8, pero esperaba dar un salto en esto.
Respuesta:
Parece que puede usar hook_preprocess_page
con adjunto como tal:
function MYTHEME_preprocess_page(&$vars, $hook) {
$path = drupal_get_path('theme', 'MYTHEME');
// Render the main scripts file.
$local_js = array(
'#attached' => array(
'js' => array(
$path . '/js/scripts.js' => array(
'group' => JS_THEME,
'weight' => 9999),
),
),
);
\Drupal::service('renderer')->renderRoot($local_js);
}
Esto funciona muy bien ( theme.inc usa este método), tenga en cuenta la matriz anidada adicional alrededor del peso.