Кнопка Submit, выпадающая из набора полей при использовании displayGroup в Zend Framework 1.10.8 - PullRequest
0 голосов
/ 27 сентября 2010

Я перепробовал все комбинации, которые могу придумать, но эта форма:

class Form_Login Extends Zend_Form{

    public function init(){
        $this->setMethod('post');


        $email = new Zend_Form_Element_Text('email');
        $emailValidator = new Zend_Validate_EmailAddress();
        $emailValidator->setMessage('Please use a valid email address');
        $email->addValidator($emailValidator)
                ->setRequired(TRUE)
                ->setLabel("Email Address")
                ->setAttrib('size', '35');

        $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Password')
                ->setAttrib('size', '35')
                ->setRequired(true);

        $submit = new Zend_Form_Element_Submit('login');
        $submit->setLabel('Login');


        $this->addElements(array(
            $email,
            $password
            )
        );



        $this->addDisplayGroup(array(
                    'email',
                    'password'

        ),'loginGroup',array('legend' => 'Login'));


        $loginGroup = $this->getDisplayGroup('loginGroup');


        $this->setElementDecorators(array(
            'ViewHelper',
            array('Label', array('separator' => '', 'requiredPrefix' => '* ')),
            array('Errors'),
            array('HtmlTag', array('tag' => 'p', 'class' => 'form-element')),
        ));


        $loginGroup->setDecorators(
            array(
                'FormElements',
                 array('HtmlTag',array('tag'=>'div','openOnly'=>true)),
                 'Fieldset'
                )
        );


        $this->addElements(array($submit));

        //buttons do not need labels
        $submit->setDecorators(array(
            array('ViewHelper'),
            array('HtmlTag', array('tag' => 'p', 'class' => 'submit-button'))
        ));

    }
}

Прекрасно отображается в Google Chrome, как на картинке ниже:

<fieldset id="fieldset-loginGroup"><legend>Login</legend>
<div>
<p class="form-element"><label for="email" class="required">* Email Address</label>
<input type="text" name="email" id="email" value="" size="35"></p>
<p class="form-element"><label for="password" class="required">* Password</label>
<input type="password" name="password" id="password" value="" size="35"></p>
<p class="submit-button">
<input type="submit" name="login" id="login" value="Login"></p></div>
</fieldset>

А в Firefox он выпадает из тегов fieldset и выглядит так:

<dl class="zend_form">
<fieldset id="fieldset-loginGroup"><legend>Login</legend>
<div>
<p class="form-element"><label for="email" class="required">* Email Address</label>
<input name="email" id="email" value="" size="35" type="text"></p>
<p class="form-element"><label for="password" class="required">* Password</label>
<input name="password" id="password" value="" size="35" type="password"></p></div>
</fieldset>
<p class="submit-button">
<input name="login" id="login" value="Login" type="submit"></p></dl>

Я знаю, что браузер не должен иметь большого значения, так как теги генерируются на стороне сервера. Однако я не могу заставить кнопку отправки попасть в поле, установленное в Firefox. Я не пробовал ни один другой браузер, кроме этих двух, поэтому я не уверен, как он будет выглядеть на них. Любая помощь ...?

1 Ответ

0 голосов
/ 27 сентября 2010

обойдя это я попробовал:

class Form_Login Extends Zend_Form{

public function init(){
    $this->setMethod('post');

    $email = new Zend_Form_Element_Text('email');
    $emailValidator = new Zend_Validate_EmailAddress();
    $emailValidator->setMessage('Please use a valid email address');
    $email->addValidator($emailValidator)
            ->setRequired(TRUE)
            ->setLabel("Email Address")
            ->setAttrib('size', '35');

    $password = new Zend_Form_Element_Password('password');
    $password->setLabel('Password')
            ->setAttrib('size', '35')
            ->setRequired(true);

    $submit = new Zend_Form_Element_Submit('login');
    $submit->setLabel('Login');


    $this->addElements(array(
        $email,
        $password,
        $submit
        )
    );


    $this->setLegend('Login');
    $this->setElementDecorators(array(
        'ViewHelper',
        array('Label', array('separator' => '', 'requiredPrefix' => '* ')),
        array('Errors'),
        array('HtmlTag', array('tag' => 'p', 'class' => 'form-element')),
    ));

    $this->setDecorators(array(
        'FormElements',
        'Fieldset', 
        'Form'
        ));

    //buttons do not need labels
    $submit->setDecorators(array(
        array('ViewHelper'),
        array('HtmlTag', array('tag' => 'p', 'class' => 'submit-button'))
    ));

}

}

А теперь все отображается нормально. Разница:

$this->setDecorators(array(
        'FormElements',
        'Fieldset', 
        'Form'
        ));

, а также установка легенды с помощью:

$this->setLegend('Login');
...