2011-12-08 4 views
2

Par exemple, j'ai cette requête dans mon dossier news.php:PHP et Smarty exécution

$sql = 'SELECT * FROM `news` ORDER BY `id` DESC LIMIT 0, 5'; 
$result = mysql_query($sql) or die("Query failed : " . mysql_error()); 
while ($line = mysql_fetch_assoc($result)) { 
    $value[] = $line; 
} 
// Assign this array to smarty... 
$smarty->assign('news', $value); 
// Display the news page through the news template 
$smarty->display('news.tpl'); 

Cependant, dans mon news.tpl fichier Je ne vais pas mettre la {$} nouvelles variables. La requête sera-t-elle toujours exécutée lorsque je passerai en revue news.php ou sera-t-elle simplement ignorée?

Répondre

3

Oui,, la requête sera toujours exécutée car vous chargez le fichier PHP en premier. Une fois la requête exeucted, votre fichier PHP va charger le modèle si vous mettez le {$news} ou non la requête de base de données sera exécutée.

Si vous n'avez pas besoin de la requête à exécuter, vous pouvez ajouter un drapeau (par exemple):

http://www.domain.com/news.php?show=0 

puis dans votre PHP:

$value = array(); // this way if the variable is not used, you create a empty array. 

if(isset($_GET['show']) && $_GET['show'] == 1) { 
    $sql = 'SELECT * FROM test.`name` ORDER BY 1 DESC LIMIT 0, 5'; 
    $result = mysql_query($sql) or die("Query failed : " . mysql_error()); 
    while ($line = mysql_fetch_assoc($result)) { 
     $value[] = $line; 
    } 
} 
// Assign this array to smarty... 
$Smarty->assign('news', $value); 

// Display the news page through the news template 
$Smarty->display('news.tpl'); 

et dans votre tpl :

{section name=loopname loop=$news} 
    // your news code 
{sectionelse} 
    No news today! 
{/section} 
{$news}