Frage zu Teamplate Engine

Tobias Staffel

Grünschnabel
Guten Tag

Ich bastel zur zeit, an einem kleinen HomePage Script, ich weiß es gibt einige gute die auch kostenlos sind doch möchte gern mein eigenes haben.

So nun damit ich Php von Html trennen kann, habe ich mir mit hilfe eines Tutorials eine Tempate Engine zusammen gestellt die auch soweit funktioniert. Für mein News System muss ich nun irgentwei sagen, das er für jeden eintrag eine neue table erstellen soll. Das habe ich auch hinbekommen nur zeigt mir in jeder table den selben beitrag.

Hier mal der Code wie er bis jetzt aussieht.

news.php

PHP:
//Holt sich die Einträge aus der DB
$query = mysql_query("SELECT * FROM news");

//Holt sich das Template
$temp = new Template('include/template/news.html');

while($row = mysql_fetch_assoc($query)){
    $temp->set('title',$row['title']);
    $temp->set('author',$row['ersteller']);
    $temp->set('news',$row['news']);
echo $temp->output()."<br />";
}

Hier kann man siehen wie es zur zeit aussieht.

http://ws-htmlworld.hourb.com/index.php?page=news

Das Script ist noch nicht perfekt aber das kommt am ende ^^

Nun zu meiner frage, wie bekomme ich es hin, das er auch bei jedem News beitrag auch den richtigen Text anzeigt?

Bedanke mich schon mal im vorraus für eure hilfe
 
Hi Tobias,

wie viele Einträge stehen denn in der Tabelle "news" und was ist der Inhalt?
Hast du auch einen Timestamp drin oder willst du Sie nach der ID ordnen?

Gruß Oliver
 
Im moment sind 3 einträge in der Datenbank, der Inhalt dieser Tabelle ist immer ein anderer. für die Anzahl an DB einträgen erstellt er mir auch die Tabellen auf der homepage, nur füllt er sie wie man oben auf dem Link sehen kann immer mit dem ersten eintrag aus der DB.
 
Zuletzt bearbeitet:
Sieht so aus als würdest du bei dem Template System nur Variablen füllen.
Für sölche Auslesegeschichten in Schleifen müsste es bei Template Systemen anders funktionieren.
Wie kann ich dir nicht sagen, da ich dein Template System nicht kenne.

Zumal sölltest du auch deinen HTML-Quellcode mal komplett überarbeiten.
 
Wie gesagt das finetuning kommt erst am ende, da ich gerne erstmal das grundgerüst haben würde.

Hier noch mal die Engine

PHP:
<?php

class Template {
    public $output;
    public $file;
    public $values = array();

    function __construct($file) {
        $this->file = $file;
        $this->output = file_get_contents($this->file);
    }

    function set($key,$value) {
        $this->values[$key] = $value;
    }

    function output() {
        foreach($this->values as $key => $value) {
            $tagsToReplace = "[$key]";
            $this->output = str_replace($tagsToReplace, $value, $this->output);
        }
        return $this->output;
    }
}

?>
 
Muss es nicht, wenn er sich für Tags mit Brackets entschieden hat.

Du willst also die Sortierung ändern? Dafür gibt es, wie schon erwähnt die ORDER BY Klausel. Natürlich muss man hinter das ORDER BY eine Spalte schreiben, nach der sortiert werden soll. Wenn du eine Spalte für das Eintragsdatum hast, bietet diese sich an. Man kann außerdem auf- (ORDER BY ... ASC) oder absteigende (ORDER BY ... DESC) sortieren.
 
Das Problem, dass alle drei Einträge den selben Inhalt zeigen, kommt daher, dass du die Output-Variable schon beim ersten Ersetzen deiner Platzhalter überschreibst und dann keine Platzhalter mehr hast. Du musst also eine temporäre Kopie von $output machen, wenn du die Funktion output() aufrufst und deren Platzhalter ersetzen.

Gruß
 
Zurück