Скрывать или показывать поля в зависимости от того, опубликован ли узел


Я хочу показывать и скрывать поля формы на основе текущего прогресса узла с использованием добавленных модулей, таких как рабочий процесс, Maestro или правила.

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

Существует ли простой способ взаимодействия с ФОРМАПИ Drupal 7 для отображения и скрытия полей на основе статуса узла с использованием правил, Рабочий процесс, Maestro или другие внесенные модули?

Кроме того, есть ли простой способ изменить "списки выбора", созданные с помощью FormAPI, с помощью любого из отмеченных плагинов?

Author: paul-m, 2012-01-24

3 answers

Возможно, вы сможете собрать что-то вместе, используя Условные поля, но пользовательский модуль (с использованием hook_form_alter()) определенно был бы рекомендуемым путем здесь, потому что он звучит относительно нестандартно.

Условные поля просто скрыты с помощью JS, хотя, похоже, вам может потребоваться сделать так, чтобы люди не могли получить доступ к полям (например, #свойство доступа = FALSE) в форме редактирования в определенных ситуациях.

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

 2
Author: geerlingguy, 2012-01-24 03:13:35

+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

 2
Author: paul-m, 2012-01-24 07:27:41

Я не знаю о единственном решении aGUI. Вы, конечно, можете реализовать hook_field_access. Это позволяет реализовать мелкозернистый контроль доступа к полям.

 0
Author: BetaRide, 2012-01-24 07:02:58