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 Framework PHP Discussion :

comment transmettre une variable dans un modèle ?


Sujet :

Zend Framework PHP

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut comment transmettre une variable dans un modèle ?
    Bonjour a tous, je suis entraînt de crée des images a visualiser via une base de donnnée, j'amerais transmettre une information pour connâitre l'élément courant de l'image et de l'utiliser pour faire une pagination, par contre je ne sais pas comment m'y prendre, faut 'il dans la class IndexController crée un attribut ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class IndexController extends Zend_Controller_Action
    {
         public $image_en_court= 1 ; //on commence la requete pour récup les images à 1
    public fonction init()
    {
    ......
    }
     
    }
    ou faut mettre cette attribut dans la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public function init()
        {
            $this->view->jQuery()->enable();
         public  $image_en_court= 1 ; //on commence la requete pour récup les images à 1
        }
    une fois que j'ai cette variable, comment je fais pour l'envoyer à traves le modèle ou qu'il faut l'envoyer directement sur la vue?

    voici ce que je pensais comme enchaînement

    - récuperer $image_en_cour
    - récupérer le nombre maximum d'image a afficher
    -determiner un nombre par page (totalimage/ceil)
    - on fait une requête qui commence par $image_en_cour
    - on fait une boucle avec le nombre par page et j'incrémente $ image_en_cour a chaque fois que l'image a été récupérer



    voici la methode qui appelle les images
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $image = new Application_Model_DbTable_Image();
            $this->view->image=images->fetchAll(); //comment récupérer le nombre total d'élément peut être que fechAll() n'est pas fait pour cela?
    merci d'avance de vos réponse, et de vos conseils

  2. #2
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Je n'ai absolument rien compris à ton message du moins le début, du coup très dur de comprendre la suite.
    Je t'invite à te relire et formuler correctement tes besoins

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    je vais essayer de reformuler la demande

    j'ai une base de donnée avec le nom des images et leur miniature

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TABLE IMAGE
    -------------------
    id_image    | id_appartient_a       | url_image
    1             |  2                    |  b1
    2             |  2                    |  b2
    3             | 2                     |  b3
    4             | 44                   |  b4
    5             |44                    |  b5
    mon but est de faire une requête dans cette table avec le modèle Image

    - je souhaite connaître combien au total il y a de proprietaire
    - je recherche dans cette table tous les image qui appartient à "2"
    maintenant si je fait une fetchAll(), je vais récupérer les 3 images (b1,b2,b2)
    +celle d'un autre proprietaire (b4,b5)

    avec mon controller j'ai récupérer toutes les images
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public function indexAction()
        {
            Application_Model_DbTable_image();
            $this->view->image=$image->fetchAll();
     
        }
    dans ma vu j'affiche donc le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        <?php foreach ($this->images as $image) : ?>
            <tr>
                <td><?php echo $this->escape($image->id_image); ?></td>
                <td><?php echo $this->escape($car->prporietaire); ?></td>
                <td><?php echo $this->escape($car->image miniature); ?></td>  
            </tr>
        <?php endforeach ?>
    La vu va m'afficher tous les résultats en même temps,ce que je voudrais c'est qu'il m'affiche d'abord par groupe d'utilisateur

    -toutes les images qui appartiennent à 2
    -puis celle de 44
    etc...

    lorsque qu'on passera aux prochaine proporietaire on augementera une variable à 1, cette variable servira à determiner la pagination, on veut visualler par exemple 5 propriétaires par pages.

    Peut être que la bonne method n'est pas de chercher toutes les données de cette table , de cherchercher avec une requete juste le proprietaire numéro 2 puis ensuite le suivant mais si je fais cela, il faut une boucle de requêtes

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Donc j'ai bien compris plus ou moins ton problème, maintenant j'aimerai savoir comment tu veux que le résultat visuel soit.

    Une petit screen ou autre serait bien.
    Car la de ce que je comprends tu veux juste que ça soit afficher par ordre à qui ça appartient, dans ce cas là un order devrait te suffire

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Pour le moment comme je débute je souhaite au moins que cela soit afficher chronologiquement l'id "appartient a".

    voici un petit croquis c'est plus simple de comprendre, d'ailleur c'est ce que je dois avoir à l'image.
    cela ressemblerai plustôt ceci en html avec le premier résutat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div>
      <h1>proporiot $appartient_a</h1>
      <ul>
          <li>image$i</li> //boucle for répéter 3 fois
     </ul>
    </div>


    j'ai mis id_appartient_a 44 au pif mais théoriquement si l'on efface pas un tulpe de cette colonne on a normalement un nombre qui ne cesse d'augmenter avec un pas de 1.

    pour les images normalement je sais d'avance qu'il y aura toujours 3 images, si j'ai mis un "b" au début c'est paceque c'est pour utiliser les regex, normalement je recherche seulement les images qui commence par "b" pour les affichées.

  6. #6
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    donc tu rajouter la contrainte order avec le champs sur lequel tu veux que ça soit trié et dans ton foreach tu fais un test et si c'est un nouveau proprio (différent du précédent) tu fais quelque chose

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	donc tu rajouter la contrainte order avec le champs sur lequel tu veux que ça soit trié
    oui je pense que je devrais trier ma colonne id_appartient_a avant d'utiliser cette information
    si je comprend bien je dois changer ma requête qui est dans le controleur en ajoutant une contrainte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         $image = new Application_Model_DbTable_Image();
         $this->view->image=images->fetchAll(); //je doit modifier cette requete afin qu'il me range par ordre croissant id_appartient ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tu fais un test et si c'est un nouveau proprio (différent du précédent)
    donc je comprend bien je dois utiliser ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $temp = resultat + 1
    if(resultat == resultat =+1)
    {
       on continue d'afficher les images
    }
    else
    {
    on passe au prochain propriot
    }
    je vais essayer d'abord de tous afficher une fois que j' aurais fini j'ajouterais la pagination, il faut que j'avance doucement pas à pas.

  8. #8
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Oui il faut que tu modifie ton appel avec fetchAll.
    Par contre ton test je doute qu'il fonctionne mais fais déjà la première étape

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    En voulant simplifier au maximum je pense que je ne vais pas y arriver comme je le pensais

    Dans mon histoire il y a 2 tables donc 2 modèles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TABLE IMAGE
    --id_image-- | id_proprio|url
    et la TABLE PROPRIO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    --id-proprio|nom|prenom|age
    Au début je pensais que je recherche toutes la valeur des proprios et je les affiches ensuite les images mais cela va tous mélanger , je pense que je n'ai pas le choix de faire une jointure entre ces 2 tables

    Une fois qu j'ai le résultat de la jointure je commence à le trier .

    j'ai vu qu'il fallait utliser select() pour faire une jointure, mais
    comment je fais pour lier les 2 modèles Images et Proporios


    ou pour faire la requête il faut utliser ceci dans le controleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host ' => '127.0.0.1',
    'username' => 'root',
    'password' => blalbal',
    'dbname' => 'gallerie'
    ));
     
    $select = $db->select() //utilisation de la methode select pour la jointure
     
    $select->from(array("p" => "id_proprio"), "nom","prenom","age")
    ->join(array("i" => "url"),
    "p.id_proprio=i.id_proprio",
    ->ORDERBY id_image ASC;
    bon je pense que ma requête est fausse et un peut tirer par les cheuveux mais je souhaite savoir si c'est cette methode qu'il faut faire ?

  10. #10
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Oui il te faut faire une jointure dans ce cas là par contre la tienne est en effet fausse, il te faut les noms de tes tables et respecter lire la documentation en ce qui concerne la création d'une requete sous zend avec jointure, après on peut te corriger mais cela te permet d'apprendre également

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    je suis entrain de chercher sur la doc qui fait 1000pages comment je fait ma jointure (la 1.7), c'est super long

    avec ce script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $image = new Application_Model_DbTable_Image();
            $this->view->image = $imags->fetchAll();
    comment zend fait pour savoir la connexion mysql puisque c'est automatique, sur les quelques exemple lorsqu'il fait une requête il n'utilise pas $db ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host' => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname' => 'test'
    ));

  12. #12
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Dans les exemple c'est certainement en MVC et ce sont des classes qui étendent Zend_Db_Table, du coup en faisant $this ça suffit mais toi tu peux utiliser $db.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->select()->from('table')->where($db->quoteIdentifier('id').' = ?', $id)

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    je vais faire un autre poste car je ne maître pas encore la lecture d'une donnée dans une table.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/08/2006, 09h23
  2. Réponses: 1
    Dernier message: 19/05/2006, 19h57
  3. Ou et comment insérer une variable dans la requete?
    Par forzaxelah dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/05/2006, 11h33
  4. Comment completer une variable dans une PROC
    Par Le Basque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/09/2004, 17h18
  5. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40

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