Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjours alors actuellement j'ai une zone de saisie d'aucompletion qui fonctionne très bien sur un élément mais je voudrais dynamiquement modifier le critère de recherche.
aujourd'hui l'autocompletion fonctionne parfaitement pour rechercher un utilisateur mais je voudrais via une liste déroulante ou autre si il faut pouvoir activer l'autocompletion sur un autre critere tel le nom d'une salle.
Je vous met mon code actuel au cas ou
la partie formulaire:
$utilisateurId = new Zend_Dojo_Form_Element_FilteringSelect('utilisateurId'); $utilisateurId -> setLabel('choisir un utilisateur :') -> setStoreId('utilisateurStore') -> setStoreType('dojo.data.ItemFileReadStore') -> setAutoComplete(true) -> setStoreParams(array('url' => '/recherche/utilisateurlist')) -> setAttrib('searchAttr', 'nom_prenom'); $critere = new Zend_Form_Element_Select('critere_choix'); $critere->setLabel('Critere') ->setMultiOptions(array('utilisateur','salle')) ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $submit = $this->createElement('submit', 'submit'); $this->addElements(array($utilisateurId, $critere, $submit));
la parti controller:
public function indexAction() { $form = $form = new Form_rechercheForm(); if ($this->_request->isPost()) { if ($form->isValid($_POST)) { /* * Process data */ $utilisateurId = $this->_getParam('utilisateurId'); //$userId contains the userId input by the user } else { $form->populate($_POST); $this->view->form = $form; } } else { $this->view->form = $form; } } function utilisateurlistAction() { $dbUtilisateur = new Model_DbTable_Utilisateur(); $result = $dbUtilisateur->getDefaultAdapter()->fetchAll("SELECT * FROM utilisateur"); $data = new Zend_Dojo_Data('id', $result); $this -> _helper -> autoCompleteDojo($data); } function sallelistAction() { $dbUtilisateur = new Model_DbTable_Utilisateur(); $result = $dbUtilisateur->getDefaultAdapter()->fetchAll("SELECT * FROM salle"); $data = new Zend_Dojo_Data('id', $result); $this -> _helper -> autoCompleteDojo($data); } function resultatAction() { $identifiant = $this->_request->getParam('utilisateurId'); $form = new Form_rechercheForm(); $this->view->form = $form; $userId = $form->getValue('userId'); $dbSalle = new Model_DbTable_Salle(); $form = new Form_rechercheForm($identifiant); $this->view->form = $form; if ($this->_request->isPost()) { $formData = $this->_request->getPost(); if ($form->isValid($formData)) { $this->view->choix = $form->getValue('critere_choix'); if($form->getValue('critere_choix')=='0') { $this->view->result = $dbSalle->getDefaultAdapter()->fetchAll("SELECT nom_salle FROM utilisateur,reservation,salle where utilisateur.id='".$identifiant."' and utilisateur.id=reservation.utilisateur_id and reservation.salle_id=salle.id"); } else { $this->view->result = $dbSalle->getDefaultAdapter()->fetchAll("SELECT nom_prenom FROM utilisateur,reservation,salle where nom_salle='".$identifiant."' and utilisateur.id=reservation.utilisateur_id and reservation.salle_id=salle.id"); } } else { $form->populate($formData); } } else { // L'id de la site est attendu dans $params['id'] } }
j'ai créer sallelistAction() qui actuellement n'ai pas utilisé et sert donc a rien.
Merci.
Dernière modification par hadesjack (07-01-2010 15:54:55)
Hors ligne
hello,
tu as besoin de code javascript pour cela ...
tu peux par exemple faire ceci :
$view->dojo()->requireModule('dojo._base.connect'); $view->dojo()->addJavascript(" function myFunction(my_event) { //dojo.byId("critere_choix").value -> prends la valeur affichée dans la liste //dijit.byId("critere_choix").attr('value') -> prends la valeur correspondant à la clef (value du select) var newUrl = '" . $urlDeBase . "' + dojo.byId("critere_choix").value dijit.byId('utilisateurId').store.close(); dijit.byId('utilisateurId').store._jsonFileUrl = newUrl; }"); $view->dojo()->addOnLoad('function(){ dojo.connect(dojo.byId("critere_choix"), "onchange", myFunction); dijit.byId("utilisateurId").store.clearOnClose = true; }');
Hors ligne
Merci beaucoup j'ai pu énormément avancer et j'ai mon json sallelist qui ce génère correctement.
Toutefois pas moyen de changer le searchAttr car a priori il disparait tt simplement. l'erreur dojo.byId("utilisateurId").searchAttr is undefined
je vais afficher mon nouveau code et le code html générer ce sera plus clair je pense.
ma vue
<?php $this->dojo()->requireModule('dojo._base.connect'); $this->dojo()->addJavascript(" function myFunction(my_event) { //dojo.byId('critere_choix').value -> prends la valeur affichée dans la liste //dijit.byId('critere_choix').attr('value') -> prends la valeur correspondant à la clef (value du select) if(dojo.byId('critere_choix').value == 'utilisateurlist') { dojo.byId('utilisateurId').searchAttr.value = 'nom_prenom'; } else { dojo.byId('utilisateurId').searchAttr.value = 'nom_salle'; } var newUrl = '/recherche/' + dojo.byId('critere_choix').value dijit.byId('utilisateurId').store.close(); dijit.byId('utilisateurId').store._jsonFileUrl = newUrl; }"); $this->dojo()->addOnLoad('function(){ dojo.connect(dojo.byId("critere_choix"), "onchange", myFunction); dijit.byId("utilisateurId").store.clearOnClose = true; }'); echo $this->form ;?> <p><a href="<?php echo $this->url(array('controller'=>'', 'action'=>''), 'default', true); ?>">Page d'accueil</a></p>
le code source de la page
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- This Line will output the doctype we set inside the bootstrap file --> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <title> Projet de test du Framework ZEND !</title> <!-- The line below demonstrates usage of the headLink() view helper @see http://framework.zend.com/manual/en/zend.view.helpers.html --> <link href="/css/global.css" media="screen" rel="stylesheet" type="text/css" /> <style type="text/css"> <!-- @import "http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/themes/tundra/tundra.css"; --> </style> <script type="text/javascript"> //<![CDATA[ var djConfig = {"usePlainJson":true,"parseOnLoad":true}; //]]> </script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/dojo.xd.js"></script> <script type="text/javascript"> //<![CDATA[ dojo.require("dojo._base.connect"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("dijit.form.FilteringSelect"); dojo.require("dijit.form.Form"); dojo.require("dojo.parser"); dojo.addOnLoad(function() { utilisateurStore = new dojo.data.ItemFileReadStore({"url":"\/recherche\/utilisateurlist"}); }); dojo.addOnLoad(function() { dojo.forEach(zendDijits, function(info) { var n = dojo.byId(info.id); if (null != n) { dojo.attr(n, dojo.mixin({ id: info.id }, info.params)); } }); dojo.parser.parse(); }); dojo.addOnLoad(function(){ dojo.connect(dojo.byId("critere_choix"), "onchange", myFunction); dijit.byId("utilisateurId").store.clearOnClose = true; }); function myFunction(my_event) { //dojo.byId('critere_choix').value -> prends la valeur affich�e dans la liste //dijit.byId('critere_choix').attr('value') -> prends la valeur correspondant � la clef (value du select) if(dojo.byId('critere_choix').value == 'utilisateurlist') { dojo.byId('utilisateurId').searchAttr.value = 'nom_prenom'; } else { dojo.byId('utilisateurId').searchAttr.value = 'nom_salle'; } var newUrl = '/recherche/' + dojo.byId('critere_choix').value dijit.byId('utilisateurId').store.close(); dijit.byId('utilisateurId').store._jsonFileUrl = newUrl; } var utilisateurStore; var zendDijits = [{"id":"utilisateurId","params":{"store":"utilisateurStore","autocomplete":"true","dojoType":"dijit.form.FilteringSelect"}},{"id":"recherche","params":{"dojoType":"dijit.form.Form"}}]; //]]> </script></head> <body> <div id="welcome"> <center style="font-size: 20pt;"> Projet de test du <span id="zf-name" style="font-size: 40pt;">Framework ZEND !</span> </center> </div> <div> <a href= /login>Login</a> <p><a href="/utilisateur">Gestion des utilisateurs</a></p> <p><a href="/disponibilite">Disponibilite des salles</a></p> <p><a href="/salle">Gestion des salles</a></p> <p><a href="/reservation">Gestion des réservations</a></p> <p><a href="/site">Gestion des sites</a></p> <p><a href="/recherche">Recherche</a></p> </div> <h1></h1> <!-- This next call will now include any content that was generated in the dispatching of a controllers action (or series of actions). --> <form id="recherche" enctype="application/x-www-form-urlencoded" action="/recherche/resultat" method="post"><dl class="zend_form"> <dt id="utilisateurId-label"><label for="utilisateurId" class="optional">choisir un utilisateur :</label></dt> <dd> <input options="" searchAttr="nom_prenom" listsep="<br />" id="utilisateurId" name="utilisateurId" value="" type="text" /></dd> <dt id="critere_choix-label"><label for="critere_choix" class="required">Critere</label></dt> <dd id="critere_choix-element"> <select name="critere_choix" id="critere_choix"> <option value="utilisateurlist" label="utilisateur">utilisateur</option> <option value="sallelist" label="salle">salle</option> </select></dd> <dt id="submit-label"> </dt><dd id="submit-element"> <input type="submit" name="submit" id="submit" value="submit" /></dd></dl></form><p><a href="/">Page d'accueil</a></p> <!-- if your application requires it, this would be a great place to put a footer for all pages. --> </body> </html>
et par contre la ou je perd mes bébé est dans ce que m'affiche firebug
<html xmlns="http://www.w3.org/1999/xhtml" class="dj_gecko dj_ff3 dj_contentbox"><head> <!-- This Line will output the doctype we set inside the bootstrap file --> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/> <meta content="application/xhtml+xml; charset=utf-8" http-equiv="Content-Type"/> <title> Projet de test du Framework ZEND !</title> <!-- The line below demonstrates usage of the headLink() view helper @see http://framework.zend.com/manual/en/zend.view.helpers.html --> <link type="text/css" rel="stylesheet" media="screen" href="/css/global.css"/> <style type="text/css"> <!-- @import "http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/themes/tundra/tundra.css"; --> </style> <script type="text/javascript"> //<![CDATA[ var djConfig = {"usePlainJson":true,"parseOnLoad":true}; //]]> </script> <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/dojo.xd.js" type="text/javascript"/> <script type="text/javascript"> //<![CDATA[ dojo.require("dojo._base.connect"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("dijit.form.FilteringSelect"); dojo.require("dijit.form.Form"); dojo.require("dojo.parser"); dojo.addOnLoad(function() { utilisateurStore = new dojo.data.ItemFileReadStore({"url":"\/recherche\/utilisateurlist"}); }); dojo.addOnLoad(function() { dojo.forEach(zendDijits, function(info) { var n = dojo.byId(info.id); if (null != n) { dojo.attr(n, dojo.mixin({ id: info.id }, info.params)); } }); dojo.parser.parse(); }); dojo.addOnLoad(function(){ dojo.connect(dojo.byId("critere_choix"), "onchange", myFunction); dijit.byId("utilisateurId").store.clearOnClose = true; }); function myFunction(my_event) { //dojo.byId('critere_choix').value -> prends la valeur affich?e dans la liste //dijit.byId('critere_choix').attr('value') -> prends la valeur correspondant ? la clef (value du select) if(dojo.byId('critere_choix').value == 'utilisateurlist') { dojo.byId('utilisateurId').searchAttr.value = 'nom_prenom'; } else { dojo.byId('utilisateurId').searchAttr.value = 'nom_salle'; } var newUrl = '/recherche/' + dojo.byId('critere_choix').value dijit.byId('utilisateurId').store.close(); dijit.byId('utilisateurId').store._jsonFileUrl = newUrl; } var utilisateurStore; var zendDijits = [{"id":"utilisateurId","params":{"store":"utilisateurStore","autocomplete":"true","dojoType":"dijit.form.FilteringSelect"}},{"id":"recherche","params":{"dojoType":"dijit.form.Form"}}]; //]]> </script><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/data/ItemFileReadStore.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/FilteringSelect.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/Form.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/parser.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/data/util/filter.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/data/util/simpleFetch.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/date/stamp.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/ComboBox.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_Widget.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_Templated.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/_FormMixin.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/data/util/sorter.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/ValidationTextBox.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/regexp.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/nls/fr/ComboBox.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/string.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/TextBox.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/Tooltip.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/nls/fr/validate.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/focus.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/manager.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/place.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/popup.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/scroll.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/sniff.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/typematic.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/wai.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/_base/window.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dijit/form/_FormWidget.xd.js"/><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/AdapterRegistry.xd.js"/><style charset="utf-8" type="text/css">/* See license.txt for terms of usage */ #firebugBody { position: fixed; top:0; left:0; margin:0; padding:0; width:1px; height:1px; overflow:visible; } .firebugCanvas { position:fixed; top: 0; left: 0; display:none; border: 0 none; margin: 0; padding: 0; outline: 0; } .firebugHighlight { z-index: 2147483647; position: absolute; background-color: #3875d7; margin: 0; padding: 0; outline: 0; border: 0 none; } .firebugLayoutBoxParent { z-index: 2147483647; position: absolute; background-color: transparent; border-top: 0 none; border-right: 1px dashed #BBBBBB; border-bottom: 1px dashed #BBBBBB; border-left: 0 none; margin: 0; padding: 0; outline: 0; } .firebugRuler { position: absolute; margin: 0; padding: 0; outline: 0; border: 0 none; } .firebugRulerH { top: -15px; left: 0; width: 100%; height: 14px; background: url(chrome://firebug/skin/rulerH.png) repeat-x; border-top: 1px solid #BBBBBB; border-right: 1px dashed #BBBBBB; border-bottom: 1px solid #000000; } .firebugRulerV { top: 0; left: -15px; width: 14px; height: 100%; background: url(chrome://firebug/skin/rulerV.png) repeat-y; border-left: 1px solid #BBBBBB; border-right: 1px solid #000000; border-bottom: 1px dashed #BBBBBB; } .overflowRulerX > .firebugRulerV { left: 0; } .overflowRulerY > .firebugRulerH { top: 0; } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ .firebugLayoutBox { margin: 0; padding: 0; border: 0 none; outline: 0; } .firebugLayoutBoxOffset { z-index: 2147483647; position: absolute; opacity: 0.8; } .firebugLayoutBoxMargin { background-color: #EDFF64; } .firebugLayoutBoxBorder { background-color: #666666; } .firebugLayoutBoxPadding { background-color: SlateBlue; } .firebugLayoutBoxContent { background-color: SkyBlue; } /*.firebugHighlightGroup .firebugLayoutBox { background-color: transparent; } .firebugHighlightBox { background-color: Blue !important; }*/ .firebugLayoutLine { z-index: 2147483647; background-color: #000000; opacity: 0.4; margin: 0; padding: 0; outline: 0; border: 0 none; } .firebugLayoutLineLeft, .firebugLayoutLineRight { position: fixed; width: 1px; height: 100%; } .firebugLayoutLineTop, .firebugLayoutLineBottom { position: absolute; width: 100%; height: 1px; } .firebugLayoutLineTop { margin-top: -1px; border-top: 1px solid #999999; } .firebugLayoutLineRight { border-right: 1px solid #999999; } .firebugLayoutLineBottom { border-bottom: 1px solid #999999; } .firebugLayoutLineLeft { margin-left: -1px; border-left: 1px solid #999999; } </style></head><div id="_firebugConsole" style="display: none;" FirebugVersion="1.4.5"/><body> <div id="welcome"> <center style="font-size: 20pt;"> Projet de test du <span style="font-size: 40pt;" id="zf-name">Framework ZEND !</span> </center> </div> <div> <a href="/login">Login</a> <p><a href="/utilisateur">Gestion des utilisateurs</a></p> <p><a href="/disponibilite">Disponibilite des salles</a></p> <p><a href="/salle">Gestion des salles</a></p> <p><a href="/reservation">Gestion des réservations</a></p> <p><a href="/site">Gestion des sites</a></p> <p><a href="/recherche">Recherche</a></p> </div> <h1/> <!-- This next call will now include any content that was generated in the dispatching of a controllers action (or series of actions). --> <form dojoattachevent="onreset:_onReset,onsubmit:_onSubmit" dojoattachpoint="containerNode" action="/recherche/resultat" method="post" enctype="application/x-www-form-urlencoded" id="recherche" widgetid="recherche"><dl class="zend_form"> <dt id="utilisateurId-label"><label class="optional" for="utilisateurId" id="utilisateurId_label">choisir un utilisateur :</label></dt> <dd> <div tabindex="-1" wairole="combobox" dojoattachpoint="comboNode" dojoattachevent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse" id="widget_utilisateurId" class="dijit dijitReset dijitInlineTable dijitLeft dijitComboBox dijitComboBoxError dijitError" role="combobox" widgetid="utilisateurId" aria-labelledby="utilisateurId_label" aria-expanded="false"><div style="overflow: hidden;"><div dojoattachevent="onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse" wairole="presentation" dojoattachpoint="downArrowNode" class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonActive" role="presentation"><div class="dijitArrowButtonInner">?</div><div class="dijitArrowButtonChar">?</div></div><div class="dijitReset dijitValidationIcon"><br/></div><div class="dijitReset dijitValidationIconText">?</div><div class="dijitReset dijitInputField"><input type="text" waistate="haspopup-true,autocomplete-list" wairole="textbox" dojoattachpoint="textbox,focusNode" dojoattachevent="onkeypress:_onKeyPress,compositionend" class="dijitReset" autocomplete="off" role="textbox" aria-haspopup="true" aria-autocomplete="list" id="utilisateurId" tabindex="0" aria-required="true" aria-invalid="true" value="" aria-owns="utilisateurId_popup"/><input type="text" style="display: none;" name="utilisateurId"/></div></div></div></dd> <dt id="critere_choix-label"><label class="required" for="critere_choix">Critere</label></dt> <dd id="critere_choix-element"> <select id="critere_choix" name="critere_choix"> <option label="utilisateur" value="utilisateurlist">utilisateur</option> <option label="salle" value="sallelist">salle</option> </select></dd> <dt id="submit-label"> </dt><dd id="submit-element"> <input type="submit" value="submit" id="submit" name="submit"/></dd></dl></form><p><a href="/">Page d'accueil</a></p> <!-- if your application requires it, this would be a great place to put a footer for all pages. --> <div id="dijit__MasterTooltip_0" class="dijitTooltip dijitTooltipRight" widgetid="dijit__MasterTooltip_0" style=""> <div wairole="alert" dojoattachpoint="containerNode" class="dijitTooltipContainer dijitTooltipContents" role="alert">La valeur indiquée n'est pas correcte.</div> <div class="dijitTooltipConnector"/> </div><ul style="overflow: hidden; top: -9999px; width: 160px; height: 61px; visibility: hidden; position: absolute;" tabindex="-1" dojoattachevent="onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut" class="dijitReset dijitMenu" id="utilisateurId_popup" widgetid="utilisateurId_popup"><li wairole="option" dojoattachpoint="previousButton" class="dijitMenuItem dijitMenuPreviousButton" role="option" style="display: none;" id="utilisateurId_popup_prev">Choix précédents</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup0">DUJARDIN Jean</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup1">DEPARTDIEU Gerard</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup2">KAVANAGH Anthony</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup3">DELON Alain</li><li wairole="option" dojoattachpoint="nextButton" class="dijitMenuItem dijitMenuNextButton" role="option" style="display: none;" id="utilisateurId_popup_next">Plus de choix</li></ul></body></html>
donc mon
<input options="" searchAttr="nom_prenom" listsep="<br />" id="utilisateurId" name="utilisateurId" value="" type="text" />
est passé a
<div tabindex="-1" wairole="combobox" dojoattachpoint="comboNode" dojoattachevent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse" id="widget_utilisateurId" class="dijit dijitReset dijitInlineTable dijitLeft dijitComboBox dijitComboBoxError dijitError" role="combobox" widgetid="utilisateurId" aria-labelledby="utilisateurId_label" aria-expanded="false"><div style="overflow: hidden;"><div dojoattachevent="onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse" wairole="presentation" dojoattachpoint="downArrowNode" class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonActive" role="presentation"><div class="dijitArrowButtonInner">?</div><div class="dijitArrowButtonChar">?</div></div><div class="dijitReset dijitValidationIcon"><br/></div><div class="dijitReset dijitValidationIconText">?</div><div class="dijitReset dijitInputField"><input type="text" waistate="haspopup-true,autocomplete-list" wairole="textbox" dojoattachpoint="textbox,focusNode" dojoattachevent="onkeypress:_onKeyPress,compositionend" class="dijitReset" autocomplete="off" role="textbox" aria-haspopup="true" aria-autocomplete="list" id="utilisateurId" tabindex="0" aria-required="true" aria-invalid="true" value="" aria-owns="utilisateurId_popup"/><input type="text" style="display: none;" name="utilisateurId"/></div></div></div></dd>
et il y a aussi une autre ligne qui peut mettre sur la piste
</div><ul style="overflow: hidden; top: -9999px; width: 160px; height: 61px; visibility: hidden; position: absolute;" tabindex="-1" dojoattachevent="onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut" class="dijitReset dijitMenu" id="utilisateurId_popup" widgetid="utilisateurId_popup"><li wairole="option" dojoattachpoint="previousButton" class="dijitMenuItem dijitMenuPreviousButton" role="option" style="display: none;" id="utilisateurId_popup_prev">Choix précédents</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup0">DUJARDIN Jean</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup1">DEPARTDIEU Gerard</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup2">KAVANAGH Anthony</li><li role="option" class="dijitReset dijitMenuItem" id="utilisateurId_popup3">DELON Alain</li><li wairole="option" dojoattachpoint="nextButton" class="dijitMenuItem dijitMenuNextButton" role="option" style="display: none;" id="utilisateurId_popup_next">Plus de choix</li></ul>
qui represente clairement mon json utilisateur et non celui de salle.
au cas je les mets aussi.
json utilisateurlist:
{"identifier":"id","items":[{"id":1,"nom_prenom":"DUJARDIN Jean"},{"id":2,"nom_prenom":"DEPARTDIEU Gerard"},{"id":3,"nom_prenom":"KAVANAGH Anthony"},{"id":4,"nom_prenom":"DELON Alain"}]}
json sallelist:
{"identifier":"id","items":[{"id":7,"nom_salle":"Du hibou"},{"id":5,"nom_salle":"Fiesta"},{"id":2,"nom_salle":"Moliere"},{"id":6,"nom_salle":"Purgatoire"},{"id":1,"nom_salle":"Victor Hugo"}]}
dernier test effectuer dans form je l'ai fait passer de
<?php class Form_rechercheForm extends Zend_Form { public function __construct($identifiant = 0,$options = null) { parent::__construct($options); $this->setName('recherche'); $this->setAction('/recherche/resultat'); $utilisateurId = new Zend_Dojo_Form_Element_FilteringSelect('utilisateurId'); $utilisateurId -> setLabel('choisir un utilisateur :') -> setStoreId('utilisateurStore') -> setStoreType('dojo.data.ItemFileReadStore') -> setAutoComplete(true) -> setStoreParams(array('url' => '/recherche/utilisateurlist')) -> setAttrib('searchAttr', 'nom_prenom'); $critere = new Zend_Form_Element_Select('critere_choix'); $critere->setLabel('Critere') ->setMultiOptions(array('utilisateurlist' => 'utilisateur','sallelist' => 'salle')) ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $submit = $this->createElement('submit', 'submit'); $this->addElements(array($utilisateurId, $critere, $submit)); } }
a
$utilisateurId -> setLabel('choisir un utilisateur :') -> setStoreId('utilisateurStore') -> setStoreType('dojo.data.ItemFileReadStore') -> setAutoComplete(true) -> setStoreParams(array('url' => '/recherche/sallelist')) -> setAttrib('searchAttr', 'nom_salle');
l'autocompletion me retourne bien mais salle mais je ne peut basculer sur utilisateur.
Oui j'ai mis beucoup de code j'en ai profiter pour afficher mes sours en penssant que ca pourais servir dans le futur a quelqun feusant de l'autocompletion.
merci et bonne lecture :p
Hors ligne
oki,
searchattr n'est pas un attribut html (donc dojo.byId foirera)
essaye avec dijit.byId('utilisateurId').attr('.searchAttr') et
dijit.byId('utilisateurId').attr('.searchAttr', newValeur)
au passage passe ne mode débugage tu auras une console ou entrer ce genre de test .....
$this->dojo()->setDjConfigOption('isDebug', true);
Hors ligne
Tout simplement génial.
Pour infos j'ai mis ca dijit.byId('utilisateurId').attr('searchAttr', newValeur) sans le . devant searchAttr, je dit ca bien entendu pour le cas ou quelqu'un aurais besoin de cette infos.
Bien un GROS merci c'est génial ca roule.
par curiosité m'en vais essayer $this->dojo()->setDjConfigOption('isDebug', true);
Tchao
Hors ligne
pour info dojo.byId = document.getElementById à peu de chose près (si ce n'est la même chose) mais dijit.byIOd te donne accès aux fonctions de dojo sur cette element ...
Hors ligne
Pages: 1