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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Problème d'affichage Foreach dans un template sous Smarty


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [Smarty] Problème d'affichage Foreach dans un template sous Smarty
    Bonjour tout le monde,
    Je vous pose mon problème, je suis actuellement en stage et je dois remodeler un site en php avec Smarty et j'ai un problème avec l'affichage de mon foreach dans le fichier .tpl!

    Voici mon code 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
     /*Test de connection a la base de données*/
    $db = mysql_connect('localhost','root','');
    //on selectionne la base
    mysql_select_db('boutiqueXY', $db);
    //on crée la requête sql
    $sql = 'SELECT distinct name from ps_manufacturer order by name asc';
    //on envoie la requete
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    //on fait une boucle qui va faire un tour pour chaque enregistrement
    // while($data = mysql_fetch_assoc($req))
    	// {
    		// // on affiche les informations de l'enregistrement en cours
    		// echo '<br>'.$data['name'];
    	// }
    //on ferme la connexion à mysql
    mysql_close();
    //test pour le foreach
    $data = mysql_fetch_assoc($req);
    $smarty->assign('montableau', $data);
    et Voici ce que j'ai mis sur le fichier .tpl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <tr>
    		<ul>
    		<option value="0">Choisissez une marque</option>
    			{foreach from=$montableau item=bla}
    				{$montableau.name}
    			{/foreach}
    		</ul>
    </tr>
    et ce que j'obtiens à l'affichage ce n'est que le premier résultat de la requête et même pas dans une liste déroulante alors que je voudrais afficher le tout, dans une liste déroulante.

    Merci de m'aider

  2. #2
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    oulah déjà utilise cette syntaxe plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {foreach $montableau as $item}
    <!-- mon item : {$item} -->
    [...]
    {/foreach}
    Ensuite fait une petite recherche sur les listes déroulantes en HTML...

  3. #3
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    @lucas74
    Suivant ce qu'il demande et suivant la syntaxe que tu proposes il y aurait un petit correctif (il utilise un tableau associatif, et ce que tu proposais afficherait juste des 'array', si le tableau contient ce qu'il faut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {foreach $montableau as $item}
    <!-- mon item : {$item['name']} -->
    [...]
    {/foreach}
    Et si NicoWeb01 n'obtient pas de liste déroulante c'est parce que non seulement son code php est faux ou incomplet mais aussi son code smarty l'est aussi. Il faudrait boucler dessus comme ce qu'il a mis en commentaire mais juste mettre tout ça dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = mysql_fetch_assoc($req);
    Et le code smarty aurait dû être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {foreach from=$montableau item=bla}
    	{$bla.name}
    {/foreach}
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  4. #4
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par krachik Voir le message
    Et le code smarty aurait dû être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {foreach from=$montableau item=bla}
    	{$bla.name}
    {/foreach}
    Précisément, pourquoi pas :
    {foreach $montableau as $bla}
    {$bla.name}
    {/foreach}

  5. #5
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    ça marche aussi, j'étais en train de corriger ce qu'il avait écrit(et je ne pense pas avoir lu sur le site de smarty que ça soit une syntaxe dépréciée). Les nouvelles versions de smarty offrent plus de flexibilité !
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  6. #6
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    non c'est juste qu'à mes yeux c'est plus clair

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour et désolé d'avoir été aussi tardif à répondre, j'ai essayé de passer un peu de temps sur ce code mais rien n'y fait, je n'arrive pas à afficher les données d'une requête dans le fichier .tpl!! Si quelqu'un pourrait m'aider, je lui en serait reconnaissant. Merci

    fichier.php
    <code>
    //requete de selection des pays
    $pays = Db::getInstance()->getRow('
    SELECT name FROM '._DB_PREFIX_.'country_lang ORDER BY name ASC');
    self::$smarty->assign('name', $pays);
    </code>

    fichier.tpl
    <code>
    <p class="text">
    <label for="pays">{l s='Pays'}</label>
    <select name="pays" id="pays">
    <option value="0">{l s='-- Choisir --'}</option>
    {foreach $pays as $bla}
    <option value="{$bla.name}">{$bla.name|escape:'htmlall':'UTF-8'}</option>
    {/foreach}
    </select>
    </p>
    </code>

  8. #8
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour,

    Je me demande pourquoi tu boucles ton foreach sur la variable $pays alors que c'est $name que tu as déclaré?
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    je boucle sur $pays parce que j'ai vu cela dans un exemple, et j'ai quand même essayé avec $name, cela ne fonctionne pas. i'm a desperate :/

  10. #10
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Citation Envoyé par NicoWeb01 Voir le message
    je boucle sur $pays parce que j'ai vu cela dans un exemple,
    C'est super marrant que tu dises ça, on copie les exemples sans tenir compte de ce dans quoi on les colle?

    Citation Envoyé par NicoWeb01 Voir le message
    et j'ai quand même essayé avec $name, cela ne fonctionne pas. i'm a desperate :/
    La question serait alors de voir ce que renvoie ta variable $pays dans le code php, ça m'a tout l'air d'être du prestashop, tu confirmes?
    Donc voir ce que fait getRow et ce que donne un print_r($pays); par exemple
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par krachik Voir le message
    C'est super marrant que tu dises ça, on copie les exemples sans tenir compte de ce dans quoi on les colle?


    La question serait alors de voir ce que renvoie ta variable $pays dans le code php, ça m'a tout l'air d'être du prestashop, tu confirmes?
    Donc voir ce que fait getRow et ce que donne un print_r($pays); par exemple
    Merci de ta réponse, c'est bien du Prestashop, et sinon je viens de trouver mon erreur, étant donné que je suis feignant et que j'ai beaucoup, mais alors beaucoup recopier le code des autres, j'ai pas pensé s'il y 'avait un if quelque part qui me bloquait. En regardant de plus près, j'ai vu une condition qui m'a inhibé dans l'envoie de mes variables.
    Donc, j'ai changé le $pays par un $name et j'ai réussi à passer mes variables sur le template.

    Merci pour vos réponses et votre temps précieux.

    Cordialement.

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

Discussions similaires

  1. Problème d'affichage dynamique dans un .hta
    Par sebastienadam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 03/08/2009, 16h33
  2. [Custom Control] Comment résoudre un problème d'affichage uniquement dans Blend ?
    Par choas dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 29/09/2008, 12h23
  3. Réponses: 5
    Dernier message: 14/06/2008, 08h32
  4. [Tableaux] problème d'affichage visuel dans fenêtre
    Par kitty2006 dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2006, 17h23
  5. [FLASH 8] Problème d'affichage flash dans ie
    Par ph_anrys dans le forum Flash
    Réponses: 5
    Dernier message: 22/02/2006, 14h58

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