¿Cómo hago que un tema requiera Jquery (para usuarios anónimos)?


7

Estoy creando un tema para D8 llamado 'herchel'. Estoy tratando de hacer que este tema requiera jquery en todas las páginas (D8 no carga Jquery para usuarios anónimos de forma predeterminada)

Mirando a través de la poca documentación que puedo encontrar además de los temas principales, creé un archivo llamado herchel.libraries.yml

He intentado lo siguiente ... todo sin suerte:

drupal.herchel:
version: VERSION
  dependencies:
    - core/jquery

-

drupal:
version: VERSION
  dependencies:
    - core/jquery

-

herchel:
version: VERSION
  dependencies:
    - core/jquery

¿Alguien tiene alguna idea sobre lo que necesito poner en esto?


El tercero es correcto, creo que el problema es solo un espacio en blanco: intente sangrar la línea versionpara que coincidadependencies
Clive

Respuestas:


11

Me encontré con esta actualización de uno de mis temas de contribución a Drupal 8, ya que quería jquery.once para usuarios anónimos. Esto es lo que hice, que funciona muy bien:

En herchel.libraries.yml

herchel-corescripts:
  version: VERSION
  js:
    js/scripts.js: {}
  dependencies:
    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once

Luego, en el archivo herchel.theme de tu tema .

function herchel_preprocess_page(&$vars, $hook) {
  // Render the library as laid out in herchel.libraries.yml
  $libraries['#attached']['library'][] = 'herchel/herchel-corescripts';
  \Drupal::service('renderer')->renderRoot($libraries);
}

Tenga en cuenta también la sangría para el código YML. Aunque todavía no está bien documentado, puede echar un vistazo a este problema y su registro de cambios.

Reemplace hook_library_info () por el archivo * .libraries.yml

Tenga en cuenta que también verá el archivo "scripts.js" de un tema teórico en el código anterior, pero es posible que no lo necesite. En mi tema, eso es lo que usa jquery para llamar a un código personalizado.

Este código es probablemente una buena referencia también para los bits YML. Tenga en cuenta que en ambos casos versionestá al mismo nivel que dependencies.

También hice una lista de los problemas de Drupal 8 que encontré y participé con mi actualización D8.

Actualizar:

He arreglado el código, nos encontramos con este problema: Reemplace los valores de la matriz de biblioteca # adjunta con cadenas espaciadas por nombres de proveedor

Tenga en cuenta esto:

 $libraries['#attached']['library'][] = array('herchel', 'herchel-corescripts');

contra esto

$libraries['#attached']['library'][] = 'herchel/herchel-corescripts';

Lo probé y los errores desaparecieron. :)


Danny, eres genial! Pero, estoy recibiendo algunos errores de PHP. Advertencia: explode () espera que el parámetro 2 sea una cadena, matriz dada en _drupal_add_library () (línea 2676 de core \ includes \ common.inc). Advertencia: explode () espera que el parámetro 2 sea una cadena, matriz dada en drupal_get_library () (línea 2741 de core \ includes \ common.inc). Estos errores aparecen independientemente de lo que haya en el archivo herchel.libraries.yml. Traté de solucionarlo un poco sin suerte. También probé el código de envío, pero que parece ser antes de tema 8507583 se obligaba
mherchel

1
$ page ['# adjunto'] ['library'] [] = 'libraryprovider / libraryname';

Mike, el nuevo código en Gratis está solo en la versión de desarrollo ( drupalcode.org/project/gratis.git/tree/refs/heads/8.x-1.x ) y lo probé y funciona con el último Alpha de D8 Hoy estoy bastante decaído en un proyecto, pero puedo ayudarlo este fin de semana. ¿Qué versión de D8 estás usando?
Danny Englander

¿Cómo se puede lograr esto sin usar una función de preproceso?
itsdarrylnorris

11

En su tema, cree un archivo de bibliotecas herchel.libraries.yml. En este archivo poner:

libname:
  version: 1.x
  js:
    js/scripts.js: {}
  css:
    theme:
      css/styles.css: {}
  dependencies:
    - core/jquery

En herchel.info.ymlponer:

libraries:
  - herchel/libname

Hubo un problema al respecto y se solucionó en Drupal Developer Days en Szeged.
Dragan Eror

He actualizado y probado el código en mi respuesta, es más probable que este sea el problema con el que nos encontramos en función del mensaje de error. drupal.org/node/2203407
Danny Englander

Quizás esto también ayude ... Página de documentación sobre la implementación de bibliotecas drupal.org/node/2216195
Dragan Eror

0

Tal vez haya agregado espacios antes de "dependencias:"

Esto es verdad:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

por ejemplo esto está mal:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
    dependencies:
      - core/jquery
      - core/drupal
      - core/drupalSettings
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.