2015-09-23 3 views
0

У меня есть тип страницы «Промотирование». Шаблон страницы имеет область, внутри области отображаются два блока (созданные с помощью структур/блоков).Показать различные блоки в зависимости от конкретного состояния в drupal

У меня разные версии блоков (текст, цвет и т. Д.). Я хочу сделать функцию THEMENAME_preprocess (?) Для переключения между блоками в зависимости от конкретного условия.

Например: если пользователь является членом, тогда отобразите блок-21 и блок-22, если пользователь сделал то или это, то отобразите блок-23 и блок-24.

Не могли бы вы посоветовать мне, как это сделать?

ответ

0

Если у вас есть пользовательские функции («оплата», «неплатеж»), вам может быть лучше всего использовать hook_block_view_alter (https://api.drupal.org/api/drupal/modules!block!block.api.php/function/hook_block_view_alter/7) для управления дисплеем.

Вы можете по умолчанию отображать оба блока, а внутри hook_block_view_alter проверить условия и изменить возврат, чтобы удалить содержимое блока (вернуть false или отключить элементы).

+0

Спасибо за это! –

+0

Нет проблем, вы можете использовать xdebug/var_dump, не дорабатывать модуль и дельта внутри этой функции. –

1

На самом деле, я думаю, вы можете попробовать модуль Hide Block by Role, который именно то, что вы хотите, просто наоборот.

Этот модуль позволит вам скрыть блоки для пользователей, принадлежащих к определенным ролям.

или функциональность ядра

под /admin/structure/block/manage, а затем configure: (!?)

enter image description here

так, если я правильно Вас понял нет необходимости в какой-то пользовательский код/модуль

+0

На самом деле это связано с тем, что основные роли расширены, так что, например, «аутентифицированный пользователь» может быть «платящим» или «неплатежеспособным» пользователем, и в зависимости от этих двух он должен также видеть разные блоки. –

+0

в порядке, поэтому предоставление пользователю определенной роли, если они платят или нет, это не вариант? – FalcoB

+0

Не на самом деле снова появляются два типа платежных пользователей: один, кто купил год членства, и еще один, который имеет ежемесячное членство (позже они также могут переключаться между типами членства). Роли слишком сложны, чтобы расширить их в панели. Вот почему я хочу использовать функцию и задавать определенный тип пользователя и переключаться между блоками. –

0

У вас есть контекстный модуль:

https://www.drupal.org/project/context

... для более продвинутых блок размещения (и многое другое).

Но если вам нужна какая-то пользовательская логика, почему бы вам не поместить ее внутри блока? Поэтому сделайте блок, отображающий один на другой контент на основе вашего условия, написанного на простом PHP.

Смежные вопросы