Какая польза от обратного вызова "#process" в друпи? - PullRequest
6 голосов
/ 14 октября 2010

В drupal fapi есть атрибут "#process". Что именно он делает? Почему поле пароля использует его для дублирования поля вместо добавления его с темой?
Я хочу использовать его для определения нового типа поля с помощьюhook_elements.

Edit:
вот мои hook_elements:

function test_elemets() {  
    return array(
        'test_field' => array(  
            '#input' => TRUE,  
            '#process' => array('test_field_process'),
        )
    );
}

и обратный вызов процесса:

function test_field_process($element, $edit, &$form_state, $complete_form) {
    $element = array();    
    return $element;    
}

, как вы видите в функции процесса, я использовал $ element= array () чтобы увидеть, что происходит. Но форма показывается, как это было раньше. Почему?

Ответы [ 2 ]

11 голосов
/ 14 октября 2010

Чтение документации API форм в свойстве элемента формы #process .

Это массив функций обратного вызова, каждая из которых будет вызываться с переданным ей массивом определения элемента. Функция обратного вызова может затем воздействовать на массив определения элемента, чтобы превратить его в другое (обычно более сложное) определение, например, например. дублирование поля пароля при присоединении файла JavaScript для проверки на равенство или превращение одного объединенного определения «радио» в соответствующее количество отдельных определений «радио» и т. д.

Вы захотите использовать его, если хотите предложить сложный элемент формы (например, сочетание нескольких «стандартных» элементов или один с автоматическим добавлением стандартных помощников JavaScript), но при этом сохраните простой декларативный подход API форм. ( Look Ma - только один массив '#type' = 'myCrazyFormElement', который автоматически расширяется до чего-то более сложного ;)

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

4 голосов
/ 14 октября 2010

Документация api.drupal.org по # process гласит:

Массив функций, которые называются когда элемент обрабатывается. С помощью этот обратный вызов, модули могут «зарегистрироваться» дальнейшие действия. Например, тип формы "радио" расширен до несколько переключателей с помощью функция обработки.

Обработка отличается от тематики в соответствии с API формы. Вы не можете изменить массив форм в слое темы (по крайней мере, не в D6). В частности, пароль добавляет form_expand_ahah в #process. Вероятно, вы можете вложить большую часть этого в слой темы, но не в эту строку:

$element['#cache'] = TRUE;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...