public function render($sContent) { //permet de savoir s'il y a une erreur sur le formulaire en globalité $bFormHasErreur = $this->getElement()->getView()->errors; //permet de savoir si le champ traité à une erreur ou pas $bChampHasErreur = $this->getElement()->hasErrors(); /* * Si le formulaire comporte une erreur, il faut alors décorer tous les champs avec : * - soit une coche ok si le champ traité n'a pas d'erreur * - soit une coche croix si le champ a bien une erreur */ if ($bFormHasErreur) { $oChampVoid = new Symbol_Void(); //Span englobante pour la position de la croix $oSpanErrorOk = new Symbol_Span('', CSS_POS_RELATIVE); //on ajoute le contenu du champ $oSpanErrorOk->linkSymbol(new Symbol_Void($sContent)); /* * Deux comportements sont possibles : * -> il y un erreur su ce champ, auquel cas on décore avec un croix rouge et un input rouge * -> il n'y à pas d'erreur sur ce champ mais sur un autre champ, on décore alors avec une check bleue */ if ($bChampHasErreur) { //Classe pour la croix $sClass = CSS_INPUT_CHECK_ERROR; //on ajoute les erreurs (le texte des erreurs) } else { //Classe pour le coche $sClass = CSS_INPUT_CHECK_OK; } //ajout de la croix ou de la coche, c'est selon $oSpanErrorOk->linkSymbol(new Symbol_Span('', trim($sClass))); $oChampVoid->linkSymbol($oSpanErrorOk); //on retourne le champ return $oChampVoid->render(); } else { //si pas d'erreur, on touche à rien return $sContent; } }
/** * Décorateur spécifique au formulaire ne comportant que des input devant etre aligné. * Par exemple dans: * @see Form_TypeAppareil * @author francois.espinet * @see Projet_Form_Decorator_Abstract::render_element() */ protected function render_element() { $oForm = new Symbol_Void(); //objet formulaire $this->aoForm = $this->getElement(); //on récupere les éléments //parcours des éléments du formulaire (les champs) foreach ($this->aoForm as $oItem) { /* * Symbole pour gérer l'ensemble du champ * Eventuellement certains éléments peuvent être simplement juxtaposés sans être contenus dans un autre symbole * D'où le symbole void par défault */ $oChamp = new Symbol_Void(); $bChampHasError = $oItem->hasErrors(); //on ecarte submit pour les erreurs if ($oItem instanceof Zend_Form_Element_Text) { if ($bChampHasError) { // on ajoute une classe pour la décoration contour rouge $oItem->setAttrib('class', CSS_INPUT_ERROR . $oItem->getAttrib('class')); } $oChamp = new Symbol_Span('', 'JoinedInput'); //on genere les données $sChamp = $this->buildLabelAndInput($oItem); $oChamp->setData($sChamp); } elseif ($oItem instanceof Zend_Form_Element_Submit) { $oChamp = new Symbol_Void($this->buildSubmit($oItem)); } elseif ($oItem instanceof Zend_Form_Element_Hidden) { $oChamp = new Symbol_Void($this->buildInput($oItem)); } //on attache l'élement au formulaire $oForm->linkSymbol($oChamp); } return $oForm->render(); //on renvoie la chaine }
/** * @brief Ajout la decoration du champ s'il à une erreur ou si un de ses camarades en à une * * @see Projet_Form_Decorator_Generic * * @author francoisespinet * @version 9 mars 2012 - 11:14:41 * @param unknown_type $sChamp * @param Html_Symbol $oChamp * @param Zend_Form_Element $oItem * @param bool $bChampHasError */ protected function formAddErreurChamp($sChamp, $bChampHasError) { $oChampVoid = new Symbol_Void(); //Span englobante pour la position de la croix $oSpanErrorOk = new Symbol_Span('', CSS_POS_RELATIVE); //on ajoute le contenu du champ $oSpanErrorOk->linkSymbol(new Symbol_Void($sChamp)); $sClass = ''; /* * Deux comportements sont possibles : * -> il y un erreur su ce champ, auquel cas on décore avec un croix rouge et un input rouge * -> il n'y à pas d'erreur sur ce champ mais sur un autre champ, on décore alors avec une check bleue */ if ($bChampHasError) { //Classe pour la croix $sClass = CSS_INPUT_CHECK_ERROR; //on ajoute les erreurs (le texte des erreurs) } else { //Classe pour le coche $sClass = CSS_INPUT_CHECK_OK; } //ajout de la croix ou de la coche, c'est selon $oSpanErrorOk->linkSymbol(new Symbol_Span('', trim($sClass))); $oChampVoid->linkSymbol($oSpanErrorOk); return $oChampVoid->render(); }