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

Langage PHP Discussion :

Création "section" de recherche dans une page


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut Création "section" de recherche dans une page
    tout le monde,

    Le nombre d'information que j'ai à gérer avec mon application étant gigantesque, je cherche à créer dans mes pages une "section de recherche".

    Je m'explique :

    Je voudrais par exemple pouvoir taper le nom/ début du nom d'un client ou sa date d'arrivée ou encore son numéro de client. et récupérer les résultats qui seront en fonctions des informations saisies.

    je souhaiterais que les résultats s'affichent "instantanément" si possible (le temps de faire la requête et de récupérer les infos bien évidement pris en compte ).

    Je ne sais pas du tout comment m'y prendre, si il faut obligatoirement un rechargement de page ou si l'on peut afficher les résultats dans un tableau presque instantanément sans avoir à cliquer sur un bouton valider ...

    Quelqu'un pourrait il m'éclairer la dessus ???
    J'espère ne pas avoir été trop flou ...

    Merci d'avance !!!!
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut Sa avance ...
    J'ai trouvé comment faire pour ajouter le formulaire de recherche

    maintenant reste à trouver comment :
    - faire la requête de sélection en fonction de plusieurs critères qui seront remplis, ou non ...

    - charger les résultats dans un tableau placé en dessous du formulaire dans la même page (sans rechargement de page si possible ...)

    ... va pas être facile tout sa ...
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    C'est tout à fait possible, mais cela demande une organisation et des connaissances en JSON, Ajax, Jquery.
    Il faudra bien faire la différencie entre ce qui se passe du coté client et du coté serveur.
    JSON (Javascript Object Notation) qui permet de transmettre des informations entre le serveur et le client pour le javascript.
    Ajax pour gérer les requêtes en mode silencieux sans recharger la page.
    JQuery pour l'autocomplete et la manipulation du DOM pour afficher un popup ou modifier la page en fonction du retour d'information de la question de l'utilisateur.

    Il faut donc bien s'organiser, ne connaissant pas tes données je vais te guider dans la démarche, et tu posteras le code au fur et à mesure.

    Premièrement les requêtes.
    Créer dans tes modèles de tables les fonctions pour interroger la DB :
    - liste des clients (exemple id_client, nom_client)
    - les informations dont tu veux afficher pour un client (where id_client)

    Ces fonctions seront appelés depuis les controller.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Un énorme pour cet aide !!!

    Premièrement les requêtes.
    Créer dans tes modèles de tables les fonctions pour interroger la DB :
    - liste des clients (exemple id_client, nom_client)
    - les informations dont tu veux afficher pour un client (where id_client)
    Pour la liste des clients :
    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
     
    <?php
    class Clients extends Zend_Db_Table
    {
    	protected $_name = 'client';
     
    	public function select_all_client($id)
    	{
    		$db = Zend_Db_Table_Abstract::getDefaultAdapter(); 		 
    		$select = $db->select()
    		->from($this->_name)
    		->where('numero_client='.$id);
     
    		return  $db->fetchAll($select);
    	}
    }
    Par contre pour le where, j'ai peu de ne pas avoir bien compris ce que je devais faire,
    ceci est il correct ?? : (il reste quelque points pas très clair, je les ai mis en commentaire)
    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
     
    <?php class Clients extends Zend_Db_Table
    {
    	protected $_name = 'client';
     
    	public function select_all_client($id)
    	{
    	      $db = Zend_Db_Table_Abstract::getDefaultAdapter(); 		 
    	      $select = $db->select('numero_client', 'nom_client', 'responsable_client', 'adresse_client', 'code_postal_client', 'ville_client')
    	      ->from($this->_name)
    	      ->where('numero_client='.$id)
                  ->or ('nom_client'=.) // je ne sais pas quoi mettre ici comme je ne recupère que l'id ...
                  ->or ('responsable_client'=.) //pareil ici ...
                  ->or ('code_postal_client'=. ); //pareil ici ...
     
     
    	return  $db->fetchAll($select);
    	}
    }
    mais comment faire pour ne prendre en compte que les champs qui ont été saisis ?

    et tu posteras le code au fur et à mesure.
    Pas de soucis
    et j'espère que cela servira à d'autres !!!

    Encore Merci !
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Non il te faut 2 requêtes :
    une pour la liste de tous les clients, pour l'autocomplete (la recherche pour l'instant sur le nom du client)
    l'autre pour renvoyer toutes les informations d'un client choisi lors de la recherche.

    De Plus n'utilise pas cette syntaxe select_all_client qui pour ZF veut dire quelques chose.
    Autre chose avant d'utiliser Zend_Db_Select, une bonne requête SQL est plus fiable et claire.

    Voici notre modèle de table 'client'
    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
     
    <?php
    class TClients extends Zend_Db_Table_Abstract {
     
     
    	/**
    	 * nom de la table 
    	 */
    	protected $_name = 'client';
     
     
    	/**
    	 * Nom de la clé primaire 
    	 */
    	protected $_primary = "numero_client";
     
     
    	/**
    	 * Selection de toutes les fiches client
    	 */
    	public function selectData () {
     
    		$sql = "SELECT * FROM client";
     
    		return $this->getAdapter('db')->fetchAll($sql);
    	}
     
    	/**
    	 * Selection d'une fiche client
    	 */
    	public function selectDataByID ($numero_client) {
     
    		$sql = "SELECT * FROM client WHERE numero_client = ".$numero_client;
     
    		return $this->getAdapter('db')->fetchAll($sql);		
    	}
     
     
    } //Eof:: class
    ?>
    Dans ton bootsrap (si tu n'utilise pas Zend_Application) définit ton adapter par défaut une fois pour toutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // fournit les paramètres de connexion à Zend_Db
    $db = Zend_Db::factory($this->_configMain->db); // Selon ta méthode
    // Réalise une connexion à la base de données pour contrôle
    $db->getConnection();
    // Je donne à ma classe Zend_Db_Table l'objet adaptateur par défaut 
    Zend_Db_Table::setDefaultAdapter($db);
    // Tous les résultats des requêtes seront sous forme d'objet
    $db->setFetchMode(Zend_Db::FETCH_OBJ);
    Je passe à le deuxième étape, post suivant.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Questions pour être sur de bien comprendre :
    je pense dire des bétises mais comme je l'ai dit c'est pour bien comprendre.

    il me faut une nouvelle classe ?? dans ma classe client j'ai actuellement ceci :
    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
     
    <?php
    class Clients extends Zend_Db_Table
    {
    	protected $_name = 'client';
     
    	public function select_all_client($id)
    	{
    		$db = Zend_Db_Table_Abstract::getDefaultAdapter(); 		 
    		$select = $db->select()
    		->from($this->_name)
    		->where('numero_client='.$id);
     
    		return  $db->fetchAll($select);
    	}
    }
    concernant mon boostrap maintenant (il se situe dans : C:\wamp\www\XXXXXXX\index.php)
    contient ceci :
    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
     
    <?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());
     
    require_once 'Zend/Loader/Autoloader.php'; 
    Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
     
    // Chargement de la configuration
    $config = new Zend_Config_Ini('./application/config.ini', 'general');
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
     
    // Mise en place de la BDD
    $db = Zend_Db::factory($config->db);
    Zend_Db_Table::setDefaultAdapter($db);
     
    // mise en place du controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory('./application/controllers');
    Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
     
    // execution
    $frontController->dispatch();
    j'y ajoute ton code ?

    Merci de ta patience et de tes précieux conseils

    Pour information, pour ma connection j'utilise un fichier config.ini
    qui se situe dans: C:\wamp\www\XXXXXXX\application\config.ini
    et qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [general]
    db.adapter = PDO_MYSQL
    db.params.host = localhost
    db.params.username = ********
    db.params.password = ********
    db.params.dbname = *********
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Deuxième étape le controller AJAX

    Nous avons besoin d'un controller spécifique à des requêtes AJAX du client.
    Voir explication dans le code
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
    class AjaxController extends Zend_Controller_Action {
     
    	/**
    	 * Initialiseur de ma classe
    	 */
     	public function init () {
     
            //si requete ajax on désactive les layouts et le rendu de la vue
            if($this->_request->isXmlHttpRequest()){
    	        $this->_helper->layout->disableLayout();
                $this->_helper->viewRenderer->setNoRender(true);
                $this->_helper->viewRenderer->setNeverRender(true);
            }
     
     	}//Eof:: init
     
    	/**
    	 * Renvoie la liste de mes noms de client
    	 */
    	public function clientAction() {
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectData();
     
    		// Création de ma liste (id et text vont être utilisé pour JQuery Suggest)
    		foreach ($Clients as $Client) {
    			$list[] = array(  'id' 	=> $Client->numero_client
    							, 'text'=> $Client->nom_client
    							);
    		}
     
    			// Je renvoie ce tableau à ma vue au format JSON
                $this->_helper->json($list
                                      , array(
                                        		'enableJsonExprFinder' => true
                                              ));
     
    	}//Eof:: clientAction
     
     
    	/**
    	 * Renvoie la fiche d'un client
    	 */
    	public function monclientAction() {
     
    		// Récupère le numéro du client
    		$numero_client = $this->_request->getParam('id');
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectDataByID($numero_client);
     
    		// Création de ma liste
    		foreach ($Clients as $Client) {
    			$list['client'][] = array(  'numero_client'	=> $Client->numero_client
    									  , 'nom_client'	=> $Client->nom_client
    									  , 'responsable_client'	=> $Client->responsable_client
    									  , 'adresse_client'	=> $Client->adresse_client
    									  , 'code_postal_client'	=> $Client->code_postal_client
    									  , 'ville_client'	=> $Client->ville_client
    							);
    		}
     
    			// Je renvoie ce tableau à ma vue au format JSON
                $this->_helper->json($list
                                      , array(
                                        		'enableJsonExprFinder' => true
                                              ));
     
    	}//Eof:: clientAction	
     
    }//Eof::Class
    ?>
    Voilà pour notre controller, il nous faut une zone de texte pour la recherche.
    Le plus simple est d'utiliser une aide de vue et non la construction d'un formulaire avec Zend_Form

    Dans ta page (la vue) ou tu veux faire la recherche met 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
     
    <form id="form">
    <span>
    	<?php echo $this->formText(
    						"suggestBoxClient"
    					  , "Tapez les premières lettres pour une suggestion"
    					  , array( 'size' => '53'
    			  		  ,'class' => 'estompe'	
    				  		)	
    			)?>
    </span>
    </form>
    Terminer pour le coté serveur maintenant, plus que du javascript avec l'aide de JQUERY.

    3ème étapes l'autocomplete, post suivant.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Pour ton bootstrap si je reprends une partie de ton code en ajoute du code cela donne

    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
     
    // Mise en place de la BDD
    try {
          // fournit les paramètres de connexion à Zend_Db
          $db = Zend_Db::factory($config->db);
          // Réalise une connexion à la base de données pour contrôle
        	$db->getConnection();
        	// Je donne à ma classe Zend_Db_Table l'objet adaptateur par défaut 
    	Zend_Db_Table::setDefaultAdapter($db);
    	// Tous les résultats des requêtes seront sous forme d'objet
    	$db->setFetchMode(Zend_Db::FETCH_OBJ);
     
    // Jeu d'exception
    } catch (Zend_Db_Adapter_Exception $e) {
        die ("Probablement mauvais identifiants,ou alors le SGBD n'est pas joignable: ".$e->getMessage());
    } catch (Zend_Exception $e){
        die("factory() n'a pas réussi à charger la classe de l'adaptateur demandé : ".$e->getMessage());
    }
    Pour le modèle de table j'ai effectivement refait une class TClients en remplacement de la tienne.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    D'accord !
    J'ajoute ton code au mien pour le bootstrap !

    Concernant la classe, je m'en sers pour d'autre chose, faut il que je re-code la partie qui l'utilisait ?
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut BOOTSTRAP.PHP
    Comme précisé au dessus, je poste tout mon code au fur et a mesure.

    Voici le bootstrap qui se situe dans C:\wamp\www\XXXXXXX\index.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
     
    <?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());
     
    require_once 'Zend/Loader/Autoloader.php'; 
    Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
     
    // Chargement de la configuration
    $config = new Zend_Config_Ini('./application/config.ini', 'general');
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
     
    // Mise en place de la BDD
    try {
          // fournit les paramètres de connexion à Zend_Db
          $db = Zend_Db::factory($config->db);
          // Réalise une connexion à la base de données pour contrôle
        	$db->getConnection();
        	Zend_Db_Table::setDefaultAdapter($db);
    	// Tous les résultats des requêtes seront sous forme d'objet
    	$db->setFetchMode(Zend_Db::FETCH_OBJ);
     
    // Jeu d'exception
    } catch (Zend_Db_Adapter_Exception $e) {
        die ("Probablement mauvais identifiants,ou alors le SGBD n'est pas joignable: ".$e->getMessage());
    } catch (Zend_Exception $e){
        die("factory() n'a pas réussi à charger la classe de l'adaptateur demandé : ".$e->getMessage());
    }
     
    // mise en place du controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory('./application/controllers');
    Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
     
    // execution
    $frontController->dispatch();
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut TClients.php
    Voici la classe TClients qui se trouve dans : C:\wamp\www\XXXXXXX\application\models\TClients.php

    (simplement recopié de Freeseb74 )
    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
     
    <?php
    class TClients extends Zend_Db_Table_Abstract {
     
     
    	/**
    	 * nom de la table 
    	 */
    	protected $_name = 'client';
     
     
    	/**
    	 * Nom de la clé primaire 
    	 */
    	protected $_primary = "numero_client";
     
     
    	/**
    	 * Selection de toutes les fiches client
    	 */
    	public function selectData () {
     
    		$sql = "SELECT * FROM client";
     
    		return $this->getAdapter('db')->fetchAll($sql);
    	}
     
    	/**
    	 * Selection d'une fiche client
    	 */
    	public function selectDataByID ($numero_client) {
     
    		$sql = "SELECT * FROM client WHERE numero_client = ".$numero_client;
     
    		return $this->getAdapter('db')->fetchAll($sql);		
    	}
     
     
    } //Eof:: class
    ?>
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Concernant le post numero 7,
    tu parle de controler ajax, ou dois-je placer ce code ??
    j'ai tenté C:\wamp\www\XXXXXXX\application\controllers\AjaxController.php

    mais je tiens a vérifier que l'on se comprenne bien


    pour la vue je m'en occupe de suite
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Pour la zone de texte de recherche (non des clients), nous voulons une suggestion à la frappe.
    Pour ceci nous allons utiliser un plugin JQuery à télécharger ici

    enregistre le fichier .js et .css dans ton application, puis fait le lien en utilisant le code suivant par exemple dans une action du controler.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->view->headScript()->appendFile ('http://localhost/monsite/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
    $this->view->headLink()->appendStylesheet('http://localhost/monsite/public/css/jquery.jsonsuggest.css', 'screen');
    J'utilise des aides de vues dit "placeholder". ($this->headScript() et $this->headLink() dans une vue)

    Maintenant nous voulons paramétrer ses outils.
    Créer un fichier client.js et appel comme précédemment.

    voici le code
    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
     
    // sur chargement du document DOM termniné (soit notre page HTML) 
    $(document).ready(function() {
     
    	function ficheClient (item) {
     
    		 // Envoi requête AJAX   	
    	    $.ajax({
    	         type: "POST"
    	       , url: "ajax/monclient"
    	       , data : {'id':[item.id]}
    	       , dataType: "json"
    	       , success: function(reponse){
     
                           // Sur Succès de la réponse AJAX
     
    	              // Reinitialise l'input de recherche
    	 	     	$("input#suggestBoxClient").val("Tapez les premières lettres pour une suggestion");
    	 		$("input#suggestBoxClient").addClass("estompe");
     
    			} // Eof:: success
    		});  //Eof:: ajax 
     
    	}//Eof:: ficheClient
     
    	// Gère le suggest après retour de la liste des documents au format json
     	// fait appel au script jquery.jsonsuggest.js
     	jQuery(function() {
     		$.getJSON("ajax/client",
     			function(data){
     				$('input#suggestBoxClient').jsonSuggest(data,  {minCharacters:3,onSelect:ficheClient});
     			}
     		);	
     	}); // Eof:: jQuery
     
     
     // Supprime la valeur de l'input de saisie suggest lors du focus par la souris
     	$("input#suggestBoxClient").focus (
     			function() {
     				$("input#suggestBoxClient").val("");
     				$("input#suggestBoxClient").removeAttr("class");
     			}
     	); // Eof:: $("input#suggestBoxClient").focus
     
     
    }); // Eof:: Chargement de ma page terminé
    Il faut maintenant que tu te familiarises avec la console Firebug qui te permet de visualiser les requêtes AJAX et donc que les questions et réponses se réalise correctement.

    Une fois que tout sera rentrer dans l'ordre, il faut savoir comment présenter les informations de la fiche client .
    Bon Courage.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par cyrux Voir le message
    Concernant le post numero 7,
    tu parle de controler ajax, ou dois-je placer ce code ??
    j'ai tenté C:\wamp\www\XXXXXXX\application\controllers\AjaxController.php
    Oui, c'est un controller comme un autre, au sens MVC !
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Oui, c'est un controller comme un autre, au sens MVC !
    Héhé !! c'est que je commence a comprendre !!
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Mince !! J'ai du rater une étape la ... rien ne s'affiche

    puis fait le lien en utilisant le code suivant par exemple dans une action du controler
    nous parlons bien de AjaxController ??

    J'ai fais ceci pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$this->view->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
    		$this->view->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/client.js', 'text/javascript');
    		$this->view->headLink()->appendStylesheet('http://localhost/XXXXXXX/public/css/jquery.jsonsuggest.css', 'screen');
    et recopié ton code client.js mais rien ne se passe...

    Je cherchais à avoir plusieurs champs de recherche (numéro_client, nom_client, responsable_client, code_postal_client) et afficher les résultats dans un tableau (en dessous) en fonction de ces champs remplis ?

    y a t il possibilité de faire ceci avec plusieurs champs ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Il est temps de contrôler ton code et les résultats attendues.

    Dans le fichier AjaxController.php fait un Zend_Debug::Dump($list); pour contrôler le résultat des requêtes.

    Pour tester la function clientAction() dans ton navigateur taper url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost/xxxx/ajax/client
    Pour tester la function monclientAction() dans ton navigateur taper url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    http://localhost/xxxx/ajax/monclient/id/numero_client de la base
    Quand tu utilises une aide de vue dite 'placeholder' voir doc ici, il faut contrôler ta page HTML, du bon déroulement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Dans une action d'un controller
    $this->view->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
     
    // ou dans une vue (sans le view)
    $this->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
     
    // ZF va automatiquement écrire dans la page HTML
    <head>
    ...
    <script src="http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js" type="text/javascript">
    ...
    </head>
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  18. #18
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    alors bon coté tests, tout me parait correct,
    j'ai placé le Zend_Debug::dump($list); dans mon fichier AjaxController.php
    pour rappel (C:\wamp\www\XXXXXXX\application\controllers\AjaxController.php)

    et lorsque je saisie l'url => http://localhost/xxxx/ajax/client il me propose une petite fenetre me demandant avec quel logiciel je compte ouvrir le fichier ou si je souhaite l'enregistrer.
    Une fois ouvert, j'ai ce résultat :
    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
     
    // j'ai volontairement remplacé les noms de mes clients par nom du client1,
    // nom du client2, nom du client3 mais les résultats qui me sont retournés
    // sont les bons.
     
    array(1) {
      [0] => array(2) {
        ["id"] => string(1) "1"
        ["text"] => string(25) "nom du client 1"
      }
    }
     
    array(2) {
      [0] => array(2) {
        ["id"] => string(1) "1"
        ["text"] => string(25) "nom du client 1"
      }
      [1] => array(2) {
        ["id"] => string(1) "2"
        ["text"] => string(8) "nom du client 2"
      }
    }
     
    array(3) {
      [0] => array(2) {
        ["id"] => string(1) "1"
        ["text"] => string(25) "nom du client 1"
      }
      [1] => array(2) {
        ["id"] => string(1) "2"
        ["text"] => string(8) "nom du client 2"
      }
      [2] => array(2) {
        ["id"] => string(1) "3"
        ["text"] => string(28) "nom du client 3"
      }
    }
     
    [{"id":"1","text":"nom du client 1"},{"id":"2","text":"nom du client 2"},{"id":"3","text":"nom du client 3"}]
    ensuite, lorsque je réalise le test pour monclientAction() en saisissant cette adresse => http://localhost/xxxx/ajax/monclient/id/2
    (j'ai choisi 2 pour exemple )
    Même système, il me propose la petite fenêtre afin de savoir avec quel logiciel je compte ouvrir le fichier ou si je compte l'enregistrer.
    Une fois ouvert j'ai ce résultat :
    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
     
    // De même j'ai volontairement remplacé les informations de mes clients par // nom du client, nom du responsable client 2, adresse client 2, code postal
    // client2, et ville client 2
    // mais les résultats qui me sont retournés sont les bons.
     
    array(1) {
      ["client"] => array(1) {
        [0] => array(6) {
          ["numero_client"] => string(1) "2"
          ["nom_client"] => string(8) "nom du client 2"
          ["responsable_client"] => string(10) "nom du responsable client 2"
          ["adresse_client"] => string(24) "adresse client 2"
          ["code_postal_client"] => string(5) "code postal client 2"
          ["ville_client"] => string(16) "ville client 2"
        }
      }
    }
     
    {"client":[{"numero_client":"2","nom_client":"nom du client 2","responsable_client":"nom du responsable client 2","adresse_client":"adresse client 2","code_postal_client":"code postal client 2","ville_client":"ville client 2"}]}
    Jusqu'ici, tout me parait correct...

    Bon maintenant j'ai un petit soucis, lorsque je saisi ceci (l'un ou l'autre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Dans une action d'un controller
    $this->view->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
     
    // ou dans une vue (sans le view)
    $this->headScript()->appendFile ('http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js', 'text/javascript');
    et que je contrôle dans la console firebug, rien n'est inséré, j'ai ceci dans ma page html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <head> 
    	<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    	<title>Liste des clients</title>
    	<script type="text/javascript" src="/XXXXXXX/public/js/jquery/jquery-1.4.2.min.js"></script>
    	<script type="text/javascript" src="/XXXXXXX/public/js/jquery/jquery-ui-1.8.2.custom.min.js"></script>
    	<script type="text/javascript" src="/XXXXXXX/public/js/jquery/custom.js"></script>
    	<link href="/XXXXXXX/public/css/custom-theme/jquery-ui-1.8.2.custom.css" type="text/css" media="screen" rel="stylesheet">
     
    <title>
    	Liste des clients		
    </title>
    </head>
    Mais aucune ligne de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script src="http://localhost/XXXXXXX/public/js/jquery/jquery.jsonSuggest.js" type="text/javascript">
    Autre chose, même quand je place la ligne précédente "à la main" dans le layout, celle ci s'affiche dans la console firbug à la suite des autres, mais rien ne se passe pour autant ... ?? bizarre non ??

    Dans ce champs de saisie, l'utilisateur peut saisir ce qu'il souhaite, numéro client et/ou nom client, et/ou nom du responsable et/ou code postal et la recherche se fera automatiquement sur tous les champs ??

    Merci beaucoup de ta patience et de ton aide !!
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  19. #19
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    autre chose qui peut éventuellement servir :

    quand je saisie test par exemple dans la textbox de recherche et que je tape sur la touche entrée, mon url devient :
    http://localhost/XXXXXXX/?suggestBoxClient=test

    ce qui semble tout à fait normal ... non ?
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Bonjour Cyrux,

    Pour répondre à tes diverses questions.

    Concernant les testes sur les requêtes, la petite boite est normale parce que tu as dû mettre un Zend_Debug:ump($list); après la transformation de $list au format JSON.

    Je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Je renvoie ce tableau à ma vue au format JSON
    $this->_helper->json($list , array( 'enableJsonExprFinder' => true ));
    J'utilise une aide d'action qui transforme un tableau PHP array en tableau JSON qui est une notation lisible pour javascript voir site officiel, quand tu lis la doc ZF sur l'aide d'action JSON, cette aide envoie une réponse avec un en-tête 'Content-Type' à application/json. Donc sans faire de Zend_Debug::dump($list), et en ouvrant le fichier avec Notepad++ tu verras tes données avec la notation JSON.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [{"id":"1","text":"nom du client 1"},{"id":"2","text":"nom du client 2"},{"id":"3","text":"nom du client 3"}]
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2015, 21h12
  2. Rechercher dans une page
    Par eric41 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 11/05/2006, 21h34
  3. [PHP-JS] Rechercher dans une page
    Par eric41 dans le forum Langage
    Réponses: 7
    Dernier message: 08/05/2006, 11h05

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