3

Google をクロールするのに何時間も費やしました。チェックボックスのリストに jQuery ボタンを実装する必要があります。問題は、フォーム要素を出力するときにコードが INPUT を挿入し、ラベルの外側にそれが必要になることです。出力方法は次のとおりです。

<label for="checkbox-1"><input type="checkbox" name="checkbox[]" id="checkbox-1" value="1" checked="checked">3DCrafter</label>

デコレータを使用したフォーム要素は次のとおりです。

$checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
        $checkbox->setDecorators(array(
           array('ViewHelper'),
           array('Errors', array('tag' => 'div', 'class' => 'error')),
           array('Label', array('tag' => 'span')),
           array('HtmlTag', array('tag' => 'div', 'class' => 'label')),
        ));

フォーム要素を出力する方法は次のとおりです。

<?php echo $this->formSoftware->checkbox;?>

誰でもこれを行う方法について何か考えがありますか? または、Zend のチェックボックスで jQuery ボタンを使用しますか?

4

4 に答える 4

1

1 つの (あまり満足のいくものではない) 解決策は、jQuery を使用して DOM を期待どおりにセットアップすることです。

//HTML
//the checkboxes are children of their associated label
<div id="container">
    <label for="cb1"><input type="checkbox" id="cb1" name="cb1" />Checkbox 1</label>
    <label for="cb2"><input type="checkbox" id="cb2" name="cb2" checked="checked" />Checkbox 2</label>
    <label for="cb3"><input type="checkbox" id="cb3" name="cb3" />Checkbox 3</label>
</div>

//javascript
//for each label : find its target input among its descendants,
//and place it before the label
$('#container').find('label').each(function () {
    var id = $(this).attr('for');
    $(this).find('#' + id).insertBefore(this);
});

$('#container').buttonset();

フィドル

于 2013-09-20T15:46:43.347 に答える
0

ZF1 を使用している場合は、カスタム Decorator クラスを作成し、フォームextends Zend_Form_Decorator_Abstractに追加してカスタム Decorators へのパスを登録することをお勧めaddElementPrefixPathします。

カスタム デコレータには、必要なrender()マークアップを出力するメソッドが必要です。

それがZF2でどのように機能するかわかりません。

于 2013-09-17T13:17:24.157 に答える
0

デフォルトでは、Label デコレータは提供されたコンテンツの先頭に追加されます。これは、次の「配置」オプションのいずれかを指定することで制御できます。

PREPEND: コンテンツの前にラベルをレンダリングします。

APPEND: コンテンツの後にラベルをレンダリングします。

IMPLICIT_PREPEND: label タグ内の要素をレンダリングし、コンテンツの前にラベル テキストを配置します。

IMPLICIT_APPEND: label タグ内の要素をレンダリングし、コンテンツの後にラベル テキストを配置します。

したがって、あなたの場合、PREPENDが必要だと思います:

$checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
        $checkbox->setDecorators(array(
           array('ViewHelper'),
           array('Errors', array('tag' => 'div', 'class' => 'error')),
           array('Label', array('tag' => 'span', 'placement' => 'PREPEND')),
           array('HtmlTag', array('tag' => 'div', 'class' => 'label')),
        ));
于 2013-09-19T14:03:29.347 に答える
0

ここで getLabel() メソッドは、ラベルを印刷するのに役立ちます。

<?php echo $this->formSoftware->checkbox->getLabel();?>
<?php echo $this->formSoftware->checkbox;?>
于 2013-09-24T06:59:38.433 に答える