Templates mit While Schleifen

FDS-Ultimate

Mitglied
Guten abend Liebe Toturials gemeinde,

wiedermal habe ich ein Konstrukt aus Daten Wirwar versucht zu verarbeiten und wie zu erwarten kläglich versagt^^.

Folgende Problem Stellung ich verwende ein selbstgeschriebenes Template System....
[Funktioniert auch einwandfrei], ich habe eher das Problem das ich aus einer Datenbank abfrage eine While Schleife ausgeben möchte, hier mein Bisheriger code:

Code:
    $query      = "SELECT * FROM Tabelle";
    $results    = mysql_query($query);
    while($box1 = mysql_fetch_object($results))
    {
    $cache = "<option value=\"\">$box1->var1</option>
    ";
    $tmp->setContent('cache', "$cache");
    }

Die Problematik ist ja Offensichtlich das er bei der ersten Ausgabe schon den Platzhalter ersetzt hat nun weiß ich aber nicht wie ich in die Variable alle sätze Reinpacken könnte.

Kann mir jemand vll Verraten wie dies ganze Korrekt ablaufen könnte?

Mit freundlichen Grüßen aus Niedersachsen,
FDS-Ultimate
 
Aus dem Bauch heraus würde ich folgendes Vorschalgen:
PHP:
$cache .= "<option value=\"\">$box1->var1</option>";
Ansonsten müsste man die Funktionsweise deines Templatesystems kennen. :)
 
Aus dem Bauch heraus würde ich folgendes Vorschalgen:
PHP:
$cache .= "<option value=\"\">$box1->var1</option>";
Ansonsten müsste man die Funktionsweise deines Templatesystems kennen. :)

Zu meinem kleinen Template System :D

Code:
class construct {
    var $template;

    function construct($template)
    {
        $this->settemplate($template);
    }
    function settemplate($template)
    {
        if(file_exists($template))
        {
            $fp = fopen($template, "r");
            $text = fread($fp, filesize($template));
            fclose($fp);
            $this->template = $text;
        }else
        {
            $this->templatee = $template;
        }
    }
    function setContent($param1, $param2="")
    {
        if(!is_array($param1) && $param2 && !is_array($param2))
        {
            $this->setOne($param1, $param2);
        }elseif(is_array($param1) && !$param2)
        {
            $this->setArray($param1);
        }elseif(!is_array($param1) && is_array($param2))
        {
            $this->setLoop($param1, $param2);
        }else
        {
            die("Parameter in der Klasse Template wurden falsch übergeben.");
        }
    }
    function setOne($suchWort, $substitution)
    {
        $this->template = str_replace("[['".$suchWort."']]",
        $substitution,
        $this->template);
    }
    function setArray($Array)
    {
        foreach ($Array as $suchWort => $substitution)
        {
            $this->setOne($suchWort, $substitution);
        }
    }
    function setLoop($schleife, $Array)
    {
        $str = explode("<!--anfang:".$schleife."!-->",
        str_replace("<!--ende:".$schleife."!-->",
        "<!--anfang:".$schleife."!-->",
        $this->template));
        $teilStr = "";
        foreach ($Array as $element)
        {
            $teiltemplate = new construct($str[1]);
            $teiltemplate->setArray($element);
            $teilStr .= $teiltemplate->template;
        }
        $this->template = $str[0] . $teilStr . $str[2];
    }
}

zu der erstellung der Seite

Code:
$tmp = new construct("tmp_site_head.html");
    include "/".$_SESSION['design']."/site_css.php";
    $tmp->setContent('css2', "$css2");
    $query      = "SELECT * FROM Tabelle";
    $results    = mysql_query($query);
    while($box1 = mysql_fetch_object($results))
    {
    $cache .= "<option value=\"\">$box1->var1</option>
    ";
    $tmp->setContent('cachedes', "$cache");
    }
    echo $tmp->template;

Wie du siehst ist dein Code mit Angewendet nur leider Ergab das nicht die erwünschte Lösung wie im Bild zu erkennen was ich angehängt habe.

da sollen einemal Standart und Weiß Stehen.
 

Anhänge

  • ergebniss.JPG
    ergebniss.JPG
    2,7 KB · Aufrufe: 156
Und in deinem Template steht demnach folgendes?
Code:
<select ...>[[cache]]</select>

Lass dir auch mal $cache mit var_dump() ausgeben, um zu überprüfen ob auch zwei options und nicht nur eins enthalten ist.
 
Und in deinem Template steht demnach folgendes?
Code:
<select ...>[[cache]]</select>

Lass dir auch mal $cache mit var_dump() ausgeben, um zu überprüfen ob auch zwei options und nicht nur eins enthalten ist.

nö aber [['cache']] :D der erste wert wird ja eingetragen wie im Bild zu sehen aber nicht mehr der Zweite Wert.

und als ausgabe bekomme ich auch nur eine <option value="">Standart</option>
 
Du musst die Variable auch nach der Schleife an dein Templatesystem übergeben.

PHP:
    while($box1 = mysql_fetch_object($results))
    {
    $cache .= "<option value=\"\">$box1->var1</option>
    ";
    }
    $tmp->setContent('cachedes', "$cache");
 
Wenn du genau hinschaust ist das ja auch bereitzs Passiert er ersetzt den Wert ja auch wie in der Website zu sehen ist nur ist halt nur ein Wert anstadt zwei Übergeben worden da er die Variabel überschreibt mit dem Zweiten Wert
 
Ich habe eine Lösung für mein Problem gefunden nur ein sehr sehr schlechtes Resultat

PHP:
while($box1 = mysql_fetch_object($results))
    {
    if(isset($cache1))
    {
        $cache2 = "<option value=\"\">$box1->var1</option>";
    }
    if(!isset($cache1))
    {
        $cache1 = "<option value=\"\">$box1->var1</option>";
    }
    }
$cache = "$cache1 $cache2";
    $tmp->setContent('cachedes', "$cache");

dieses Script gibt jetzt beide Design Arten aus, sollte allerdings eins zu wenig sein würde ich eine Erromeldung bekommen das die Variable $cache2 nicht Existiert
und wenn ich ein Design zu viel habe wird dies nicht angezeigt.

Hätte anhand diesen beispieles jemand eine Elegantere Lösung?
 
Das ist doch im Endeffekt genau das selbe wie mein Vorschlag. :confused:

PHP:
$cache .= "<option value=\"\">$box1->var1</option>
    ";
Hier entsteht eine Verkettung.
Du machst letztendlich auch nur eine Verkettung, nur eben "manuell".

Das ergibt für mich keinen Sinn. ;)

*edit*
Auch wenn PHP sehr Fehlertollerant ist und die Variable $cache selbst definieren sollte, sofern das noch nicht geschehen ist, könntest du bei meinem Vorschlag vor der Schleife noch ein $cache = ''; schreiben. Allerdings glaube ich nicht dass deswegen die Verkettung per .= nicht funktioniert.
 
Zuletzt bearbeitet:
Diese Verkettung Funktioniert leider nicht da muss ich dich leider Entteuschen die Problematik ist einfach das die Variable $cache bei egal was ich versuche überschrieben wird. es sei denn ich habe die Variable anders aufzurufen als z.B.
Code:
<?php
echo $cache;
?>

Vll liegt es ja daran das ich vll noch irgendwas anfügen muss obwohl es kein Array ist könnte da der HAse Begraben Liegen?
 
Zurück