2009-02-25 19 views
2

Ich mache ein einfaches Template-System. Es ist ärgerlich, nicht den Code in der PHP-Datei halten zu können und gibt es in HTML-Datei ... Es ist nicht schön, diese in der Vorlage zu haben:Vorlage und While-Schleifen

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

Gibt es irgendeine Weise, die ich das halten konnte Code in der PHP-Datei?

Dank

Antwort

2

Ich würde die Abfrage und Verarbeitung in der PHP-Datei, in der Vorlage nicht empfehlen, tun . Erstellen Sie ein Array in der PHP-Datei und lassen Sie es dann von der Vorlage angezeigt werden.

Dies ist, wie ich es in der Regel:

PHP-Datei:

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']; 
} 

Template-Datei:

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

Eine alternative Syntax wird mit "endwhile" als Glavić zeigte:

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

Es besteht keine Notwendigkeit für die $ i, $ Foren [] [ 'sdf'] wird auch funktionieren. –

+0

Nein, das würde dem Array jedes Mal 4 neue Elemente hinzufügen, jedes mit einer Variablenmenge. –

+0

Die Indent-Inside-PHP-Block-als-Tag-ähnliche Struktur ist gut, aber denken Sie daran, htmlspecialchars() den Namen und die Beschreibung des Forums zu vermeiden HTML-Injektion zu vermeiden. – bobince

0

Sie Template-Engine wie http://dwoo.org/

Oder alternative Syntax verwenden wie verwenden können:

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

Ich mag t o Verwenden Sie PHP als Templating-Engine und verwenden Sie ein MVC-Muster. Um die View- und Business-Logik getrennt zu halten, sind nur ein paar Arten von PHP-Code in der View erlaubt, das ist HTML-Code. Der zulässige Code ist:

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

PHP bietet eine alternative Syntax für einige seiner Kontrollstrukturen; nämlich, wenn, für, foreach, und wechseln. In jedem Fall besteht die Grundform der alternativen Syntax darin, die öffnende Klammer in einen Doppelpunkt (:) und die schließende Klammer in endif ;, endwhile ;, endfor ;, endforeach; bzw. endswitch; zu ändern. Diese alternativen Formate sind die einzigen Formate, die in der Ansicht verwendet werden sollten.

Ich gebe zu, dass die alternative PHP-Syntax langsamer ist (weil der Interpreter in PHP-Tags ein- und ausspringt). Dies entspricht jedoch im Allgemeinen Millisekunden Verarbeitungszeit und macht in den meisten Umgebungen wenig Unterschied zu den heutigen Servern.

Schließlich bevorzuge ich shorthand PHP-Tags in der Ansicht. Dies wird allgemein als eine schlechte Idee angesehen, da es weniger Serverunterstützung gibt. Aber ich glaube, dass es die Lesbarkeit etwas verbessert (speziell wenn PHP als Template-Engine verwendet wird), und ich würde im Allgemeinen einen Webhost meiden, wo ich solche Dinge nicht kontrollieren könnte.

Ich beschreibe dies in ein wenig mehr Detail und habe ein paar Beispiele auf meinen Webseiten über eine Vorlage, die ich für webbasierte PHP-Anwendungen erstellt habe. Das findest du unter der URL unten.

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