IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

[Dojo] Probleme d'Autocomplete [ZF 1.7]


Sujet :

Zend_Form PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [Dojo] Probleme d'Autocomplete
    bonjour,

    étant complètement débutant avec Zend Framework (ou même les frameworks php en général), je galère un peu en ce moment avec l'utilisation de la bibliothèque Dojo.

    Pour ce faire j'essaye de suivre le tuto suivant: Techorus

    J'affiche le formulaire, je sais q la fonction destinée à créer la liste fonctionne correctement - c'est donc à priori au niveau de l'attribution de la liste des choix possibles au champ Input qu'il y a un souci.

    L'arborescence:

    projet
    [fichiers: .htaccess, bootstrap.php]
    __application
    ..........[fichiers: config.ini]
    .........|__controllers
    .........|.........[fichiers php: CeController, ErrorController, IndexController]
    .........|__layouts
    .........|.........[fichiers: layout.phtml]
    .........|__models
    .........|.........[fichiers php: Pays, ...]
    .........|__views
    .........|.........|__helpers
    .........|.........|__scripts
    .........|..................|__ce
    .........|.................. [fichiers: creer.phtml, index.phtml]
    .........|..................|__error
    .........|.................. [fichiers: error.phtml]
    .........|..................|__index
    .........|.................. [fichiers: error.phtml, index.phtml]
    __library
    .........|__Zend
    __public
    .........|__css
    ..................[fichiers: design.css]
    .........|__images
    .........|__js
    ..............|__dijit
    ..............|__dojo
    ..............|__dojox

    et voici le code

    -> pour le controller: CeController.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    class CeController extends Zend_Controller_Action
    {
        public function indexAction()
        {
    		$form = $this->getForm();
     
    		if ($this->_request->isPost()) {
     
    			if ($form->isValid($_POST)) {
    				/* 
    				 * Process data
    				 */
    				$paysId = $this->_getParam('pays_id');
    				//$userId contains the userId input by the user 
    			} else {
    			   $form->populate($_POST);
     
    			   $this->view->form = $form;
    			}
     
    		} else {
     
    		   $this->view->form = $form;
    		}
        }
     
        public function payslistAction()
        {
    		$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    			'host'     => '127.0.0.1',
    			'username' => 'root',
    			'password' => 'mysql',
    			'dbname'   => 'mobilite'
    		));
     
    		$result = $db->fetchAll("SELECT pays_id, pays_nom FROM pays");
    		$data = new Zend_Dojo_Data('pays_id', $result);
    		$this->_helper->autoCompleteDojo($data);
     
        }
     
        public function getForm()
        {
    		$form = new Zend_Form;
     
    		$paysId = new Zend_Dojo_Form_Element_FilteringSelect('listPays');
    		$paysId->setLabel('choisir un pays: ')
    				->setAutoComplete(true)
    				->setStoreId('paysStore')
    				->setStoreType('dojo.data.ItemFileReadStore')
    				->setStoreParams(array('url'=>'./payslist/'))
    				->setAttrib("searchAttr", "paysname")
    				->setRequired(true);
     
    		$submit = $form->createElement('submit', 'submit');
     
    		$form->addElements(array($paysId, $submit));
     
    		return $form;
        }
    }
    ?>
    -> pour le bootstrap.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
    date_default_timezone_set('Europe/Paris');
    // mise en place des répertoires et chargement des classes
    set_include_path('.'
    . PATH_SEPARATOR . './library'
    . PATH_SEPARATOR . './application/models/'
    . PATH_SEPARATOR . get_include_path());
    include "Zend/Loader.php";
    Zend_Loader::registerAutoload();
     
    // Chargement de la configuration
    $configDB = new Zend_Config_Ini('./application/config.ini', 'database');
    $registry = Zend_Registry::getInstance();
    $registry->set('configdb', $configDB);
    // Mise en place de la BDD
    $db = Zend_Db::factory($configDB->db);
    Zend_Db_Table::setDefaultAdapter($db);
     
     
    // Chargement des dates pr les formulaires
    $configDates = new Zend_Config_Ini('./application/dates.ini', 'dates');
    Zend_Registry::set('dates', $configDates);
     
     
    // setup controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory('./application/controllers');
    Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
     
    /* $view = new Zend_View();
    $view->addHelperPath('/application/views/helpers/', 'Zend_View_Helper'); */
    //echo $view->render('view.php');
     
    // Create new view object if not already instantiated 
    $view = new Zend_View();
    Zend_Dojo::enableView($view);
    $view->dojo()
        ->addStyleSheetModule('dijit.themes.tundra')
        ->setDjConfigOption('usePlainJson', true)
        ->disable();
     
     
    // run!
    $frontController->dispatch();
    -> pr le .htaccess :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    # Règles de réécriture pour Zend Framework
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* bootstrap.php
     
     
    # Sécurité : Ne pas autoriser le parcours de répertoires
    Options -Indexes
     
     
    # Configuration PHP
    php_flag magic_quotes_gpc off
    php_flag register_globals off
    php_flag short_open_tag on
    Un coup de main serait plus que le bienvenu (et les explications qui vont avec aussi ca serait super)

    merci d'avance

    Ced.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello,

    J'ai avancé sur ce problème et maintenant j'obtiens une liste de suggestions sauf qu'elles sont toutes : "undefined"
    Par ctre le nombre d'items proposés est correct.

    Il doit me manquer un élément dans la configuration

    Les fonctions de creation du Combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public function payslistAction()
        {
           $db = new Zend_Db_Adapter_Pdo_Mysql(array(
                'host'     => '127.0.0.1',
                'username' => 'root',
                'password' => 'mysql',
                'dbname'   => 'mobilite'
            ));
     
            $result = $db->fetchAll("SELECT paysid, paysnom FROM pays");
            $data = new Zend_Dojo_Data('paysid', $result);
    		//echo $data->toJson(); exit;
            $this->_helper->autoCompleteDojo($data);
        }
     
    	public function getForm()
    	{
    		//if (null === $this->_form) 
    		//{
    			$this->_form = new Zend_Form();
    			$this->_form->setMethod('get')
    				->setAction($this->getRequest()->getBaseUrl() . '/ce/process')
    				->addElements(array(
    									'listPays' => array(
    													'type' => 'text',
    													'options' => array(
    																		'filters'        => array('StringTrim'),
    																		'dojoType'       => array('dijit.form.ComboBox'),
    																		'store'          => 'testStore',
    																		'autoComplete'   => 'false',
    																		'hasDownArrow'   => 'true',
    																		'searchAttr'	 => 'paysname'
    																		)
    													),
    									'btnValider' => array(
    													'type' => 'submit',
    													'options' => array('label' => 'Valider')
    												)
    									)
    							);
    		//}
     
    		return $this->_form;
    	}
    La fonction payslistAction() retourne la liste suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"identifier":"paysid","items":[{"paysid":"1","paysnom":"Allemagne"},{"paysid":"2","paysnom":"Argentine"},[......],{"paysid":"35","paysnom":"Syrie"},{"paysid":"36","paysnom":"Turquie"}]}
    Et pour la view, j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    	$this->dojo()->enable()
    	->setDjConfigOption('parseOnLoad', true)
    /* 	->requireModule('dijit.form.DateTextBox') */
    	->requireModule('dojox.data.QueryReadStore')
    	->requireModule('dijit.form.ComboBox')
    	->requireModule('dojo.parser');
    ?>
     
     
    page de creation des CE<br/>
    <br/>
     
     
    <div dojoType="dojox.data.QueryReadStore" jsId="testStore" url="payslist"></div>
     
     
    <?php echo $this->form;?>
    Je me rapproche donc de mon but mais c'est pas encore tout à fait ça.
    Merci d'avance à ceux (celles) qui m'apporteront leur aide.

  3. #3
    Invité
    Invité(e)
    Par défaut
    En fait la solution consistait à déclarer un alias "name" dans la requete
    afin q la combobox puisse avoir un attribut "name" et non plus le nom de la colonne de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $db->fetchAll("SELECT paysid, paysnom AS name FROM pays");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] probleme accent autocompletion php mysql ajax
    Par serna dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/11/2012, 11h43
  2. Probleme de AutoComplete asp.net/vb.net
    Par jakline2010 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/07/2012, 17h06
  3. Probleme sur Autocompletion
    Par Lastday dans le forum ASP
    Réponses: 2
    Dernier message: 01/02/2011, 16h48
  4. Probleme avec autoComplete
    Par soffru dans le forum JSF
    Réponses: 1
    Dernier message: 28/12/2009, 09h00
  5. [AJAX] Ajax.Autocompleter avec id
    Par darontankian dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/10/2008, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo