Как удалить ненужные опции из поля выбора в форме Drupal? - PullRequest
0 голосов
/ 28 декабря 2010

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

В настоящее время я делаю это с помощью метода hook_form_alter (),Для упрощения в следующем примере поле называется «foo», а тип содержимого с этим полем называется «bar»:

function my_module_form_alter(&$form, $form_state, $form_id) {

  // Get all the values of foo that matter
  $resource = db_query('select distinct field_foo_value from {content_type_bar}');
  $foo = array();
  while($row = db_fetch_object($resource)) {
    $foo[$row->field_foo_value] = $row->field_foo_value;
  }

  $form['foo']['#options'] = $foo;
}

Это прекрасно работает - форма отображает только те опции, которые я хочудисплей.К сожалению, вид фактически ничего не отображает изначально, и я также получаю следующее сообщение об ошибке:

Обнаружен неправильный выбор.Пожалуйста, свяжитесь с администратором сайта.

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

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Под аргументом вашего представления должен быть раздел " Опции валидатора " с "" Действие, которое необходимо выполнить, если аргумент не проверяет под ним. В зависимости от того, что вы хотите показать, вы сможете отобразить все значения или отобразить пустую страницу.

1 голос
/ 29 декабря 2010

Я нашел решение, которое работает, но оно несколько хакерское. Я заставляю форму думать, что она проверена, и больше не жалуется, со следующей строкой в ​​нижней части функции:

$form['foo']['#validated'] = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...