Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Salut,
je ne veux pas faire le râleur (trop tard ) mais quand même, je croyais que dl, dd et dt c'étaient des balises pour les glossaire. Or les formulaires ne sont pas des glossaires ! Pourquoi ce choix de balise par défaut ? C'est un scandale ! Que fait la police ?!
Bon, plus sérieusement, est-il possible de le changer pour tout le projet comme on peut assigner un defaultTranslator ou dois-je créer ma classe de form en changeant les decorators comme décrit ici (http://www.z-f.fr/forum/viewtopic.php?id=777) ?
Merci bien
Hors ligne
Hello,
Si tu savais le nombre de mails échangés sur la liste des développeurs du ZF sur le sujet !
Tu peux changer les décorateurs à chaque fois que tu crée un Zend_Form_Element_*.
J'ai étendu tous les Zend_Form_Element_* en modifiant la méthode loadDefaultDecorators() :
// exemple class Mp_Form_Element_Text extends Zend_Form_Element_Text { public function __construct ($name, $options = null) { parent::__construct($name, $options); $this->setAttrib('class', 'text'); } /** * Load default decorators * @return void */ public function loadDefaultDecorators () { if ($this->loadDefaultDecoratorsIsDisabled()) { return; } $decorators = $this->getDecorators(); if (empty($decorators)) { $this->addDecorator('ViewHelper') ->addDecorator('Errors') ->addDecorator('Label', array('class' => 'label')) ->addDecorator('HtmlTag', array('tag' => 'div', 'class' => 'element')); } } }
J'ai aussi étendu Zend_Form pour qu'il charge mes éléments avant ceux du ZF :
class Mp_Form extends Zend_Form { public function __construct ($options = null) { require_once 'Zend/Form/Element.php'; $this->setAttrib('class','non_print'); parent::__construct($options); if ($this->db === null) { $this->db = self::getDefaultAdapter(); } $this->addElementPrefixPath('Mp_Validate', '../library/Mp/Validate', Zend_Form_Element::VALIDATE); $this->addPrefixPath('Mp_Form_Element', '../library/Mp/Form/Element/', Zend_Form::ELEMENT); $this->setDefaultDisplayGroupClass('Mp_Form_DisplayGroup'); $this->clearDecorators(); $this->addDecorator('FormElements')->addDecorator('Fieldset')->addDecorator('Form'); } }
A+
Hors ligne
Salut,
oui j'imagine, c'est le genre de sujet bien polémique
Merci pour ta réponse, je vais regarder ça de plus près
Hors ligne
Encore moi,
En fait dans ton cas, Mp_Form est-il censé instancier ton formulaire lorsque tu fais addElement de ce type
$form->addElement('text', 'myInput');
ou passes tu toujours par un new Mp_Form_Element_Text(); ?
chez moi le addElement fonctionne uniquement si je place la ligne addPrefixPath avant d'appeler le constructeur de la super calsse
ce qui me donne qqc comme ça
public function __construct ($options = null) { require_once 'Zend/Form/Element.php'; $this->addPrefixPath('Lap_Form_Element', '../library/Lap/Form/Element/', Zend_Form::ELEMENT); parent::__construct($options); }
J'avoue ne pas être allé fouiller plus loin pour savoir le pourquoi et le comment...
Merci
lap
Hors ligne
Hello,
En fait le addPrefixPath ajoute un dossier dans lequel rechercher des Zend_Form::ELEMENT, ayant un préfixe Lap_Form_Element
Donc si tu as défini une classe Lap_Form_Element_Text :
$form = new Mp_Form; // <-- pas un Zend_Form bien évidemment $form->addElement('text', 'myInput');
va la charger avant un Zend_Form_Element_Text
Par contre si tu ne défini pas de Lap_Form_Element_Submit (par exemple)
$form->addElement('submit', 'monSubmit');
va charger un Zend_Form_Element_Submit
OK ?
A+
Hors ligne
Or les formulaires ne sont pas des glossaires ! Pourquoi ce choix de balise par défaut ? C'est un scandale ! Que fait la police ?!
Perso je me suis dis "s'il ont choisi ça, c'est que ça doi être correcte"
Alors je m'en contre tape, je les change si vraiment j'en ai besoin mais en générél, je passe un simple coup de CSS et basta
PS: et puis dans le fond c'est pas si mal utilisé quand on regarde les spéc de ces éléments HTML: http://www.w3.org/TR/2002/WD-xhtml2-200 … -list.html
Hors ligne
rha, c'est sûr que c'est pas moi qui vais donner des leçons , je ne peux pas dire que je suis le développeur le plus rigoureux... hum
Cela étant, comme il est dit dans la doc, il s'agit de liste de définitions (definition list, definition (list) term, definition (list) definition) et un champ n'est pas une définition à son label.
C'est tout con, mais par exemple, en terme d'accessibilité, ça peut induire en erreur (ou plutôt agacer l'utilisateur ^^)
Après, c'est je l'avoue, pinailler sur des détails, mais c'est aussi comme ça qu'on avance !
a+
Hors ligne
Pages: 1