Portal > Foren > PHP > PHP-Programmierung > Schleifenproblem bei Template
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 28.08.2007, 10:48 Nach oben    #1
PHP User
 
Registriert seit: 19.01.2006
Beiträge: 2
Standard Schleifenproblem bei Template

Hallo Leute,

ich habe ein kleines Problem bei einer Schleife in einem Template.

Folgende Situation: Ich lade mehrere Newseinträge aus der Datenbank und möchte sie nun im Template anzeigen lassen. Soweit kein Problem, doch nun soll die Schleife mehrmals durchlaufen, damit jeder Newseintrag angezeigt wird. Bis jetzt wird nur der letze Eintrag angezeigt.
Vielleicht wird es nicht ganz so deutlich, wenn ich es nur versuche zu beschreiben, hier also der Code:

Als erstes die Daten aus der Datenbank:
PHP-Code:
$sql 'SELECT * FROM ' NEWS_TABLE ' ORDER BY news_id DESC LIMIT 25';
$result $mysql->query_mysql($sql); 
Jetzt die Verarbeitung:
PHP-Code:
while ($row mysql_fetch_row($result)) {
    
$tpl->tpl_assign_block('NEWS', array(
    
'NEWS_TITLE' => $row[1],
    
'NEWS_CREATED' => $row[2],
    
'NEWS_MESSAGE' => $row[3],
    
'NEWS_AUTHOR' => $row[4],
    ));

Die Funktion tpl_assign_block habe ich hier aus dem Forum, aber ein bisschen modifiziert:
PHP-Code:
public function tpl_assign_block($block_name$vararray)
    {
        
$matches = array();
        
preg_match('/\{FOREACH \$'.$block_name.'\}(.*?)\{\/FOREACH\}/si'$this->template$matches);
        
$items $matches['1'];       
        foreach (
$vararray as $key => $value)
        {
            
$items str_replace($this->left_delimiter.$key.$this->right_delimiter$value$items);                
        }
        
$block_data str_replace($matches['1'], $block_data$items);        
        
$this->template str_replace($matches['0'], $block_data$this->template);
        
        return 
true;
    } 
Und noch das Template:
Code:
{FOREACH $NEWS}
<div class="news">
<h4>{$_NEWS_TITLE}</h4>
<span class="news">{$_NEWS_CREATED}</span>    
<p class="news">{$_NEWS_MESSAGE}</p>
<span  class="news">{$_NEWS_AUTHOR}</span>
</div>
{/FOREACH}
Ich hab auch eine Vermutung wie ich es machen müsste. Ich müsste den ersten Newseintrag aus der Datenbank in einem Array speichern und dann für jeden weiteren Newseintrag die Daten an den Array anhängen und anschließend den kompletten Array ins Template schreiben.

Wer eine bessere Methode weiß, bitte sagen.
RisingWar ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.08.2007, 10:53 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Quasi den Schleifen-Code intern mit einer Template-Variablen ersetzen. Danach genau das machen, was du schreibst.
Zitat:
Ich müsste den ersten Newseintrag aus der Datenbank in einem Array speichern und dann für jeden weiteren Newseintrag die Daten an den Array anhängen und anschließend den kompletten Array ins Template schreiben.
Am Ende setzt du halt den String, den du erhalten hast für die interne Templatevariable ein und du hast das, was du möchtest.

Wo hakt es denn bei dir nun genau?
Umsetzung?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.08.2007, 11:24 Nach oben    #3
PHP User
 
Registriert seit: 19.01.2006
Beiträge: 2
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Wo hakt es denn bei dir nun genau?
Umsetzung?
Die letzte News kann ich im Template anzeigen, doch ich möchte auch die älteren News anzeigen lassen. Im Moment ist es so, dass ich zwar alle Newseinträge aus der Datenbank bekomme, es werden wahrscheinlich auch alle im Template eingesetzt, doch vom letzten Eintrag überschrieben, so dass nur der letzt Eintrag zu sehen ist.
Ich bekomme es noch nicht hin, dass der Templatecode sich für jeden Newseintrag wiederholt.
RisingWar ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.08.2007, 11:33 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Das meinte ich hiermit
Zitat:
Quasi den Schleifen-Code intern mit einer Template-Variablen ersetzen. [..] Am Ende setzt du halt den String, den du erhalten hast für die interne Templatevariable ein
Du kannst ja mal schauen, wie Smarty das Problem löst:
http://smarty.php.net/manual/de/lang...on.foreach.php
(Den Quelltext kannst du dir ja herunterladen und anschauen)

Eventuell hilft dir auch das hier weiter?
- [PHP] Ein eigenes Templatesystem schreiben
- Templatesystem - Foreach-Schleifen
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.08.2007, 22:46 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Hi.

Ich hab mir jetzt die Template-Funktion nicht näher angeschaut, aber es würde mich schwer wundern, wenn die Assign-Methode die übergebenen Werte anhängt, anstatt die vorhandenen Werte zu überschreiben. Wenn du also in einer Schleife x mal dem Platzhalter "NEWS" irgend einen Wert zuweist, wird er am Ende natürlich nur den zuletzt zugewiesenen Wert enthalten. Musst also entweder zuerst das Array mit allen Werten zusammenbauen und dann einem Platzhalter zuweisen oder eine Methode Template:repend() schreiben, die letztlich das gleiche tut, aber innerhalb der Template-Klasse eben.

Basti

Geändert von Basti (28.08.2007 um 22:51 Uhr)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Generierung der Inhalte durch das Template dago Gesuche 5 11.06.2007 13:20
indireckte Frage zu Template system kampfgnom PHP-Programmierung 4 04.06.2007 04:12
Kleine Fragen zur IT[X] Template Engine ex³ PEAR, PECL und Frameworks 0 18.07.2006 14:00
Kleines Prob mit phpBB Template System Garnele PEAR, PECL und Frameworks 6 22.10.2005 00:31
[PHP] Ein einfaches Template-System MrNiceGuy Tutorials 0 09.10.2005 18:30


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45