Aller au contenu

Requête mysql dans Smarty


Las

Sujets conseillés

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

<?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");
$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é par Las
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Las
Lien vers le commentaire
Partager sur d’autres sites

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 .

Lien vers le commentaire
Partager sur d’autres sites

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');

?>]

Lien vers le commentaire
Partager sur d’autres sites

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 ??

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

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é par Las
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par Las
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...