#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 Не могли бы вы отредактировать свой вопрос с помощью обновленного кода?