Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-01-2010 12:16:00

hadesjack
Membre
Date d'inscription: 12-10-2009
Messages: 23

[resolu]dojo autocompletion modification de recherche

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:

Code:

$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:

Code:

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

 

#2 07-01-2010 00:16:34

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [resolu]dojo autocompletion modification de recherche

hello,
tu as besoin de code javascript pour cela ...

tu peux par exemple faire ceci :

Code:

$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;
        }');

Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#3 07-01-2010 10:41:05

hadesjack
Membre
Date d'inscription: 12-10-2009
Messages: 23

Re: [resolu]dojo autocompletion modification de recherche

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

Code:

<?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

Code:

<!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="&lt;br /&gt;" 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">&nbsp;</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

Code:

<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

Code:

<input options="" searchAttr="nom_prenom" listsep="&lt;br /&gt;" id="utilisateurId" name="utilisateurId" value="" type="text" />

est passé a

Code:

<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

Code:

</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:

Code:

{"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:

Code:

{"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

Code:

<?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

Code:

$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

 

#4 07-01-2010 15:33:20

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [resolu]dojo autocompletion modification de recherche

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);


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#5 07-01-2010 15:54:19

hadesjack
Membre
Date d'inscription: 12-10-2009
Messages: 23

Re: [resolu]dojo autocompletion modification de recherche

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

 

#6 07-01-2010 16:20:55

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [resolu]dojo autocompletion modification de recherche

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 ...


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages