theming – Agregar JS a un tema de Drupal 8 (reemplazo de drupal_add_js)

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım