Рейтинг:1

Почему библиотека Highcharts, определенная из пользовательского модуля, не загружается на каждую страницу?

флаг ae

Я запускаю Drupal 9.1.7 на Lando на Mac. Я пишу собственный модуль и хочу включить библиотеку Highcharts. Файл .libraries.yml выглядит так.

статистика_градусов:
  js:
    https://code.highcharts.com/highcharts.js: {тип: внешний, минимизированный: false}
  зависимости:
    - ядро/jquery

Прочитав документацию, я понял, что должен видеть библиотеку Highcharts внизу каждой страницы при просмотре исходного кода, но я нигде ее не вижу.

Я что-то пропустил?

Я уже проверил содержимое YAML. Я также установил модуль Charts, если это имеет значение.

Рейтинг:2
флаг in

Определение библиотеки — это только половина процесса. Библиотеки не загружаются на каждую страницу по умолчанию — вам нужно указать Drupal, когда он должен включить вашу библиотеку.

Для получения полной информации см. Прикрепление библиотеки к страницам раздел Добавление таблиц стилей (CSS) и JavaScript (JS) в модуль Drupal документация на drupal.org.

Держу пари, ты хочешь прикрепить библиотеку к массиву рендеринга:

$build['the_element_that_needs_asset_library']['#attached']['library'][] = 'your_module/library_name';

Или же прикрепите библиотеку в шаблоне ветки (шаблон, который создает разметку вашей диаграммы):

{{ attach_library('ваш_модуль/имя_библиотеки') }}
Dorian Winterfeld avatar
флаг ae
Да! Я пытаюсь прикрепить его к массиву рендеринга следующим образом: `$chart['#attached']['library'][] = 'stats_degrees/highcharts';` `$диаграмма['#тип'] = 'диаграмма';` `$chart['#chart_type'] = 'линия';` `$chart['#chart_library'] = 'высокие диаграммы';` и т.д. Но когда я возвращаю массив: `return render($chart);` он всегда нулевой, и когда я просматриваю исходный код, Highcharts JS не отображается. Этот подход работал в D7, но D7 по-другому обрабатывал библиотеки JS, и drupal_render() был заменен на render().
sonfd avatar
флаг in
Обычно вы не должны визуализировать массив рендеринга, вызывая render, вы должны просто вернуть его. Это первое, что я бы попробовал. См. https://www.drupal.org/docs/theming-drupal/twig-in-drupal/twig-best-practices-preprocess-functions-and-templates.
Dorian Winterfeld avatar
флаг ae
Я делаю это для отладки в PHP Storm, `$rendered = \Drupal::service('renderer')->renderPlain($chart);`. Когда я углубляюсь в отладчик, я вижу, что Renderer::executeInRenderContext() возвращает значение null. Должно быть что-то не так с моим массивом рендеринга... может быть, нам следует закрыть эту ветку, и я открою новую после дополнительной отладки.
sonfd avatar
флаг in
Да, это кажется хорошей идеей. Похоже, вы знаете, как правильно подключить библиотеку, но есть проблема с вашим массивом рендеринга.
Dorian Winterfeld avatar
флаг ae
Я установил библиотеку highcharts с помощью composer. Он установил его в /libraries. Имеет смысл. Как мне указать это в моем файле .libraries.yml? Я попытался сделать это относительно моего модуля `../../../libraries/highcharts/highcharts.js: { }`, но я все еще не вижу его в исходном коде страницы. Я попытался прикрепить его к моему массиву рендеринга и в шаблоне ветки, например: `{{attach_library('stats_degrees/highcharts') }}`, но я все еще не вижу его.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.