Подскажите: как отключить в теме оформления CSS файлы из контриб модулей?
Подключаю акордион модулями jquery_ui + jquery_ui_accordion. Пытаюсь отключить CSS файлы от этих модулей.
В D9 работала конструкция в mytheme.info.yml
stylesheets-remove:
- modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/accordion.css
- modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css
- modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/accordion.css
- modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css
Если читать официальную документацию, https://www.drupal.org/node/2216195#override-extend, там синтаксис:
libraries-override:
contextual/drupal.contextual-links:
css:
component:
/core/themes/stable/css/contextual/contextual.module.css: false
contextual/drupal.contextual-links:
css:
component:
/core/themes/stable/css/contextual/contextual.module.css: false
Прописал:
libraries-override:
jquery_ui/core:
css:
component:
/modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css: false
jquery_ui/core:
css:
component:
/modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css: false
Не получается
Почему?
Комментарии
Надо путь не от корня прописывать, а так, как он указан в оригинальном libraries.yml
Не получается. Пробовал по разному.
В jquery_ui.libraries.yml они не указаны, там:
js: {}
widget:
js: {}
Есть файл jquery_ui.libraries.data.json, там:
"internal.widget-css": {
...
"css": {
...
"theme": {
"assets/vendor/jquery.ui/themes/base/theme.css": {}
}
}
},
и
"accordion": {
...
"css": {
"component": {
"assets/vendor/jquery.ui/themes/base/accordion.css": {}
}
}
}
}
Они там всё, оказывается через хук добавили:
https://git.drupalcode.org/project/jquery_ui/-/blob/8.x-1.x/jquery_ui.mo...
И там внутри всё очень хитро собирается из json-файла. Думаю, что лучше тоже сделать свой хук, посмотреть, что там внутри в этих библиотеках и ансетнуть лишнее. Скорее всего там названия или расположение файлов может меняться в зависимости от версии.
Раньше выходило так через функцию.
$cssfile= "modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css";
if ($css[$cssfile]) {
unset($css[$cssfile]);
}
}
Сейчас не выходит
Так ты сперва посмотри, что внутри переменной $css. Через xdebug или через devel. Скорее всего ключ $cssfile будет какой-то другой.
Код выше можно переписать без переменной? Чтобы сразу к файлу обращалось? Если да то как?
В devel это где смотрится?
Если не знаешь, где в devel смотреть, посмотри через var_dump или print_r
А так?
<?php print_r($css); ?> так не работает уже.
А, ну если не работает, то тогда конечно остаётся перебирать варианты вслепую.
А кеш css-js сбросить?
Сбрасывал. Не работает. Просто вставил <?php print_r($css); ?> в конец page.html.twig. Ничего не происходит.
Интересно, путём каких умозаключений ты решил, что код, выводящий значение переменной из хука, надо расположить в шаблоне страницы? 🤔
я перезаписываю через наследование то что нужно. и старое не работает.
просто новый свой файл и перезаписываете стили.
В Drupal 7 у меня подобное работало. А сейчас нет.
Создал пустой файл theme.css.
Как сделать чтобы он заменял файл, который мне не нужен?
пустой не надо. надо с прописыванием стилей. вот я подправил language switcher
margin-right: 20px;
}
смотрите в инструменте разработчика какое имя и какой стиль.
Мне надо избавиться от CSS стилей в некоторых файлах, а не переписывать их.
del
Значит в функцию print_r добавить?
$file_path = "modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css";
unset($css[$file_path]);
print_r($css);
}
Выдает многабукв. Что в них искать? Фрагмент:
[core/assets/vendor/jquery.ui/themes/base/theme.css] => Array ( [weight] => 188.2018 [group] => 0 [type] => file [data] => core/assets/vendor/jquery.ui/themes/base/theme.css [version] => 10.1.4-dev [media] => all [preprocess] => 1 [license] => Array ( [name] => GNU-GPL-2.0-or-later [url] => https://www.drupal.org/licensing/faq [gpl-compatible] => 1 ) )
и в конце:
The website encountered an unexpected error. Please try again later.
Вон, видишь, путь к theme.css не такой, как ты писал. Вот его используй в качестве $file_path и заработает.
Спасибо. Значит theme.css подключается из нескольких мест. По мне это явная недоработка в архитектуре.
Сделал так. Заработало.
unset($css['modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css']);
unset($css['core/assets/vendor/jquery.ui/themes/base/theme.css']);
unset($css['modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/accordion.css']);
}
\Drupal\Core\Asset\AttachedAssetsInterface $assets, \Drupal\Core\Language\LanguageInterface
$language - эта строчка в функции обязательна? Спрашиваю потому как тут читал https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21...