0

実際には、zend フレームワーク 2 がフォーム要素の HTML を生成する方法を理解できません。例えば、

$others = new Element\MultiCheckbox('others');
$others->setLabel('Others')
        ->setAttribute('name', 'others');
$others->setValueOptions(array(
    '1' => 'Contacts',
    '2' => 'Who viewd my profile'
));

このコードは生成します -

<label><input type="checkbox" value="1" name="others[]">Contacts</label>
<label><input type="checkbox" value="2" name="others[]">Who viewd my profile</label>

しかし、次のようにHTMLを作成する必要があります-

<input type="checkbox" value="1" name="others[]"><label>Contacts</label>
<input type="checkbox" value="2" name="others[]"><label>Who viewd my profile</label>

では、生成された HTML を変更したい場合、どうすればよいのでしょうか?

4

1 に答える 1

2

この種の機能についてはZend\Form\View\Helper\MultiCheckbox、その機能を上書きするか、より正確にする必要がありますrenderOptions()

次に、目的の結果を得るために自分自身を呼び出す必要があるViewHelperManagerことを知らせます。$this->formMultiCheckbox()ViewHelper

ただし、あなたがやろうとしていることは非常に落胆していることに言及したいと思います。ユーザーは絶対にラベルをクリックできる必要があります。マークアップを変更する場合は、少なくとも次のようにします。

<input type="checkbox" value="1" name="others[]" id="cbOthers1"><label for="cbOthers2">Foo</label>
<input type="checkbox" value="2" name="others[]" id="cbOthers1"><label for="cbOthers2">Bar</label>

アプリケーションの使いやすさを忘れないでください。もう 1 つのヒント: ラベル内に CB を配置すると、ブラウザーのスタイリングのサポートに関する限り、より多くのユーザーに自動的に対応できるようになります。繰り返しになりますが、すべてあなた次第です。ViewHelperとにかく自分で自分で書く必要があります。

PS:非常に簡単です。これらの行を次のように上書きするViewHelperだけです。

  switch ($labelPosition) {
     case self::LABEL_PREPEND:
        $template  = $labelOpen . '%s'. $labelClose .'%s';
        $markup    = sprintf($template, $label, $input);
     break;
     case self::LABEL_APPEND:
     default:
        $template  = '%s' . $labelOpen . '%s'. $labelClose;
        $markup    = sprintf($template, $input, $label);
      break;
 }
于 2013-06-03T05:44:27.140 に答える