Fapi. индексы массива $form

Главные вкладки

Аватар пользователя zlodiak zlodiak 25 июля 2013 в 21:45

помогите пожалуйста разобраться

в drupal 7 сразу после установки существует блок с формой поиска. код её примерно такой:

<form accept-charset="UTF-8" id="search-block-form" method="post" action="/drupals/d7_ubercart/">
    <div>
        <div class="container-inline">
            <h2 class="element-invisible">Форма поиска</h2>
            <div class="form-item form-type-textfield form-item-search-block-form">
            <label for="edit-search-block-form--2" class="element-invisible">Найти </label>
            <input type="text" class="form-text" maxlength="128" size="15" value="" name="search_block_form" id="edit-search-block-form--2" title="Введите ключевые слова для поиска.">
            </div>
            <div id="edit-actions" class="form-actions form-wrapper"><input type="submit" class="form-submit" value="Найти" name="op" id="edit-submit"></div><input type="hidden" value="form-L2mtv78lupETXpFEzrSbnVMrb54rR4O91uwSJ2Y0FpY" name="form_build_id">
            <input type="hidden" value="x03xcoW_WZxsoGEiKEMTCmgD-4pgYrOJAXIgn-KMGQc" name="form_token">
            <input type="hidden" value="search_block_form" name="form_id">
        </div>
    </div>
</form>

я изменяю эту форму через function themenabe_form_alter(&$form, &$form_state, $form_id) {}. то есть в массив(объект) $form добавляю новые элементы(свойства).

проблема в том, что я не понимаю структуру этого массива(даже после вывода его через php-функцию print_r()). например я прописываю в template.php следующее:

<?phpfunction surma_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'search_block_form') {
        $form['submit'] = array(
            '#type' => 'submit',
            '#value' => t('Submitttt'),
        );  
    }
}?>

в результате надпись на кнопке добавления формы меняется. ок. но непонятно что означает индекы 'submit'. откуда он? если это type кнопки отправки формы, то существует неоднозначность. как например тогда идентифицировать поля текстовые input, ведь их может быть несколько и тип у них соответственно один и тот же.

непонятно даже как обратиться к единственному полю, которое сейчас есть в форме поиска и добавить например класс qwe

ps в последних двух пунктах есть 2 вопроса, которые очень для меня важны. ответьте именно на них пожалуйста, люди добрые

Комментарии

Аватар пользователя duozersk duozersk 25 июля 2013 в 23:35

"zlodiak" wrote:
но непонятно что означает индекы 'submit'. откуда он?

Просто сделали такой индекс у этого элемента формы, он не обязан совпадать с #type этого элемента формы и может быть на самом деле любым другим.
"zlodiak" wrote:
непонятно даже как обратиться к единственному полю, которое сейчас есть в форме поиска и добавить например класс qwe

Примерно так:

$form['search_block_form']['#attributes'] = array(
  'class' => array('qwe'),
);
Аватар пользователя zlodiak zlodiak 25 июля 2013 в 23:53

большое спасибо. но объясните пожалуйста ещё откуда взялся ['search_block_form']. его тоже просто так придумали разработчики(как['submit'])? как он связан с этим конкретным полем?

опять же, если текстовых полей input несколько, то как можно узнать их индексы?

Аватар пользователя Chyvakoff Chyvakoff 26 июля 2013 в 9:04

http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.ht...

"zlodiak" wrote:
опять же, если текстовых полей input несколько, то как можно узнать их индексы?

Ну ты когда создаешь элементы формы(элементы массива $form) - его ключи и есть индексы.
Если узнать ключи элементов существующей формы - print_r, ты правильно делал. Можешь в фаербаге посмотреть атрибуты name и id элементов формы, по ним поймешь какие ключи соответствуют им в массиве $form.