Zend Framework Zend_Form Décorateurs: <span> à l'Intérieur d'Élément de Bouton?
J'ai un élément de bouton que j'ai créé comme suit:
$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('My Button');
$submit->setDecorators(array(
'ViewHelper',
array('HtmlTag', array('tag' => 'li'))
));
$submit->setAttrib('type', 'submit');
Cela génère le code HTML suivant:
<li>
<label for="submit" class="optional">My Button</label>
<button name="submit" id="submit" type="submit">My Button</button>
</li>
J'aimerais conclure l'intérieur du bouton avec un <span>, comme ceci:
<button...><span>My Button</span></button>
Quelle est la meilleure façon de le faire à l'aide de Zend_Form?
Vous devez vous connecter pour publier un commentaire.
J'ai essayé et, en fin de compte, a échoué à atteindre moi-même en utilisant la même approche. Il semblerait que la meilleure façon de le faire serait de faire:
Toutefois, la durée sera échappé. Il est parfaitement possible de désactiver l'échappement d'un label décorateur, cependant, l'ajout d'une étiquette décorateur rend la sortie de manière incorrecte, par exemple:
... rend:
...qui, en plus d'être sémantiquement incorrect (facilement réparable), est encore de s'échapper de la durée de balises à l'intérieur de l'élément.
Alors que faites-vous?
Eh bien, je pense que la meilleure approche (ce qui est mon méta-conseils quand il s'agit d'un contrôle serré de la Zend_Form rendu) est d'utiliser la ViewScript décorateur.
...puis dans _submitButton.phtml définir les éléments suivants:
La _submitButton.phtml fichier doit être dans un script de vue de répertoire (vous pourriez être mieux ajout d'un spécifique pour votre forme décorateurs à l'aide de
$view->addScriptPath('/path/to/my/form/decorators')
).Cela devrait rendre compte de ce que vous cherchez. J'ai seulement commencé à regarder la ViewScript décorateur en raison de la flexibilité des questions je suis en train de vivre dans le travail. Vous remarquerez que mon script n'est pas souple, et n'est certainement pas à la BNF, compte tenu de tous les membres qui peut être rempli sur l'élément objet. Cela dit, c'est un début et résoudre votre problème.
Vous pourriez faire ceci:
Juste d'échapper à l'étiquette fonctionne très bien. Il ne se casse quand quelqu'un commence à jouer avec le décorateur de label (qui se produit généralement lors de la personnalisation d'étiquettes)
Vous pouvez utiliser le Zend_Form fonction setElementDecorators() et d'exclure certains éléments de style. Lire Exemple #3 définition des Décorateurs pour Certains Éléments dans Zend_Form Manuel (y compris la Note!) pour plus de détails.
Pour ceux qui sont encore confus, voici un exemple de code de style de la forme comme une table, et disposent d'un bouton qui est enfermé dans la double durée:
où $form est un Zend_Form élément. Espérons que cette aide!
Je voudrais ajouter une classe pour le bouton, puis de définir cette classe dans votre CSS pour le faire agir comme un span. Je suis sûr que vous êtes désireux de faire plus que de simplement coller dans un span.
Suffit d'en ajouter un setAttrib() appel:
Puis dans votre CSS:
J'ai ajouté display:inline car le bouton d'agir comme un span. Cela devrait commencer au moins. Bien sûr, vous pourriez base de votre CSS sur l'id du bouton, il suffit d'utiliser display:inline pour obtenir la durée de comportement.
Essayer avec