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

Symfony PHP Discussion :

include_partial dans un layout et sfEasyGMapPlugin


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut include_partial dans un layout et sfEasyGMapPlugin
    Bonjour,

    J'ai bien fait mumuse avec sfEasyGMapPlugin (merci aux auteurs), et maintenant que ça fonctionne j'aimerais afficher une carte dans un "partial" qui est appelé dans le "layout" principal.

    Le souci est pour transmettre les données de ma requête !

    Dans mon action je fais :

    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
      public function executeRegion(sfWebRequest $request)
      {
     
        //select * from club_liste A left join club_region B ON A.no_region=B.no WHERE B.slug = 'alsace' order by A.club ASC
        $this->club_liste_list = Doctrine_Query::create()
            ->select("*, b.region AS region, b.slug AS slug_region")
            ->from("ClubListe a")
            ->leftJoin("a.ClubRegion b")
            ->where('b.slug = ? ', $request->getParameter('region'))
            ->andWhere('online = ?', 1)
            ->addOrderBy('a.club ASC')
            ->execute();
     
        $this->gMap = new GMap();
        $this->gMap->setWidth(512);
        $this->gMap->setHeight(400);
        $this->gMap->setZoom(8);
        $test=array();
        foreach ($this->club_liste_list as $address){
            $test[] = $address->getAdresse().', '.$address->getDpt().' '.$address->getVille().', France';
        }
       foreach ($test as $address)
        {
          $geocoded_address = new GMapGeocodedAddress($address);
          $geocoded_address->geocode($this->gMap->getGMapClient());
          $this->gMap->setCenter($geocoded_address->getLat(), $geocoded_address->getLng());
          $this->gMap->addMarker(
          new GMapMarker($geocoded_address->getLat(), $geocoded_address->getLng())
        );
        }
     
      }
    et dans mon Layout principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include_partial('global/boxe_googleMap_300x200_241109', array('gMap'=>$gMap)) ?>
    et le message d'erreur est "Notice: Undefined variable: gMap in layout.php on line 252" !

    Bon je sais pas si c'est bien programmé pour le moment, car j'ai encore du mal à appréhender tout Symfony, et je me pose encore la question : si pour afficher une colonne de "boîte" sur mon site avec un rectangle pub, une video, une liste de news suivant le module appelé, c'est la bonne solution

    Dans tous les cas, merci d'avance à ceux qui éclaireront ma voie

  2. #2
    Membre éclairé Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Par défaut
    En gros ton problème est de faire passer une variable calculé dans ton action jusqu'à ton template principale (layout.php) ?

    Sur mon projet j'utilise deux techniques pour faire ce genre de chose mais je doute que ce soit la bonne..

    1) passer par sf_flash
    sf_flash permet 'normalement' de faire passer des messages flash (une petite bulle indiquant le résultat d'une action ou des erreurs etc ... )
    Mais il peut transporter bien plus de 'trucs'

    action.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sf_flash->set('gmap',$gmap);
    layout.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(sf_flash->have('gmap'))
    {
      echo sf_flash->get('gmap');
    }
    2) En passant par myUser
    sur mon site on gère également pas mal de localisation à différent endroits de la page. Afin de toujours savoir dans quelle ville on se trouve cette information est enregistré dans myUser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //au moment de définir le lieux
    sf_user->goto($lieux);
    Je pense qu'il existe d'autres techniques (surement meilleur)

    --
    ps : je suis sous symfony 1.0 ...

  3. #3
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Bonsoir remyli,

    C'est peut être un bon début

    J'ai fais le test avec Symfony 1.2, ce qui donne (pour infos) :

    Dans action.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getUser()->setFlash('gmap',$this->gMap);
    et dans layout.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if($sf_user->hasFlash('gmap'))
    {
        use_helper('Javascript','GMap');
        echo'<div style="margin: 0 0 5px 0; background-color:#fff; width:302px;border: 1px solid #054323;">';
        include_map($sf_user->getFlash('gmap'));
        echo'<div id="console_div" style="font-size:large"></div>';
        include_map_javascript($sf_user->getFlash('gmap'));
        echo'</div>';
    }
    ?>
    La carte ne s'affiche pas pour le moment, mais comme le code HTLM possède bien le code javascript, je pense que c'est un petit bug à modifier.

    Mais le souci est que je n'arrive pas à instancier la méthode "setFlash" sans la session avec l'objet sf_user. Ce qui me pose des soucis de cache, puisque l'internaute de mon site aura tout le temps cette carte sur toutes les pages, même en dehors de l'action choisis !

    Alors cela peut être très pratique comme tu disais, pour afficher une info ciblée pour un utilisateur géolocalise, mais pas pour du dynamique dans une action précise.
    Mais je garde tes infos, merci pour ton aide

  4. #4
    Membre éprouvé

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Par défaut
    Pour ce que tu veux faire le mieux est d'utiliser un component_slot
    Un component seul est en fait un partial associé à une action.
    Un slot permet de différer l'affichage de la partie contenu dans celui-ci.

    L'association des deux te permettre de facilement réaliser ce que tu veux.
    Pour plus d'informations : Components slots

    Les flashs messages sont destinés à afficher des messages à l'utilisateur et sont enregistré en session jusqu'au prochain affichage. Ils ne doivent pas être utilisé pour passer des paramètres.

  5. #5
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Bonjour,

    Merci pour la réponse je peux enfin afficher une barre latérale personnalisé.

    Mais par contre, et ce n'est pas de ta faute, je trouve la notice des "component" un peu faible ! Manque d'exemples et d'explications

    Bon maintenant pour prolonger la discution, le code javascript est bien présent dans mon code HTML, mais la carte ne s'affiche pas ! Pourtant dans le template de mon module en court, si j'inclus mon code, identique au partial de mon component, la carte s'affiche comme par miracle ? Je comprends plus rien.

    Dans tous les cas merci pour ta solution

  6. #6
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Ah j'ai trouvé le bug

    Il faut rajouter dans le fichier de config du module, la ligne vers l'api google comme ci dessous.

    Ce qui me fait me poser la question, comment dans l'action du "component", on peut ajouter dynamiquement une ligne de javascript dans le header HTML quand on a mis le tag <?php include_javascripts() ?> dans le layout principal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    all:
      stylesheets: [/css/sfEasyGMapPlugin.css]
      javascripts: [/js/sfEasyGMapPlugin.js, http://maps.google.com/maps/api/js?sensor=false]  
     
      components:
        sidebar:  [club, gmap]

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2007, 16h32
  2. Variation dans une Layouts
    Par jeff_! dans le forum SharePoint
    Réponses: 0
    Dernier message: 25/07/2007, 08h43
  3. Réponses: 3
    Dernier message: 15/06/2007, 11h27
  4. Réponses: 1
    Dernier message: 13/06/2007, 18h14
  5. [Struts-Layout] TextArea dans un <layout:collection>
    Par bobic dans le forum Struts 1
    Réponses: 6
    Dernier message: 12/01/2007, 12h43

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