Скрывать или показывать поля в зависимости от того, опубликован ли узел
Я хочу показывать и скрывать поля формы на основе текущего прогресса узла с использованием добавленных модулей, таких как рабочий процесс, Maestro или правила.
Например, я хотел бы показать определенные поля, если публикация опубликована, и скрыть те же поля, если она находится в черновике. Я хотел бы избежать написания пользовательского модуля, если это возможно.
Существует ли простой способ взаимодействия с ФОРМАПИ Drupal 7 для отображения и скрытия полей на основе статуса узла с использованием правил, Рабочий процесс, Maestro или другие внесенные модули?
Кроме того, есть ли простой способ изменить "списки выбора", созданные с помощью FormAPI, с помощью любого из отмеченных плагинов?
3 answers
Возможно, вы сможете собрать что-то вместе, используя Условные поля, но пользовательский модуль (с использованием hook_form_alter()) определенно был бы рекомендуемым путем здесь, потому что он звучит относительно нестандартно.
Условные поля просто скрыты с помощью JS, хотя, похоже, вам может потребоваться сделать так, чтобы люди не могли получить доступ к полям (например, #свойство доступа = FALSE) в форме редактирования в определенных ситуациях.
Правила не имеют большой интеграции с контентом редактирование форм; но вы, вероятно, могли бы установить для какого-либо поля другое значение, если статус узла изменен с черновика на опубликованный или что-то в этом роде, что может вызвать что-то с условными полями... но я думаю, что в этом случае было бы лучше сделать это в пользовательском модуле и, безусловно, было бы более надежным.
+1 для нового модуля, но hook_node_view_alter()
имеет больше смысла.
На самом деле я решил попробовать. Это скроет поле с именем field_hide_me
, если узел опубликован:
/**
* Implements hook_node_view_alter().
*
* If the node is published then we hide a field
* called 'field_hide_me'.
*/
function if_published_node_view_alter(&$build) {
// only for full view mode
if ($build['#view_mode'] == 'full') {
// check whether our field exists
if (isset($build['field_hide_me'])) {
// grab the node
$node = $build['#node'];
// status is 1 for published, 0 unpublished
if ($node->status) {
unset($build['field_hide_me']);
}
}
}
}
Песочница здесь: http://drupal.org/sandbox/Mile23/1415030
Я не знаю о единственном решении aGUI. Вы, конечно, можете реализовать hook_field_access. Это позволяет реализовать мелкозернистый контроль доступа к полям.