Своя тема для "флагнутых" материалов

Аватар пользователя void

Возможно ли для отмеченных (при помощи модуля flag) материалов применять другую тему (для всех отмеченных одна своя)? Если возможно, как примерно реализовать, куда копать?
Вдогонку если первое возможно: а вот еще другим (не флагнутым) материалам с референс полем-ссылкой на отмеченный материал тоже эту же тему применять, возможно?
Или как можно сменить тему всем каким либо образом отмеченным материалам и всем, ссылающимся на них (через референс поле ссылку)?

Модули и темы:
Ключевые слова:
Тип материала:
Версия Drupal:
0 Спасибо

Комментарии

Аватар пользователя sergeybelya
sergeybelya 9 месяцев назад

Именно тема должна быть другой или просто некоторые стили оформления (во втором случае можно решить просто через класс на body)?

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Лучше именно тему поменять чтобы не тянуть много лишнего в ненужных блоках.

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Вот и я не нашел в нем интеграции с флагами.

0 Спасибо
Аватар пользователя sergeybelya
sergeybelya 9 месяцев назад

А rules пробовали?

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Не умею рулзом тему менять, в нем разве это возможно?

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Не понял как состряпать правило. Можете на словах прописать?

0 Спасибо
Аватар пользователя gun_dose
gun_dose 9 месяцев назад

Можно панелями сделать. Или даже через Panels Everywhere, если очень много всего надо выпилить.

Но это годится только если ваш сайт слишком быстрый и вам надо замедлить его, дабы не быть заподозренным в применении квантовой телепортации.

0 Спасибо
Аватар пользователя sergeybelya
sergeybelya 9 месяцев назад 2

ну бред же пишете) К чему тут панели?

Аватар пользователя gun_dose
gun_dose 9 месяцев назад 1

Почему бред? Автору нужно со страниц материалов с флагами выпилить лишнее и сделать темизацию, поэтому
1. берём создаём страницу,
2. в правилах выбора выбираем критерий, чтобы у ноды был флаг,
3. по вкусу (или по необходимости) можно добавить ещё и контекст.
4. Вырубаем на странице регионы темы.
5. Выводим ноду как хотим.

Аватар пользователя void
void 9 месяцев назад

Думаю переобуца в панели уже поздновато, много чего надо будет переделывать.

0 Спасибо
Аватар пользователя gun_dose
gun_dose 9 месяцев назад

Ничего не надо переделывать - сделайте страницу, которая будет только для "флагнутых" - остальное останется как есть.

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Немного не понял...
Вот как надо: если материал флагнут, значит выводится с применением темы2, если не флагнут, то выводится как с применением темы1(которая по умолчанию везде). Адрес материала не должен меняться.

0 Спасибо
Аватар пользователя gun_dose
gun_dose 9 месяцев назад

В панели ставите урл node/% или выбираете стандартную заготовку под этот шаблон и задаёте критерии выбора. В таком случае то, что подпадает под критерии, будет рендериться панелями, то, что не подпадает под критерий - будет рендериться как и раньше. При этом никакие урлы не поменяются.

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Хм, интересно. Буду посмотреть.

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Поглядел. Вывод страницы переопределяет, НО! в текущей теме не убирает (не скрывает) другие блоки и регионы (которые стоят по умолчанию) и хз как это поправить.

0 Спасибо
Аватар пользователя gun_dose
gun_dose 9 месяцев назад

блоки

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Не работает даже на бартике.

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Это последний вариант. Крайне желательно переключалку без кастома.

0 Спасибо
Аватар пользователя negociant
negociant 9 месяцев назад 1

либо рулесами поизвращаться, либо панелями накликать, либо написать 3-5 строк кода в hook_custom_theme

Аватар пользователя xakd
xakd 9 месяцев назад

В хуке тему менять в зависимости от флагификации. В хуке вывода ноды например

0 Спасибо
Аватар пользователя dgastudio
dgastudio 9 месяцев назад

автор, а можете объяснить суть "смены темы"?

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

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

На страницах флагнутых материалов не должны выводится половина умолчальных блоков, и должны выводится другие блоки в других местах новых блоков плюс измененное оформление и немного другая структура регионов. Такое удобно сделать настроив другую тему и применять ее где требуется.

0 Спасибо
Аватар пользователя dgastudio
dgastudio 9 месяцев назад
negociant написал:
hook_custom_theme

тогда оптимальный вариант для вас, это совет коллеги.

хотя я все таки с трудом себе представляю внешний вид подобного функционала, учитывая что в 95% случае флаг это аякс.

может поделитесь скринами дизайна?

0 Спасибо
Аватар пользователя void
void 9 месяцев назад

Тема не применяется сразу по нажатию флага. Она применяется у тех материалов, у которых флаг активен.
Уже смотрю в сторону hook_custom_theme, но также все еще ищу решение на rules или themkey.

0 Спасибо
Аватар пользователя negociant
negociant 9 месяцев назад 1

По первой части вопроса для отмеченных флагом нод получится примерно так(в условие можно добавить проверку на тип ноды):

/**
 * Implements hook_custom_theme().
 */

function MODULENAME_custom_theme() {
  $node = menu_get_object();
  if ($node) {
    $flag = flag_get_flag('bookmark'); // bookmark - машинное имя флага
    if ($flag && $flag->is_flagged($node->nid)) {
      // Возвращаем имя нужной темы
      return 'THEMENAME';
    }
  }
}

По второй части нужно в том же хуке из референс поля вытягивать nid ноды и потом проверять чекнут ли у нее флаг.