У меня такая задача. Делаю доску объявлений. Есть словарь - "Объявления" и термины в нем.
Например:
Авто
- Легковые
-- Новые
-- Поддержанные
- Грузовые
- Автобусы
- и т. д.
Я создал новый тип контента "Объявления" (ad). Создал блок и кнопку в нем, по которой пользователи смогут добавлять объявления. При нажатии на кнопку пользователь переходит по адресу: doska/node/add/ad. При этом пользователь видит форму с полями:
1. Заголовок.
2. Раздел (здесь появляется select со всеми терминами из словаря "Объявления").
3. Текст объявления.
И теперь проблема:
Я чуть изменил select и у меня появились дополнительные пункты option. При отправке формы я получаю сообщение:
An illegal choice has been detected. Please contact the site administrator.
Я нашел где оно вызывается. Это файл includes/form.inc функция _form_validate(), строки:
<?php
elseif (!isset($options[$elements['#value']])) {
form_error($elements, t('An illegal choice has been detected. Please contact the site administrator.'));
watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => $elements['#value'], '%name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'])), WATCHDOG_ERROR);
}
?>
Если их закомментировать, то все ок. Но это не решение, я погуглил и нашел, что нужно добавить в массив $form, элемент:
<?php
$form['#DANGEROUS_SKIP_CHECK'] = true;
?>
Я уже везде попробывал повтыкать эту строку, но ничего не меняется. Где ее надо прописать в своем модуле, чтобы убрать это сообщение?
Вот код моего модуля (modules/newspaper/newspaper.module):
<?php
function newspaper_form_alter($form_id, &$form) {
if ($form_id == 'ad_node_form') {
$form['#validate'] = array('newspaper_form_validate' => array());
}
}
function newspaper_form_validate($form_id, $form_values, &$form)
{
$form['#DANGEROUS_SKIP_CHECK'] = true; // Это не работает...
}
?>
Прошу помощи у знающих людей...
Еще я поизучал код этой функции (_form_validate) и нашел строку:
<?php
// Add legal choice check if element has #options. Can be skipped, but
// then you must validate your own element.
if (isset($elements['#options']) && isset($elements['#value']) && !isset($elements['#DANGEROUS_SKIP_CHECK'])) {
?>
У функции этой такой прототип:
<?php
function _form_validate($elements, $form_id = NULL)
?>
Т. е. мне надо в массив $elements добавить #DANGEROUS_SKIP_CHECK. Где это можно сделать? В какой функции и файле?