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

Тип материала: 
Версия Drupal: 
Ключевые слова: 
Модули и темы: 
Втр, 03/01/2017 - 10:08

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

0 Спасибо

Комментарии

Аватар пользователя sergeybelya
2 недели 4 дня назад sergeybelya #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

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

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя gun_dose
2 недели 4 дня назад gun_dose #

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

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

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

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

2 Спасибо
Аватар пользователя gun_dose
2 недели 4 дня назад gun_dose #

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

1 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя gun_dose
2 недели 4 дня назад gun_dose #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя gun_dose
2 недели 4 дня назад gun_dose #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя gun_dose
2 недели 4 дня назад gun_dose #

блоки

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя negociant
2 недели 4 дня назад negociant #

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

1 Спасибо
Аватар пользователя xakd
2 недели 4 дня назад xakd #

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

0 Спасибо
Аватар пользователя dgastudio
2 недели 4 дня назад dgastudio #

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

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя dgastudio
2 недели 4 дня назад dgastudio #
negociant написал:
hook_custom_theme

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

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

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

0 Спасибо
Аватар пользователя void
2 недели 4 дня назад void #

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

0 Спасибо
Аватар пользователя negociant
2 недели 4 дня назад negociant #

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

/**
 * 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 ноды и потом проверять чекнут ли у нее флаг.

1 Спасибо