Нужно добавить 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.
Как можно решить этот квест?
Комментарии
Видимо хуки в таком порядке вызываются. Можно попробовать добавлять master не в конец, а в начало массива.
Ну или как вариант добавлять все библиотеки в одном хуке. У меня как-то вот так получилось:
...
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';
}
}
}
Получилось!
А если объявить master как зависимость для slave в .libraries.yml?
И так тоже получилось!
Оба предложенных варианта — решение. Роскошно!