"kleines Templatesystem" und while

sipoh

Erfahrenes Mitglied
Guten Abend, liebe Gemeinde.

Ich hab ein kleines rhetorisches Problem, mein Anliegen zu verdeutlichen.

Probieren.

suche.php:

Code:
<?php
require_once .. DB-Anbindung etc
..

$sql = "select user .."
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result)) {
$user = $row['user'];
}

-->
$content = "./include/suche.inc.php";
$menu = "./templates/navi.php";

global $content, $menu, $user;

In $content (suche.inc.php) soll nun global ($user) in einer Schleife ausgegeben werden. Da ich aber PHP-Code vom Rest trennen möchte, kann ich in der suche.inc.php doch nicht mit while arbeiten.

Kann man eine while-Schleife in eine Funktion packen, die dann in einem Platzhalter (im Template suche.inc.php) (ähnlich wie bei Smarty auch) das solange ausgibt, wie Inhalte in der Abfrage sind?
 
In deinem Beispiel hat $user aber nur ein Element?

Also ich sehe zwei Möglichkeiten:

a)
Du änderst deine Definition von Template Engine. Es sollte meiner Meinung nach nicht darum gehen, PHP Code von HTML zu trennen sondern Anzeigelogik von der Businesslogik. D. h. while dürfte ruhig benutzt werden, solange es zur Anzeigelogik gehört.

b)
Du benutzt einen Platzhalter, den du im PHP Code vorbereitest.

Beispiel:
Du willst ein Array mit unbekannter Anzahl von Einträgen an den Platzhalter {foobar} setzen.
PHP:
<?php
$array = array('abc', 'def', 'ghi', 'jkl', 'mno');
$foobar = '';
foreach($array as $val)
{
  $foobar .= "<span>".$val."</span><br>\n";
}
?>

Nun hättest du in $foobar sämtliche Arrayeinträge vorhanden und könntest die Variable im Template ersetzen, ohne PHP Code hineinzubringen.
 
$user hat aktuell 2 Ausgaben. Du hast recht. Natürlich möchte ich "Dynamische Vorbereitung" und "für Ausgaben" getrennt handhaben.

Mit deinem Beispiel klappt es. Ich setze es mal um und poste das Ergebnis.
 
Ich hab es jetzt so gelöst:

Code:
$sql = "SELECT username FROM user";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result)) {
$array[] = $row['username'];

$user = ''; 
foreach($array as $val) 
{ 
  $user .= "<span>".$val."</span><br>\n";
}}
 
Das ist unnötig viel Code, dann direkt so:

PHP:
$sql = "SELECT username FROM user";
$result = mysql_query($sql);
$user = '';
while ($row = mysql_fetch_assoc($result)) 
{
  $user .= "<span>".$row['username']."</span><br>\n";
}
 
Zurück