Добавление DIV-оболочки в пользовательскую форму поиска в Drupal7 — она добавлена, но не отображается

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

У меня возникли проблемы при попытке изменить способ отображения моей формы. Тем не менее, я попытался сохранить ее такой же простой, как в найденном мной руководстве, но даже несмотря на то, что мой элемент $form в template.php функция hrfrontpage_form_alter имеет добавленную оболочку div — она не будет ее отображать. Почему?

В моем модуле:

     function rsearch_block_info()
    {
            $blocks['rsearch_form'] = array(
                    'info' => t('Search Recruiters Front'),
            );

            return $blocks;
    }

    function rsearch_block_view($delta = '')
    {
            $block = array();

            switch($delta)  {
                    case 'rsearch_form' :
                            $block['content'] = drupal_get_form('rsearch_front');
                            break;
            }

            return $block;
    }
  

В моем template.php:

 function hrfrontpage_form_alter(amp;$form, amp;$form_state, $form_id) {
        switch($form_id) {
                case 'rsearch_front' :
                        $form['divstart'] = array(
                                '#value' => '<div style="background-color:green;">',
                                '#weight' => -5
                        );
                        $form['divend'] = array(
                                '#value' => '</div>',
                                '#weight' => 5
                        );
                        break;
        }
}
  

Ответ №1:

Хорошо, прежде всего, вы не можете открыть div в одном элементе формы, а затем закрыть его в другом, потому что каждый элемент формы по умолчанию заключен в div.

Что вам нужно сделать, так это использовать элементы '#prefix' and '#suffix' поля.

Если вы пытаетесь поместить оболочку div вокруг нескольких полей, вам нужно поместить эти поля в набор полей и использовать элементы префикса и суффикса в наборе полей.

Простой случай:

  $form['my_field'] = array(
    '#type' => 'textfield',
    '#title' => 'search',
    '#prefix' => '<div style="background-color:green;">',
    '#suffix' => '</div>',
 );
  

Сложный случай:

  unset($form['my_element']);

 $form['my_wrapper'] = array(
    '#type' => 'fieldset',
    '#prefix' => '<div style="background-color:green;">',
    '#suffix' => '</div>',
 );
 $form['my_wrapper']['my_field'] = array(  //Make sure your fields are children of the wrapper element!
    '#type' => 'textfield',
    '#title' => 'search',
 );
 $form['my_wrapper']['my_submit'] = array(  //Make sure your fields are children of the wrapper element!
    '#type' => 'submit',
    '#value' => 'submit',
 );
  

Ознакомьтесь с API формы:

https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7