Я не знаю почему, но Views не добавляет «читаемые человеком» имена классов CSS (например, имя компьютера представления) в блоки, которые он создает ( он только добавляет свои классы в сгенерированную часть «content», когда добавление классов в раздел « CSS-класс » в редакторе представлений (см. скриншоты ниже!)).
Он только добавляет обычные block block-views
и, возможно, contextual-links-region
CSS-классы к блоку (-ам) и генерирует уникальный идентификатор (не класс), например: block-views-3d8f7966168beeec655c8ead69336789
(потому что его дельта - это сгенерированный хэш-код).
Не имеет смысла писать правила CSS для этих классов и идентификаторов (например .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }
), потому что эти классы / идентификаторы могут измениться при изменении блока Views.
Как я могу добавить некоторые пользовательские классы CSS в реализацию hook_block_view_alter()
, если я не могу даже идентифицировать эти блоки из-за их сгенерированной дельты хеша?
Я не хочу использовать Block Class , потому что чувствую, что это просто излишнее добавление некоторых классов к одному или двум блокам, сгенерированным представлениями (кстати, я проверил модуль и чувствую SELECT css_class, module, delta FROM {block_class}
запрос block_class_preprocess_block()
как излишнее, потому что он проверяет ВСЕ добавлены классы, даже если блок скрыт ...).
Поэтому я хотел бы решить это из моего собственного модуля.
РЕДАКТИРОВАТЬ
Пример:
block--views--3d8f7966168beeec655c8ead69336789.tpl.php
файл, и в этом случае я нахожусь в той же точке, как если бы я использовалif($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')
условие вhook_preprocess_block()
. Это то, чего я хотел избежать, потому что я думал, что могу использовать более удобочитаемое имя в своем крючке. Например, что если я захочу переместить представление в другое с теми же параметрами, я удалю предыдущее, но использую то же имя машины и классы CSS, но сгенерированные уникальные изменения хеша? В этом случае я теряю свои модификации.Это старый вопрос, но нет правильного ответа. Я столкнулся с той же проблемой. Решения, о которых я мог подумать, - это родительский селектор CSS (которого пока нет) ИЛИ некоторые манипуляции с Drupal.
Я добавил hook_preprocess_block, чтобы добавить класс CSS-оболочки для всех блоков представления, которые определяют класс CSS. Это не тривиально, поэтому я поставлю свой код здесь. Он может не работать со всеми блоками просмотра, если у вас есть проблемы с этим кодом, не стесняйтесь обновить его и опубликовать свою собственную версию.
Пример: представление с классом CSS «test» будет содержаться в блоке с классом CSS «test-wrapper».
источник
Для этого есть модуль.
Посмотреть блок топ класса
источник
Для меня
hook_preprocess_block()
не сработало. (Может быть, потому что мне пришлось добавить блок непосредственно из файла шаблона черезviews_embed_view()
.)Тем не менее,
hook_preprocess_views_view()
с простой проверкой для$vars['view']->current_display
сделал работу:источник
Самым простым способом для меня было скопировать файл block.tpl.php, переименовать его,
block--myregion.tpl.php
а затем добавить в него мои классы.Смотрите: Страница тематических блоков .
источник