Добавить в body библиотеки по определенному порядку

Главные вкладки

Аватар пользователя Shipovnix Shipovnix 11 марта 2021 в 14:57

Нужно добавить js на страницы с помощью двух библиотек, mymodule/master (master.js) и mymodule/slave (slave.js) именно в этой последовательности, сначала master.js, потом slave.js.
При этом, нужно сделать так, чтобы master.js был на всех страницах, а slave.js только на нодах конкретного типа.
Что делал: в модуле прописывал препроцессы:

<?php

function mymodule_preprocess_page(&$variables) {
  
$variables['#attached']['library'][] =  'mymodule/master';
}

function 

mymodule_preprocess_node(&$variables) {
  
$variables['#attached']['library'][] =  'mymodule/slave';
}

?>

Но при таком раскладе в body прописывается сначала slave.js, затем master.js.

Как можно решить этот квест?

Лучший ответ

Аватар пользователя charOFF charOFF 11 марта 2021 в 16:27
1

А если объявить master как зависимость для slave в .libraries.yml?

Комментарии

Аватар пользователя marassa marassa 11 марта 2021 в 16:13
1

Видимо хуки в таком порядке вызываются. Можно попробовать добавлять master не в конец, а в начало массива.

Ну или как вариант добавлять все библиотеки в одном хуке. У меня как-то вот так получилось:

function HOOK_page_attachments_alter(array &$attachments) {
...
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if (is_string($node)) $node = \Drupal\node\Entity\Node::load($node);
    if ($node->getType() === 'xxx' && !strpos($curpath, '/edit') && !strpos($curpath, '/translations/')) {
      $attachments['#attached']['library'][] = 'yyy';
    }
  }
}