У меня есть экземпляр Drupal, работающий на example.org. У которого тема X установлена и активирована. Теперь в течение ограниченного периода времени на сайте предполагается проведение мероприятия, для которого был выделен специальный раздел. Все, что связано с этим событием, пойдет по адресу example.org/event2011.
Я хочу, чтобы при просмотре страницы в этом разделе отображалась другая тема (например, http://example.org/event2011/about , http://example.org/event2011/node/123 ). Как я могу это сделать?
Я прошел через множество модулей, но ни один из них не поддерживает Drupal 7. Предпочтительно, я бы хотел, чтобы это делалось с использованием модулей, и не хочу ничего менять сам на уровне кода.
Ответы:
Учитывая, что изменение происходит в течение ограниченного периода времени, и что реализация такого кода не представляет трудностей, я бы предложил реализовать пользовательский модуль, который изменяет тему, используемую для определенных страниц.
Для этого достаточно реализовать
hook_custom_theme()
следующее:Если вам нужно изменить тему только для http://example.com/event2011 , но не для http://example.com/event2011/node/123 , код следует изменить на
Что касается использования обратных вызовов темы в определении обратного вызова меню, в документации сказано:
источник
Индивидуальное решение, подобное тому, которое предлагает другой комментарий, вероятно, лучше, но если вы действительно хотите использовать модуль, лучше всего выбрать ThemeKey . По состоянию на 23.05.11 он имеет стабильную версию.
источник
В качестве альтернативы вы можете использовать новую
theme callback
опцию системы меню,hook_menu_alter()
как описано ниже. ps Checkout hook_menu () для более подробной информации оtheme callback
Кроме того, есть также пример использования более традиционных
hook_custom_theme()
Взято с: http://drupal.org/node/224333#custom_theme
источник
Вы можете просто использовать Context и использовать тему для применения, когда путь / event2011 / вы можете просто установить путь в условии cotext и изменить тему в действии содержимого. Это было очень легко переключаться между темами на сайте по URL. Даже работает для мобильных телефонов;)
источник
Использовать ThemeKey просто и это самый популярный и мощный модуль (с поддержкой 8.x) на сегодняшний день для правил переключения тем, которые позволяют автоматически выбирать тему в зависимости от текущего пути, терминов таксономии, языка, типа узла и многих других, много других свойств. Он также может быть легко расширен для поддержки дополнительных свойств, предоставляемых другими модулями. Помимо стандартных функций, ThemeKey автоматически расширяет возможности многих модулей contrib и имеет модули, расширяющие его.
Использование (7.x)
После включения модуля перейдите на
admin/config/user-interface/themekey
. Существует много вариантов переключения темы, но, вероятно, вам это будет интересноpath:node_alias
, поэтому установите значение так, как вы хотите, как вы говорите / my_url, а затем выберите тему, которую вы хотите включить по этому URL. Вы также можете использовать символы подстановки, такие какweb/*
или/^web/.*
.Проверить: Как загрузить тему для пути
Расширенное использование
ThemeKey 7.x содержит дополнительный модуль под названием ThemeKey Example, чтобы продемонстрировать разработчикам, как расширить ThemeKey.
Помощь (7.x)
Посмотрите видеоурок от Mustardseed (7.x).
Дополнительную помощь по этой теме можно найти на
/admin/help/themekey
.Также проверьте другие вопросы SE, связанные с themekey .
В качестве альтернативы есть также Switchtheme (7.x), который добавляет блок, позволяющий пользователям переключаться между включенными темами.
источник
При использовании URL-псевдонимов или модуля Pathauto , помните о тонкостях и различиях при использовании компонентов текущего пути Drupal.
Есть ситуации, когда вы можете не захотеть использовать arg () . На самом деле, документация по Drupal API фактически предлагает избегать использования этой функции там, где это возможно, поскольку результирующий код трудно читать.
Рассмотрим следующий пример, предложенный kiamlaluno :
В Drupal 7, если узел имеет псевдоним event2011 , использование
arg(0)
будет возвращатьсяnode
в качестве первого компонента URL, в отличие от псевдонима.Вместо этого, если вам нужно работать с псевдонимом Есть несколько способов , чтобы получить текущий URL в Drupal , в том числе
menu_get_object()
,current_path()
,request_path()
и другие.Вот переработанный пример, который использует псевдоним в качестве триггера для переключения темы:
источник
Как поменять тему в зависимости от роли пользователя:
Создайте пользовательский модуль и скопируйте и вставьте следующее:
Вы должны заменить:
mymodule
=> с вашим именем модулямоя специальная роль => с названием роли, которая понадобится вашим пользователям, чтобы они могли видеть другую тему.
mytheme
=> с названием темы, на которую вы хотите переключитьсяисточник
Вы можете использовать модуль Page Theme для достижения именно этого
источник
Вы можете использовать модуль Page Theme, чтобы добиться именно этого: Модуль Page Theme - это простой и легкий в использовании модуль, который позволяет использовать темы, отличные от заданных по умолчанию на определенных страницах сайта.
Особенности :
Назначьте тему одной странице или списку страниц. (Установите страницу как путь Drupal) Разрешить использовать символ '*' в качестве подстановочного знака в путях Drupal. Разрешить оформить темы. (Если определено несколько страниц, будет использоваться первая тема в списке.) Разрешить включение / отключение темы. Drupal начинающий дружелюбный.
так, как вы можете использовать: Разделы, которые имеют почти те же функции, что и тема страницы, но добавляют выбор на основе ролей и область «php snippet» для выбора темы.
но если вы хотите использовать темы, отличные от тех, которые используются сайтом по умолчанию при создании, редактировании и просмотре контента страниц, вы можете использовать тему контента, которая позволяет использовать темы, отличные от тем, которые используются сайтом по умолчанию при создании, редактировании и просмотре контента страниц.
источник