Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour...
Comment faire pour avoir des décorateurs personnalisé...
j'ai fait un decorateur Brts_Form_Decorateur_Indentator qui etend Zend_Form_Decorator_Abstract (sans inclusion de Zend/Form/Decorator/Abstract.php)
J'ai ma lib Zend et ma lib Brts perso dans un dossier Zend/ et Brts/ déclarer à l'include path...
J'ai mis mon décorator perso dans Brts/Form/Decorator/Indentator.php comme fait pour Zend...
J'ai donc plus qu'a voir pour l'inclusion depuis mon form...
voila le décorateur Form:
class alternatestylesheetForm extends Zend_Form { public function __construct($options = null) { // on appel le constucteur de Zend_Form parent::__construct($options); // on charge les decorateurs, helpers, et elements personnaliser // $loader = new Zend_Loader_PluginLoader(); // $loader->addPrefixPath('Brts_Decorateur', 'Brts/Form/decorator'); // on détermine les paramètres du formulaire $this->setAction('/'.self::$userNamespace->langue.'/'.self::$userNamespace->module.'/alternatestylesheet/submit') ->setName('chooseAlternatStylesheet') ->setMethod('post') ->setEnctype(Zend_Form::ENCTYPE_URLENCODED) ->addElementPrefixPath('Brts_Form_Decorator', 'Brts/Form/Decorator/', 'decorator'); // on definit le tableau MultiOption pour le <select> stylesheet $arrayStyleSheetMultiOptions = array('default' => 'Style par default', 'choix1' => '1', 'choix2' => '2'); $stylesheet = new Zend_Form_Element_Select('stylesheet'); $stylesheet->setLabel('stylesheet') ->setAttribs(array( 'class' => 'court', 'size' => '1', 'tabindex' => '1' )) ->removeDecorator('label') ->removeDecorator('HtmlTag') // ->addPrefixPath('Brts_Decorator', // 'Brts/Form/decorator', // 'decorator') ->setMultiOptions($arrayStyleSheetMultiOptions) ->setRequired(true); $btn_envoi = new Zend_Form_Element_Submit('envoi'); $btn_envoi->setLabel('Envoyer') ->removeDecorator('DtDdWrapper') // ->addPrefixPath('Brts_Decorator', // 'Brts/Form/decorator', // 'decorator') ->setAttribs(array( 'class' => 'bouton_form', 'tabindex' => '2', 'title' => 'Appliquer le style choisi' )); // on ajoute tout les éléments au formulaire $this->addElements( array( $stylesheet, $btn_envoi )); // on réinisialise les décorateurs $this->clearDecorators(); // definition des décorateurs communs au formulaire via "decorateur de vue manuel" $this->setDecorators(array( array('ViewScript', array('script' => 'show.phtml')) )); $stylesheet->setDecorators(array('Indentator')); $btn_envoi->setDecorators(array('Indentator')); } }
j'ai tester ceci dans le form:
// on charge les décorateurs, helpers, et éléments personnaliser $loader = new Zend_Loader_PluginLoader(); $loader->addPrefixPath('Brts_Decorateur', 'Brts/Form/decorator');
Marche pas !!!
J'ai tester sur le form (this):
$this->addElementPrefixPath('Brts_Form_Decorator', 'Brts/Form/Decorator/', 'decorator');
Marche pas !!!
J'ai essayer sur l'element:
$element->addPrefixPath('Brts_Decorator', 'Brts/Form/Decorator/', 'decorator');
Marche pas !
J'appel bien sur via :
$element->setDecorators(array('Indentator'));
voici l'erreur:
Warning: Plugin by name 'Indentator' was not found in the registry; used paths: Brts_Form_Decorator_: Brts/Form/Decorator/ Zend_Form_Decorator_: Zend/Form/Decorator/ in C:\wamp\www\0_toolbox\tools\Zend\Form\Element.php on line 1943
une idée ?
Dernière modification par BeRoots (21-01-2010 03:27:21)
Hors ligne
Une erreur de chemin ... je ferme le sujet
Dernière modification par BeRoots (11-12-2009 04:36:19)
Hors ligne
Voila... Toujours sous Zend_Form avec un problème de compréhension...
Voila le formulaire version corrigé:
class alternatestylesheetForm extends Zend_Form { public function __construct($options = null) { // on appel le constucteur de Zend_Form parent::__construct($options); // on détermine les paramètres du formulaire $this->setAction('/'.self::$userNamespace->langue.'/'.self::$userNamespace->module.'/alternatestylesheet/submit') ->setName('chooseAlternatStylesheet') ->setMethod('post') ->setEnctype(Zend_Form::ENCTYPE_URLENCODED) ->addElementPrefixPath('Brts_Form_Decorator', 'Brts/Form/Decorator/', 'decorator'); // on definit le tableau MultiOptions pour le <select> stylesheet $arrayStyleSheetMultiOptions = array('default' => 'Style par default', 'choix1' => '1', 'choix2' => '2'); $stylesheet = new Zend_Form_Element_Select('stylesheet'); $stylesheet->setLabel('stylesheet') ->setAttribs(array( 'class' => 'court', 'size' => '1', 'tabindex' => '1' )) ->removeDecorator('label') ->removeDecorator('HtmlTag') ->setMultiOptions($arrayStyleSheetMultiOptions) ->setRequired(true); $btn_envoi = new Zend_Form_Element_Submit('envoi'); $btn_envoi->setLabel('Envoyer') ->removeDecorator('DtDdWrapper') ->setAttribs(array( 'class' => 'bouton_form', 'tabindex' => '2', 'title' => 'Appliquer le style choisi' )); // on ajoute tout les éléments au formulaire $this->addElements( array( $stylesheet, $btn_envoi )); // on réinisialise les décorateurs $this->clearDecorators(); // definition des décorateurs communs au formulaire via "decorateur de vue manuel" $this->setDecorators(array( array('ViewScript', array('script' => 'show.phtml')) )); $stylesheet->setDecorators(array('Indentator')); $btn_envoi->setDecorators(array('Indentator')); } }
Je voudrai faire un décorateur personnaliser... Mon soucis est que la méthode setDecorators(array('Indentator')); des élements plante ma page...
En gros pour le moment mon décorateur est une fonction vide juste un (echo de test)... Le problème est que tout fonctionne si je commente les deux setDecorators en fin du script si dessus... Si je les mets, j'ai plantage de ma page... Erreur http sous Safari:
Safari ne parvient pas à ouvrir la page.
Safari ne parvient pas à ouvrir la page « http://zf.at-home-media.loc/fr/default/ … stylesheet ». L’erreur est : « erreur inconnue » (kCFErrorDomainWinSock:10054) Choisissez Aide > Signaler un bogue à Apple, notez le numéro d’erreur et décrivez ce que vous avez fait avant l’affichage du présent message.
Idem sous FF, IE... pas moyen d'ouvrir la page...
Une idée sur le pourquoi ?
Hors ligne
Bizarrement, ton erreur ne correspond pas à un problème de développement PHP...
Je ne suis pas sur, mais il ne faut pas la traiter par rapport à ton code PHP
On est d'accord que c'est la même erreur sur les navigateurs ?
Quel est ta situation local ? OS ? réseau ? fait partie d'un domaine ? Utilises-tu un proxy ?
Hors ligne
oui tout navigateur.... la page ne charge plus...
sinon je bosse en localhost sous 127.0.0.1 via XP/wampServer2... l'application marche nickel... le formulaire s'affiche bien si je commente les décorateurs... Une fois les décorateurs appeler ... plantage...une idée?
Pour moi c'est php (apache ne prend pas de restriction... les navigateurs n'y sont pour rien...
Hors ligne
est ce que tu peux nous dire l'erreur que as avec un client HTTP en ligne de commande comme cURL par exemple
et sinon quand tu essayes de l'ouvrir avec Firefox tu obtiens quoi exactement comme message d'erreur ?
Hors ligne
le message FF
Connexion réinitialisée
la connexion avec le serveur a été réinitialisée pendant le chargement de la page.
* Le site est peut-être temporairement indisponible ou surchargé. Réessayez plus
tard ;
* Si vous n'arrivez à naviguer sur aucun site, vérifiez la connexion
au réseau de votre ordinateur ;
* Si votre ordinateur ou votre réseau est protégé par un pare-feu ou un proxy,
assurez-vous que Firefox a l'autorisation d'accéder au Web.
De plus me pert le données en session...
si QQ1 à une idée ?
Dernière modification par BeRoots (23-01-2010 01:04:15)
Hors ligne
personne pour une idée ?
Hors ligne
t'as des infos dans le log de ton service web ?
Hors ligne
/fr/default/alternatestylesheet HTTP/1.1" 500 11525
erreur 500 quand j'active le decorateur...
une idée ?
Hors ligne
BeRoots a écrit:
erreur 500 quand j'active le decorateur...
c'est très probablement une boucle infinie si tu as une erreur 500
est ce que tu peux nous montre le code de Brts_Form_Decorateur_Indentator ?
Hors ligne
class Brts_Form_Decorator_Indentator extends Zend_Form_Decorator_Abstract { /* * Rendu de l'element avec application du décorateur. * * @name render * @access public * @return object Zend_Form_Elements object */ public function render($content) { $element = $this->getElement(); if (!$element instanceof Zend_Form_Element) { return $content; } if (null === $element->getView()) { return $content; } $separator = $this->getSeparator(); $placement = $this->getPlacement(); // $label = $this->buildLabel(); // $input = $this->buildInput(); // $errors = $this->buildErrors(); // $desc = $this->buildDescription(); $output = "\t".$element."\n"; switch ($placement) { case (self::PREPEND): return $output . $separator . $content; case (self::APPEND): default: return $content . $separator . $output; } } }
Idem pour
class Brts_Form_Decorator_Indentator extends Zend_Form_Decorator_Abstract { /* * Rendu de l'element avec application du décorateur. * * @name render * @access public * @return object Zend_Form_Elements object */ public function render($content) { echo 'coucou'; } }
une idée ?
Hors ligne
s'il y a une boucle infinie même avec "echo coucou" ça veut dire que le problème est pendant le chargement de la classe
mais c'est trop compliqué à suivre pour moi donc il faudrait que tu utilises un débuggeur comme Xdebug par exemple : http://xdebug.org/
c'est une extension à installer et ensuite tu récupèreras dans un fichiers la liste des appels de fonctions et de méthodes et peut-être que tu verras où se trouve la boucle
Dernière modification par nosferapti (29-01-2010 08:51:24)
Hors ligne
pas oyen avec zend_Debug ?
ou encore du coté de firebug, firephp sous firefox ?
Hors ligne
BeRoots a écrit:
pas oyen avec zend_Debug ?
ou encore du coté de firebug, firephp sous firefox ?
je ne connais pas donc je n'ai rien contre mais d'après ce que j'ai vu il s'agit juste d'ajouter une ligne pour avoir un affichage à un endroit donnée :
http://framework.zend.com/manual/fr/zen … mping.html
http://www.firephp.org/
alors que Xdebug fournit le détail complet de tous les appels ce qui m'a déjà fait gagner beaucoup de temps :
http://xdebug.org/docs/execution_trace
Hors ligne
Salut, je redéterre le sujet, j'ai créer un décorateur et j'ai la même erreur de path que tu avais en premier. J'ai mis mon décorateur dans library/zend/form/decorator/ or mon addprefix ne fonctionne pas. pourrait tu m'éclairé sur ton arborecence et ton include stp
Hors ligne
Pages: 1