3

Zend_Form_Decorator_Label の使用について質問があります。フォーム要素が必要なときに次の結果を得るには、Label-text * を取得する必要があります。最も再利用可能な方法でそれを実現するにはどうすればよいでしょうか?

新しいデコレータを作成するためですか、それとも zend_View_helper_FormLabel をオーバーライドするためですか? 多分それを達成する他の方法がありますか?

どんな助けでも感謝します。

4

3 に答える 3

4

デコレーターを作成するときに、次のオプションのいずれかを追加できます。

  • optionalPrefix : 要素がオプションの場合に使用するラベルのプレフィックス
  • optionalSuffix : 要素がオプションの場合に使用するラベルの接尾辞
  • requiredPrefix : 要素が必須の場合に使用するラベルのプレフィックス
  • requiredSuffix : 要素が必須の場合に使用するラベルの接尾辞

コード例:

$elementDecorators = array(
    'ViewHelper',
    array('Label', array('requiredSuffix' => ' *')),
);

$userName = new Zend_Form_Element_Text('userName');
$userName->setDecorators($elementDecorators);
$userName->setLabel('User Name');

または、既存のデコレーターにサフィックス/プレフィックスを明示的に設定することもできます。

$userName->getDecorator('Label')->setReqSuffix(' *');
$userName->getDecorator('Label')->setOptSuffix('(Optional) ');
于 2012-08-29T11:50:39.960 に答える
3

Label デコレーターは、必要に応じて指定されたフォーム入力要素に添付されrequiredた要素に CSS クラスを追加するため、CSSセレクターと宣言<label>を使用して記号 (アスタリスクなど) を追加することができました。:aftercontent()

label.required:after {
    content: "*";
}

しかし、適切な間隔を設定したり、アスタリスクを太字や希望の色でレンダリングしたりするのは難しい場合があることがわかりました。その結果、CSS を使用してラベル自体を太字でレンダリングするように頼ることがよくあります。または別の色で、フォームの上部または下部に凡例(「太字/赤のフィールドが必要です」など)を追加します(多くの場合、独自のカスタム凡例デコレーターを作成しますが、ビュースクリプト自体に追加することもあります)。

于 2012-08-29T08:08:23.207 に答える
3
class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }

そして、使用する要素について

 $elem->setDecorators(FormDecorators::$simpleElementDecorators)

ラベル配列に「requiredPrefix」パラメータで必要なプレフィックスを追加しました。

array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
于 2012-08-29T18:12:32.400 に答える