Как мне удалить ненужные файлы, сгенерированные Zend Form

#zend-framework #zend-form

#zend-framework #zend-form

Вопрос:

После того, как я добавил декораторы в свою форму Zend, в ней появилось несколько нежелательных amp;nbsp;

нравится ->

  <dt id="step1-label">amp;nbsp;</dt>
  

Моя проблема в том, что я добавил свою форму после div в моем phtml. Между div и form есть пробел, я не могу удалить этот пробел, не могли бы вы мне, пожалуйста, помочь?

Моя полная форма

 class Admin_Form_RatesForm extends Zend_Form
{
    /**
     * Form's set values and multy options
     * @var array
     */
    private $options;

    /**
     * Initailise options arrays
     * @param $options
     */
    public function __construct($options = null)
    {
        if(isset($options)){
            $this->options = $options;

        }
        parent::__construct();
        $this->setMethod('post');       
    }


    /**
     * Set form elements
     * Add elements to display groups  
     */
    public function init(){

        //intalise to local varible
        $options = $this->options;

        //show room type selector
        $roomTypes = new Zend_Form_Element_Select('room_types');
        $roomTypes->setLabel('Room Type :');
        $roomTypes->addMultiOption('All', 'ALL');
        $roomTypes->addMultiOptions($options['room_types']);
        $roomTypes->setDecorators(
                                    array(
                                          'ViewHelper',
                                          'Description',
                                          'Errors',
                                           array('Label',
                                                    array(
                                                          'class' => 'label' , 'class' => 'margin-bot20'
                                                         )
                                            ),
                                          array('HtmlTag',
                                                        array('tag' => 'div', 'class' => 'floatleft margin-bot20')
                                             ),
                                          array(
                                               array('td' => 'HtmlTag'), array('tag' => 'td')
                                              )
                                         )
                                );

        //show offers selector
        $offers = new Zend_Form_Element_Select('offers');
        $offers->setLabel('Offer :');
        $offers->addMultiOptions($options['offers']);
        $offers->setDecorators(
                                array(
                                      'ViewHelper',
                                      'Description',
                                      'Errors',
                                       array('Label',
                                                array(
                                                      'class' => 'label' , 'class' => 'margin-bot20'
                                                     )
                                        ),
                                      array('HtmlTag',
                                                    array('tag' => 'div', 'class' => 'floatleft margin-bot20')
                                         ),
                                      array(
                                           array('td' => 'HtmlTag'), array('tag' => 'td')
                                          )
                                     )
                            );

        //insert button
        $insert = new Zend_Form_Element_Button('insert');
        $insert->setLabel('Insert Rates');
        $insert->setDecorators(
                            array(
                                  'ViewHelper',
                                  'Description',
                                  'Errors',
                                   array('Label',
                                            array(
                                                  'class' => 'label' , 'class' => 'margin-bot20'
                                                 )
                                    ),
                                  array('HtmlTag',
                                                array('tag' => 'div', 'class' => 'floatright margin-bot20')
                                     ),
                                  array(
                                       array('td' => 'HtmlTag'), array('tag' => 'td')
                                      )
                                 )
                            );

        //make date picker using js
        $fromDate = new Zend_Form_Element_Text('from_date');
        $fromDate->setLabel("Valid from : ");

        //make date picker using js
        $toDate = new Zend_Form_Element_Text('to_date');
        $toDate->setLabel('to :');

        //make radio buttons 
        //show display groups according to click redio button
        $type = new Zend_Form_Element_Radio('type');
        $type->setLabel('Type');
        $type->addMultiOption('per', 'Percentage');
        $type->addMultiOption('fix','Fixed');

        //use for set presetage rate
        $percent = new Zend_Form_Element_Text('percent');
        $percent->setLabel($options['precent_lable']);
        $percent->class = 'number';

        //make grid form for set fixed values 
        $fixed = new Zend_Form_Element_Hidden('fixed');
        $fixed->setDecorators(
            array(
                array(
                    'ViewScript',   
                    array(
                        'viewScript' => 'customviewscripts/_fixedgrid.phtml',
                        'meal_plans' => $options['meal_plans'],
                        'room_types' => $options['room_types']
                    )
                )
            )
        );      

        //submit button
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Submit For Approval');
        $submit->class="submit";

        //show default form
        $this->addElements(
            array(
                $roomTypes, 
                $offers, 
                $insert
            )
        );

        $step1 = $this->addDisplayGroup(
            array(
                'room_types', 
                'offers', 
                'insert'
            ), 'step1',
            array('dtLabel' => '')          
        );

        //show after click insert button
        $this->addElements(
            array(
                $fromDate, 
                $toDate, 
                $type, 
                $percent, 
                $fixed, 
                $submit
            )
        );      
        $step2 = $this->addDisplayGroup(
            array(
                'from_date', 
                'to_date', 
                'type', 
                'percent',
                'fixed',
                'submit'
            ), 'step2',
            array('dtLabel' => '')          
        );

    }

}
  

Комментарии:

1. Обычно лучше не переопределять конструктор формы. Метод по умолчанию post в любом случае

2. я думаю, что пробелы генерируются при добавлении групп отображения

3. При редактировании вопроса, пожалуйста, обязательно выделите весь блок кода и нажмите CTRL K или значок фигурных скобок {} , чтобы обернуть его в блоки кода

Ответ №1:

Это связано с декоратором DtDdWrapper в вашей группе отображения, в частности, с этим кодом

 $dtLabel = $this->getOption('dtLabel');
if( null === $dtLabel ) {
    dtLabel = 'amp;#160;';
}
  

Попробуйте установить этот параметр в вашей группе отображения, например

 $step1 = $this->addDisplayGroup(
        array(
            'room_types', 
            'offers', 
            'insert'
        ), 'step1',
        array('dtLabel' => '')
    );
  

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

Комментарии:

1. я добавил массив (‘dtLabel’ => «) в группу disply, но это не сработало.

2. @tittletipz Не могли бы вы отредактировать свой вопрос с помощью обновленного кода?