Как отобразить и скрыть поля Drupal 7, основываясь на значении определенного поля - PullRequest
0 голосов
/ 15 марта 2011

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

Например, представьте, что у меня естьтри разные роли: РОЛЕА, РОЛЕБ и РОЛЕК.Каждая роль имеет свои собственные права доступа к полям.Когда узел создается впервые, пользователь с ролью ROLEA может видеть пару полей и может редактировать значение этих полей.Когда узел публикуется, правило / действие вызывается через модуль «Правила», и для поля состояния в этом узле устанавливается значение STAGE1.После этого события (создан новый узел), если пользователь (ROLEA) переходит к тому узлу, который был только что создан им, те поля, которые были доступны для редактирования раньше, теперь должны быть доступны только для чтения.Это означает, что когда модуль Rules устанавливает значение поля состояния на STAGE1, когда этот узел хочет загрузить Drupal, нам нужно проверить значение состояния, и на основании этого, если это было, например, STAGE1, изменить другое поле вэтот конкретный узел, только для чтения или редактируемый, или в некоторых случаях скрыть их от пользователя.Таким образом, я предполагаю создать модуль, который каждый раз, когда узел этого типа загружается, проверяет поле состояния (которое является полем, которое мы создали в этом типе узла) и на основе значения этого поля решает, какой узелдолжен появиться или скрыться.Это должно переопределить разрешение, которое было установлено для этих полей в данном конкретном типе узла.

Я пытаюсь создать метод для управления тем, какое поле будет доступно только для чтения / редактируемое / скрытое на основезначение определенного поля в этом типе контента, которое было задано модулем Roules на основе различных этапов работы на этом узле различными группами пользователей.Я не использую Органическую Группу.Я использую модуль Drupal 7 и Rules и пару других модулей, связанных с разрешениями.Но я обнаружил, что не существует такого способа обработки видимости полей на уровне узла, отдельно от пользовательских ролей.

Как вы думаете, есть ли другой способ достижения того же результата?Я признателен, если бы вы могли дать мне представление о том, как создать такой модуль.

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Вы можете создать модуль и добавить хук в форме узла, используя: hook_form_alter или hook_form_FORM_ID_alter

Используя этот вид хука, вы можете легко изменить форму узла и скрыть или сделать доступными только для чтения определенные поля в зависимости от того, что вы хотите (роль пользователя, значение поля ...)

0 голосов
/ 05 марта 2014

Существуют также ловушки hook_node_view_alter() и hook_entity_view_alter(), которые позволяют изменять массив визуализации для узла перед его визуализацией. Там вы можете установить для массивов полей значение '#access' = FALSE, чтобы они были скрыты, или '#access' = TRUE, чтобы показать их.

Я использую это, чтобы скрыть некоторые поля, если дата в другом поле узла имеет время в прошлом (это поле «истекает подписка»). Поэтому мне не нужно было менять форму редактирования, только отображение поля.

...