Las Posté 28 Septembre 2008 Posté 28 Septembre 2008 (modifié) Bonjour tout le monde; Je suis entrain de développer un site ou plutôt d'optimiser un site déja existant mais en utilisant "Smarty". Bon ce moteur de templates est un peu trop compliqué mais on s'y habitue... Dans ma Sidebar je voulais mettre un bloc "TOP10", où il y aura les 10 articles les plus lus. Pour ça j'ai créé deux fichiers: charts.php <?phprequire '../libs/Smarty.class.php'; $smarty = new Smarty; $connexion = mysql_connect("localhost", "root", ""); mysql_select_db("mabase", $connexion);$top10 = mysql_query("SELECT id, titles FROM news ORDER BY affichages LIMIT 10");$charts = array(); while($temp = mysql_fetch_array($top10)) { $charts[] = array( 'id' => $temp[0], 'titre' => $temp[1] ); } $smarty->assign('charts', $charts);$smarty->display('../templates/charts.tpl');?> et charts.tpl {foreach from=$charts item=chart} <a href="articles.php?id={$chart.id}>{$chart.titre}</a><br /> {/foreach} et dans sidebar.tpl j'ai ajouté {include file="charts.tpl"} Mais rien ne s'affiche dans le bloc top10 de ma sidebar. Vous voyez l'érreur ?? Modifié 28 Septembre 2008 par Las
Slyghter Posté 28 Septembre 2008 Posté 28 Septembre 2008 Tout comme toi j'ai eu à repasser un site en Smarty et je connais bien le 'bébé' maintenant. A mons avis tu devrais plutôt faire {include file="charts.php"} ton charts.tpl étant généré par le php ?
Las Posté 28 Septembre 2008 Auteur Posté 28 Septembre 2008 merci slyghter , mais là je reçois l'erreure suivante: Fatal error: Smarty error: [in ../inc/charts.php line 15]: syntax error: unrecognized tag: $charts[] = array( 'id' => $temp[0], 'title' => $temp[1] ); (Smarty_Compiler.class.php, line 446) in C:\wamp\www\site\libs\Smarty.class.php on line 1092
Slyghter Posté 28 Septembre 2008 Posté 28 Septembre 2008 Tu pourrais me montrer le code de siderbar.tpl ?
Las Posté 29 Septembre 2008 Auteur Posté 29 Septembre 2008 (modifié) sidebar.tpl : <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title></title></head><body> <br /> <div id="menu_titre">MENU</div> <a href="index.php">Accueil</a><br /> <a href="index.php?page=articles">Actualités</a><br /> <a href="index.php?page=hitech">Hi-tech</a><br /> <a href="index.php?page=tutoriels">Tutoriels</a><br /> <a href="index.php?page=logiciels">Logiciels</a><br /> <a href="index.php?page=humour">Humour</a> <br /> <a href="/cafe">Forum</a><br /> <a href="index.php?page=contacts">Contacts</a><br /> <br /> <div id="menu_titre">Top 10 Articles</div> {include file="../inc/charts.php"} <div id="menu_titre">Liens</div> ... </body></html> Modifié 29 Septembre 2008 par Las
Slyghter Posté 29 Septembre 2008 Posté 29 Septembre 2008 Smarty ne comprend pas le php de l'include. A vraie dire je n'avais essayé de faire un include php " Ton include est-il réellement nécessaire ? Je m'explique : pourquoi ne pas faire ta requête du charts dans sidebar.php tu rajoute $smarty->assign('charts', $charts); dans ton sidebar.php et faire ton {include file="charts.tpl"} comme tu voulais le faire au départ .
Las Posté 2 Octobre 2008 Auteur Posté 2 Octobre 2008 voici maintenant le code, mais je recois toujours une erreur fatale et le chargement de la page se bloque dans la sidebar. sidebar.tpl <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> </head> <body> <br /> <div id="menu_titre"> MENU </div> <a href="index.php">Accueil</a> <br /> <a href="index.php?page=articles">Actualités</a> <br /> <a href="index.php?page=hitech">Hi-tech</a> <br /> <a href="index.php?page=tutoriels">Tutoriels</a> <br /> <a href="index.php?page=logiciels">Logiciels</a> <br /> <a href="index.php?page=humour">Humour</a> <br /> <a href="/cafe">Forum</a> <br /> <a href="index.php?page=contacts">Contacts</a> <br /> <br /> <div id="menu_titre"> Top 10 Articles </div> {include file="../inc/sidebar.php"} {foreach from=$charts item=chart} <a href="article.php?id={$chart.id}">{$chart.title}</a><br /> {/foreach} <div id="menu_titre"> Liens </div> ... </body> </html> sidebar.php = array( 'id' => $temp[0], 'titre' => $temp[1] ); } $smarty->assign('charts', $charts); $smarty->display('../templates/sidebar.tpl'); ?>]
Las Posté 3 Octobre 2008 Auteur Posté 3 Octobre 2008 J'ai changé un peu le code : maintenant dans sidebar.php <?php require '../libs/Smarty.class.php'; $smarty = new Smarty; $connexion = mysql_connect("localhost", "root", ""); mysql_select_db("mabase", $connexion); $top10 = mysql_query("SELECT id, titles FROM news ORDER BY affichages LIMIT 10"); while(mysql_num_rows($top10)){ $smarty->assign('results', mysql_fetch_array($top10)); } $smarty->display('../templates/sidebar.tpl'); ?> et dans sidebar.tpl {foreach key=id item=con from=$results} <a href="article.php?id={$id}">{$con.title}</a><br /> {foreachelse} Pas de contenu à afficher. {/foreach} et j'ai réalisé que Smarty ne pouvait pas accéder à ma base de données, comment faire pour qu'il puisse voir ma base ??
Las Posté 18 Octobre 2008 Auteur Posté 18 Octobre 2008 (modifié) Voici un mois que j'ai voulu éssayer smarty et voila que je suis bloqué dans le premier problème que j'ai rencontré... je n'arrive pas à afficher les résultats d'une requete ((( s'il vous plait, les documentations qui se trouvent sur developpez.com et sur smarty.net sont ou bien fausses, ou bien très mal expliquées !!! Soyez gentils, dites-moi quel bout de code dois-je écrire pour afficher cette requete ?? $sql = mysql_query("SELECT id, title FROM news ORDER BY affichages DESC LIMIT 10"); Modifié 18 Octobre 2008 par Las
Kioob Posté 19 Octobre 2008 Posté 19 Octobre 2008 Hello, ce n'est que mon opinion, mais pour ma part il ne me serait jamais venu à l'idée de chercher à exécuter une requête au beau milieu de l'affichage d'un template. C'est certes contraignant d'un point de vue de mémoire (et encore, selon le contexte), mais je récupère toutes les données dans des variables/tableaux avant de faire le moindre affichage. Le seul traitement que j'ai fonctionne différemment est encapsulé dans une méthode (ou fonction si tu préfères) et est alors transparent pour le moteur de template. PS : je précise quand même que je n'ai jamais eu à utiliser Smarty.
Las Posté 20 Octobre 2008 Auteur Posté 20 Octobre 2008 (modifié) il ne me serait jamais venu à l'idée de chercher à exécuter une requête au beau milieu de l'affichage d'un template. alors comment faire pour insérer les 10 articles les plus lus dans un sidebar ? je suis sûre que tu me diras autre chose que de créer un array et de mettre les articles manuellement à chaque fois ) Le plus énervant ou plutot rigolo si je veux rester optimiste, c'est que j'ai éssayé avec smarty, puis TinyBut Strong et maintenant avec phpBB et le résultat est toujours le même: "rien ne s'affiche" Modifié 20 Octobre 2008 par Las
Kioob Posté 20 Octobre 2008 Posté 20 Octobre 2008 Le tableau je le crée de manière automatique hein, j'y stocke les résultats des requêtes SQL et autres traitements. Pour simplifier, l'exécution de chaque script donne à peu près cela : 1 - chargement du coeur "framework" 2 - traitement des entrées utilisateurs (formulaires, paramètres d'URL, voir cookies) 3 - récupération des données nécessaires à l'affichage 4 - transmission de ces données au moteur de template 5 - affichage Toutes les requêtes SQL sont faites dans les phases 2 et 3, et c'est tout. La connexion à la base de données n'est pas faite avant ces phases, et elle est coupée après la phase 3 (bon techniquement, elle est coupée durant la phase 4, par fainéantise). Après comme je disais moi je procède comme cela et n'ai jamais eu de soucis en utilisant un moteur de template, mais tu peux t'organiser comme tu le sens.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant