Как мне сделать тему требует Jquery (для анонимных пользователей)?

7

Я создаю тему для D8 под названием «herchel». Я пытаюсь заставить эту тему требовать jquery на всех страницах (D8 не загружает Jquery для анонимных пользователей по умолчанию)

Просматривая небольшую документацию, которую я могу найти в дополнение к основным темам, я создал файл с именем herchel.libraries.yml

Я попробовал следующее ... все без удачи:

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

-

drupal:
version: VERSION
  dependencies:
    - core/jquery

-

herchel:
version: VERSION
  dependencies:
    - core/jquery

У кого-нибудь есть идеи о том, что мне нужно вложить в это?

mherchel
источник
Третий правильный, я думаю, что проблема заключается только в пробелах - попробуйте сделать отступ, versionчтобы соответствоватьdependencies
Клайв

Ответы:

11

Я побежал к обновлению одной из моих тем для Drupal 8, так как я хотел jquery.once для анонимных пользователей. Вот что я сделал, и это прекрасно работает:

В herchel.libraries.yml

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

Затем в файле herchel.theme вашей темы .

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);
}

Обратите внимание на отступы и для кода YML. Хотя это еще не очень хорошо задокументировано, вы можете взглянуть на эту проблему и на ее журнал изменений.

Замените hook_library_info () на файл * .libraries.yml

Обратите внимание, что вы также видите файл "scripts.js" теоретической темы в приведенном выше коде, но он вам может не понадобиться. В моей теме это то, что использует jquery для вызова пользовательского кода.

Этот код , вероятно, также является хорошим справочником для битов YML. Обратите внимание, что в обоих случаях versionнаходится на том же уровне, что и dependencies.

Я также составил список проблем, с которыми я столкнулся в Drupal 8, и принял участие в обновлении D8.

Обновить:

Я исправил код и столкнулся с этой проблемой: заменил значения массива библиотеки #attached на строки с именами провайдеров

Обратите внимание:

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

vs.this

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

Я проверил, и ошибки ушли. :)

Дэнни Энгландер
источник
Дэнни, ты классный! Но я получаю некоторые ошибки PHP. Предупреждение: explode () ожидает, что параметр 2 будет строкой, массив задан в _drupal_add_library () (строка 2676 из core \ includes \ common.inc). Предупреждение: explode () ожидает, что параметр 2 будет строкой, а массив задан в drupal_get_library () (строка 2741 из core \ includes \ common.inc). Эти ошибки появляются независимо от того, что находится в файле herchel.libraries.yml. Я попытался обойти это немного без удачи. Я также попробовал ваш код от Gratis, но, кажется, это было до того, как проблема 8507583 была
принята
1
$ page ['# attach'] ['library'] [] = 'libraryprovider / libraryname';
Майк, новый код в Gratis есть только в версии для разработчиков ( drupalcode.org/project/gratis.git/tree/refs/heads/8.x-1.x ), и я протестировал его, и он работает с последней версией Alpha D8. Сегодня я в значительной степени обескуражен проектом, но, возможно, смогу помочь в эти выходные. Какую версию D8 вы используете?
Дэнни Энгландер,
Как можно добиться этого без использования функции предварительной обработки?
itdarrylnorris
11

В вашей теме создайте файл библиотеки herchel.libraries.yml. В этот файл положите:

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

На herchel.info.ymlместе:

libraries:
  - herchel/libname
Dragan Eror
источник
Возникла проблема по этому поводу, и она была устранена на Друпал Дейпеллерс в Сегеде.
Dragan Eror
Я обновил и проверил код в своем ответе, это более вероятно, проблема, с которой мы столкнулись на основе сообщения об ошибке. drupal.org/node/2203407
Дэнни Энгландер
Может быть, это тоже поможет ... Страница документации о реализации библиотек drupal.org/node/2216195
Dragan Eror
0

Может быть, вы должны добавить пробелы перед "зависимости:"

это правда:

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

например это неправильно:

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
Амин
источник