2009-02-25 10 views
2

Je crée un système de template simple. Il est gênant de ne pas être en mesure de conserver le code dans le fichier PHP et la sortie dans un fichier HTML ... Ce ne est pas agréable d'avoir ce dans le modèle:modèle et boucles while

<?php 
while ($row = mysql_fetch_array($query)) { 
$name = $row['forum_name']; 
$date = $row['forum_date']; 
$desc = $row['forum_description']; 
$lastpost = $row['forum_lastpost']; 
?> 

<h1><?php echo $name ?></h1> 
<p><?php echo $desc ?></p> 

<?php } ?> 

Est-il possible que je pouvais garder le code dans le fichier PHP?

Merci

Répondre

2

Je suggère de faire la requête et le traitement dans le fichier php, pas dans le modèle . Construire un tableau dans le fichier php, puis laissez le modèle l'afficher.

Voilà comment je fais habituellement il:

fichier PHP:

for ($i = 0; $row = mysql_fetch_array($query); $i++) 
{ 
    $forums[$i]['name'] = $row['forum_name']; 
    $forums[$i]['date'] = $row['forum_name']; 
    $forums[$i]['desc'] = $row['forum_description']; 
    $forums[$i]['lastpost'] = $row['forum_lastpost']; 
} 

fichier modèle:

<?php foreach ($forums as $forum) { ?> 
    <h1><?=$forum['name']?></h1> 
    <p><?=$forum['desc']?></p> 
<?php } // foreach ($forums as $forum) ?> 

Une autre syntaxe utilise "endwhile" comme Glavić montré:

<?php foreach ($forums as $forum): ?> 
    <h1><?=$forum['name']?></h1> 
    <p><?=$forum['desc']?></p> 
<?php endforeach; ?> 
+0

Il n'y a pas besoin pour le $ i, $ forums [] [ 'sdf'] fonctionnent aussi. –

+0

Non, cela ajouterait 4 nouveaux éléments à la matrice à chaque fois dans la boucle, chacun avec un jeu de variables. –

+0

La structure indent-inside-PHP-block-as-tag-like est bonne, mais souvenez-vous de htmlspecialchars() le nom et la description du forum pour éviter l'injection HTML. – bobince

0

Vous pouvez utiliser le moteur de template comme http://dwoo.org/

Ou utiliser une autre syntaxe comme:

<?php while ($row = mysql_fetch_array($query)): ?> 
    <h1><?=$row['forum_name']?></h1> 
    <p><?=$row['forum_description']?></p> 
<?php endwhile; ?> 
1

J'aime t o utiliser PHP comme moteur de template et utiliser un pattern MVC. Afin de conserver la logique View and Business séparée, seuls quelques types de code PHP sont autorisés dans la vue, qui est le code HTML. Le code autorisé est:

* Single functions 
* Alternate format If/Else/ElseIf blocks 
* Alternate format For loops 
* Alternate format Foreach loops 
* Alternate format Switch statements 

PHP propose une syntaxe alternative pour certaines de ses structures de contrôle; à savoir, si, pendant, pour, foreach et switch. Dans chaque cas, la forme de base de la syntaxe alternative consiste à remplacer l'accolade ouvrante par un signe deux-points (:) et l'accolade fermante par endif ;, endwhile ;, endfor ;, endforeach; ou endwitch ;, respectivement. Ces formats alternatifs sont les seuls formats à utiliser dans la vue.

Je vais admettre que la syntaxe PHP alternative est plus lente (parce que l'interpréteur saute dans et hors des balises PHP). Mais, cela équivaut généralement à des millisecondes de temps de traitement et fait peu de différence avec les serveurs d'aujourd'hui dans la plupart des environnements.

Enfin, je préfère utiliser des balises PHP abrégées dans la vue. Ceci est généralement reconnu comme une mauvaise idée car il y a moins de support de serveur. Mais, je crois que cela améliore légèrement la lisibilité (en particulier en utilisant PHP comme moteur de template) et j'éviterais généralement un hébergeur où je ne pourrais pas contrôler de telles choses.

Je le décris un peu plus en détail et j'ai quelques exemples sur mes pages web sur un modèle que j'ai créé pour des applications PHP basées sur le web. Vous le trouverez sur l'URL ci-dessous.

http://www.joeldare.com/wiki/applate