Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Avec cette dernière version une modification a été faite sur Zend_Dojo et du coup les zones filteringselect sont vides au chargement du formulaire alors que jusque là il y avait un appel initial pour charger les valeurs.
D'autres personnes ont ce problème : ICI
Inutile de vous dire que je suis dans la semoule et je ne crains pas de dire : au secours.
Bref, quelqu'un a t-il une piste ?
Hors ligne
Salut,
Peux tu me montrer un peu de code car je l'utilise tous les jours et sans aucun problème. (J'en ai d'autres mais pas celui la)
Hors ligne
En fait voici un morceau de formulaire :
$frechevenementcommunaute = new Zend_Dojo_Form_Element_FilteringSelect('ann_communaute'); $frechevenementcommunaute->setDecorators(array('DijitElement',array('Label', array('escape'=>false)), array('HtmlTag', array('tag'=>'p')))) ->setAutoComplete(true) ->setStoreId('communautesStore') ->setStoreType('dojo.data.ItemFileReadStore') ->setValue(10) ->setStoreParams(array('url'=>'/1001sportifsv2/public/general/default/index/listecommunautesrechvideo')) ->setAttribs(array("searchAttr" => "techcommunautes_lib","onchange" => "modifliste(this.value)")) ->setLabel('<br/>Communauté');
Normalement la procédure appelée par setStoreParams est déclenchée au chargement du formulaire et la valeur correspondant à la value (10 dans le cas présent) est présélectionnée dans la listebox.
C'est le comportement constaté avec la 1.8.2 du ZF mais plus avec la 1.8.4.
La référence que je donne dans mon précédent message montre que ce problème est rencontré par d'autres développeurs.
J'ai remplacé juste la classe Dojo du ZF 1.8.4 par l'ancienne version et tout fonctionne correctement. La modification faite sur cette classe sr la 1.8.4 rend prévisible que ça ne marche plus. Mais je n'ai pas trouvé comment rétablir le fonctionnement de ces formulaires avec cette dernière version.
Je suis donc ouvert à toutes les propositions.
Hors ligne
je sais que ça va pas faire avancer le schmilblik mais j'ai dû repasser en 1.8.3 à cause à cause d'un autre bug sous Dojo... Le problème c'est que les formulaires ont changé la façon de créer les id mais pas les javascripts qui vont avec.
cf : http://framework.zend.com/issues/browse/ZF-7134
Donc 1.8.3 oui, mais pas plus si tu fais du dojo
Hors ligne
C'est la deuxième fois qu'une nouvelle release rend Dojo inexploitable.
J'avoue être assez agacé.
Par ailleurs l'intégration de Dojo est plutôt réussie et j'arrive de plus en plus à obtenir un résultat satisfaisant en intégrant des comportement Ajax quand c'est vraiment utile et pas juste comme un argument de vente ou pour faire "up to date".
Je comprends d'autant moins ce manque d'attention sur Zend_Dojo.
Hors ligne
J'ai regardé mes modifications faites dans la classe Zend_Dojo et je n'ai pas la connaissance suffisante pour en comprendre la raison.
Il y a quelques explications : http://framework.zend.com/issues/browse … tion_32410
Peut-être existe t-il un moyen de contourner le problème ?
Hors ligne
La seule solution que je peux te donner pour contourner ton problème est d'ajouter un script qui reload ton store et que tu ajoutes dans la création de ton filtering select avec un onClick=>"reloadStore('IDSTORE','url')", et dans ta page un
function reloadStore(id,url){ dijit.byId(id).store = new dojo.data.ItemFileReadStore({url:url}); }
J'utilise cette méthode pour charger des filteringselect combinés.
David
Hors ligne
J'ai déjà des listes chainés dans mes formulaires qui sont mises à jour avec onchange" => "modifliste(this.value).
la fonction
function reloadStore(id,url){ dijit.byId(id).store = new dojo.data.ItemFileReadStore({url:url}); }
Tu la met où exactement ? Dans ta view ?
Hors ligne
oui dans ta view.
Hors ligne
Soit je ne sais pas faire, soit ça ne règle vraiment pas le problème.
Parviens-tu à faire un populate sur des Form Dojo depuis la 1.8.4 ?
Pour moi rien à faire... Et tous mes filterselect sont casses alors que tout marchait impec jusque là.
Mon inquiétude est de savoir si c'est un bug du ZF qui va être corrigé, ou si mes traitements sont foireux depuis le début et que ça se révèle avec cette nouvelle version.
Dernière modification par Jean-Marc Rigade (10-07-2009 12:59:08)
Hors ligne
Oui je te confirme que chez moi ca fonctionne parfaitement.
Je viens de tester en plus dans des subform avec des onglets et j'en passe...
Hors ligne
Moi je crée mon form comme ca :
class Form_SaisieRes extends Zend_Dojo_Form { public $hiddenDecorators = array( 'ViewHelper', array(), ); public function init() { /* Définition du formulaire */ $this->setMethod('post'); $this->setAttribs(array('name'=>'saisieRes','id'=>'saisieRes','action'=>'/saisiesl/save')); $this->addElement('hidden', 'SITE',array('decorators' => $this->hiddenDecorators,'value'=>$_POST["SITE"])) ->addElement('hidden', 'SAISON',array('decorators' => $this->hiddenDecorators,'value'=>$_POST["SAISON"])) ->addElement('hidden', 'LANGUE',array('decorators' => $this->hiddenDecorators,'value'=>$_POST["LANGUE"])) /* * Page Présentation Résidence */ $presentationForm = new Zend_Dojo_Form_SubForm(); $presentationForm ->setAttribs(array( 'name' => 'presentation', 'legend' => utf8_encode('Présentation'), 'dijitParams' => array( 'title' => utf8_encode('Présentation'), ), )) ->addElement('ComboBox', 'ZONE_100_1', array( 'label' => utf8_encode('Logo Résidence :'), 'trim' => true, 'style' => 'width:200px;', 'autocomplete'=>false, 'multiOptions'=>$this->LogosRes(), )) ->addElement('FilteringSelect','CODTYP',array( 'label'=> utf8_encode('Type de résidence :'), 'storeId' => 'CODTYPStore', 'storeType' => 'dojo.data.ItemFileReadStore', 'storeParams' => array('url' => '/saisiesl/listetype'), 'dijitParams' => array('searchAttr'=>'LIBELLE'), 'style'=>'width:250px;' )) ->addElement('FilteringSelect','TYPERESA',array( 'label'=> utf8_encode('Type de réservation :'), 'storeId' => 'TYPERESAStore', 'storeType' => 'dojo.data.ItemFileReadStore', 'storeParams' => array('url' => '/saisiesl/typeresa'), 'dijitParams' => array('searchAttr'=>'LIBELLE'), 'style'=>'width:250px;', 'onChange'=>'changeMini(this.value);' )); ... ... $this->addSubForm($presentationForm, 'presentation') ->addSubForm($hebergementForm, 'hebergement') ->addSubForm($promosForm, 'promos') ->addSubForm($tarifsForm, 'tarifs') ->addSubForm($photosForm, 'photos') ->addSubForm($stationForm, 'station') ->addSubForm($photosSForm, 'photosS') ->addSubForm($validationForm, 'validation');
puis dans mon controller j'ai ca :
$form = new Form_SaisieRes(); $this->view->form = $form->populate($mesDatas);
Je fais juste un echo $form dans ma view et ca fonctionne.
Hors ligne
Mes filterselect fonctionnent, mais pas comme avant.
Quand tu reviens sur un formulaire pour une mise à jour tes filterselect prennent les valeurs de la base ?
Par exemple avec ça le populate ne passe plus :
$profilscommunaute = new Zend_Dojo_Form_Element_FilteringSelect('profils_communaute'); $profilscommunaute->setDecorators(array('DijitElement',array('Label', array('escape'=>false)), array('HtmlTag', array('tag'=>'p')))) ->setAutoComplete(true) ->setStoreId('communautesStore') ->setStoreType('dojo.data.ItemFileReadStore') ->setStoreParams(array('url'=>'/1001sportifsv2/public/general/default/index/listecommunautes')) ->setAttribs(array("searchAttr" => "techcommunautes_lib")) ->setLabel('Communauté');
Je confirme que le populate passe avec des Zend_Dojo_Form_Element_ComboBox mais plus avec les filterselect,
ce qui fonctionnait ne fonctionne plus.
La zone décrite plus haut ne répond plus au populate avec la nouvelle version de la classe Dojo.
Le projet touche à sa fin et va bientôt passer en prod, j'avoue avoir un gros coup de blues sur ce coup là.
Dernière modification par Jean-Marc Rigade (10-07-2009 21:30:16)
Hors ligne
oui je te confirme que lorsque je rapelle mon form avec les valeurs de la base, j'ai bien la bonne zone sélectionnée dans mon filtering select.
Dernière question bête mais as tu changé la version de dojo ?
Es tu passé en 1.3.x ?
J'avais quelques problèmes d'affichage avec la dojo 1.2.3 quand je suis passé au zend 1.8.x.
Depuis que je suis passé à la 1.3.x tout est rentré dans l'ordre.
Hors ligne
Je viens de mettre à niveau les librairies Dojo, hélas, ça ne change rien.
De toute façon j'utilisais le Dojo fourni avec le ZF.
La seule chose dont je sois certain c'est que ça fonctionnait avec la 1.8.2 et plus avec la 1.8.4
Et que ça remarche si je garde la 1.8.4 mais que je prends pour Dojo les classes de la 1.8.2
Et que le problème ne concerne que les filterselect.
Dés que j'aurais un moment je vais créer un projet minimaliste avec seulement deux filterselect chainées et le ZF1.8.4 pour essayer de comprendre d'où vient le problème et aussi pour fournir le source et un accès à cette ressource pour voir si quelqu'un voit d'où vient l'erreur...
Je ne vois plus que ça.
Dernière modification par Jean-Marc Rigade (14-07-2009 02:52:10)
Hors ligne
Pour le moment et pour ne pas perturber les autres sites qui tournent sur le serveur (un dédié) j'ai collé les classes Dojo V1.8.2 dans le répertoire library de l'application pour qu'elle soient prisent en priorité à la place de celles de la V1.8.4.
Ceci dit, je paierais cher (sérieusement) pour savoir pourquoi des traitements fonctionnent parfaitement, sans me vanter tout est nickel (dés que le site sera en prod je vous communiquerais l'adresse du machin) avec la 1.8.2 et plus avec la V1.8.4, tout ça sans message d'erreur...
Hors ligne
Pages: 1