Drupal 10. Как отключить в теме оформления CSS файлы из контриб модулей?

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

Аватар пользователя VasyOK VasyOK 17 сентября 2023 в 17:46

Подскажите: как отключить в теме оформления 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

Если читать официальную документацию, 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

Прописал:

libraries-override:
  jquery_ui/core:
    css:
      component:          
        /modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css: false

Не получается Sad
Почему?

Комментарии

Аватар пользователя VasyOK VasyOK 17 сентября 2023 в 19:21

Не получается. Пробовал по разному.

В jquery_ui.libraries.yml они не указаны, там:

core:
  js: {}

widget:
  js: {}

Есть файл jquery_ui.libraries.data.json, там:

"jquery_ui": {
    "internal.widget-css": {
      ...
      "css": {
       ...
        "theme": {
          "assets/vendor/jquery.ui/themes/base/theme.css": {}
        }
      }
    },

и

"jquery_ui_accordion": {
    "accordion": {
      ...
      "css": {
        "component": {
          "assets/vendor/jquery.ui/themes/base/accordion.css": {}
        }
      }
    }
  }
Аватар пользователя gun_dose gun_dose 18 сентября 2023 в 10:06

Они там всё, оказывается через хук добавили:
https://git.drupalcode.org/project/jquery_ui/-/blob/8.x-1.x/jquery_ui.mo...

И там внутри всё очень хитро собирается из json-файла. Думаю, что лучше тоже сделать свой хук, посмотреть, что там внутри в этих библиотеках и ансетнуть лишнее. Скорее всего там названия или расположение файлов может меняться в зависимости от версии.

Аватар пользователя VasyOK VasyOK 18 сентября 2023 в 10:10

Раньше выходило так через функцию.

function mytheme_css_alter(&$css) {
  $cssfile= "modules/contrib/jquery_ui/assets/vendor/jquery.ui/themes/base/theme.css";
  if ($css[$cssfile]) {
    unset($css[$cssfile]);
  }
}

Сейчас не выходит Sad

Аватар пользователя gun_dose gun_dose 18 сентября 2023 в 13:18

Так ты сперва посмотри, что внутри переменной $css. Через xdebug или через devel. Скорее всего ключ $cssfile будет какой-то другой.

Аватар пользователя VasyOK VasyOK 18 сентября 2023 в 21:39

Код выше можно переписать без переменной? Чтобы сразу к файлу обращалось? Если да то как?
В devel это где смотрится?

Аватар пользователя gun_dose gun_dose 19 сентября 2023 в 23:38
2

Интересно, путём каких умозаключений ты решил, что код, выводящий значение переменной из хука, надо расположить в шаблоне страницы? 🤔

Аватар пользователя jura12 jura12 18 сентября 2023 в 12:35

я перезаписываю через наследование то что нужно. и старое не работает.
просто новый свой файл и перезаписываете стили.

Аватар пользователя VasyOK VasyOK 18 сентября 2023 в 21:41

В Drupal 7 у меня подобное работало. А сейчас нет.

Создал пустой файл theme.css.
Как сделать чтобы он заменял файл, который мне не нужен?

Аватар пользователя jura12 jura12 18 сентября 2023 в 22:01

пустой не надо. надо с прописыванием стилей. вот я подправил language switcher

.region-header #block-my-theme-batrik2-pereklyuchatelyazyka-2  {
      margin-right: 20px;
}

смотрите в инструменте разработчика какое имя и какой стиль.

Аватар пользователя VasyOK VasyOK 20 сентября 2023 в 1:45

Значит в функцию print_r добавить?

function mytheme_css_alter(&$css) {  
  $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.

Аватар пользователя VasyOK VasyOK 23 сентября 2023 в 11:47

Спасибо. Значит theme.css подключается из нескольких мест. По мне это явная недоработка в архитектуре.

Сделал так. Заработало.

function mytheme_css_alter(&$css, \Drupal\Core\Asset\AttachedAssetsInterface $assets, \Drupal\Core\Language\LanguageInterface $language) {
  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...