Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Schleifen in einem Template verarbeiten
Antwort
 
Themen-Optionen
Alt 09.09.2006, 15:10   Nach oben    #1
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard Schleifen in einem Template verarbeiten

Moin,

ich arbeite gerade an einer Template-Klasse. Soweit klappt schon alles. Es happert aber noch bei den schleifen. Bei einer normalen Schleife ist das ja kein problem doch sobald man Schleifen verschachtelt wird das ganze unschön. Wenn ich zum beispiel eine innere und eine äußere schleife habe. Dann bezieht sich der inhalt der inneren Schleife ja auf das momentan ausgegebene element der äußeren schleife. Das heißt ich müsste für jedes element der äußeren schleife einzeln festlegene was in der inneren schleife ausgegeben wird. Das ganze wird gerade dann häßlich und groß wenn man mehr als zwei schleifen ebenen hat oder mehrere innere schleifen besitzt. Mein problem liegt also in der Datenstruktur zur aufnahme der Schleifen daten und der realisierung einer einfachen schnittstelle (methode) zum hinzufügen von daten.

Könnt ihr mir helfen?

Gruß, Prophet
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:03   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hm so ganz hab ich nicht verstanden, was du hiermit meinst
Zitat:
Zitat von Prophet
Das heißt ich müsste für jedes element der äußeren schleife einzeln festlegene was in der inneren schleife ausgegeben wird
Kannst du das nochmal bisschen genauer erläutern?

Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:18   Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Angenommen ich habe eine "InnereSchleife" und eine "AeussereSchleife".

Will ich diesen nun Daten zuweisen müsste ich das wie folgt machen:

Code:
AeussereSchleife:
|
+-AS1
+-AS2
+-AS3
+-AS4

InnereSchleife:
|
+-IS1
+-IS2
+-IS3
+-IS4
+-IS5
+-IS6
+-IS7
usw.

Wenn ich nun "InnereSchleife" Daten zuweise wäre es ja schwachsinnig wenn dessen Daten bei jedem Element von "AeusserenSchleife" ausgegeben werden. Ich muss diese Daten also explizit bestimmten Elementen von "AeusserenSchleife" zuweisen.
Das sieht dann so aus:
Code:
AeussereSchleife:
|
+-AS1
|  |
|  +-IS2
|  +-IS4
|
+-AS2
|  |
|  +-IS1
|  +-IS3
|  +-IS5
|  +-IS6
|
+-AS3
+-AS4
   |
   +-IS7
Nur so ergibt die zuweisung von Daten in verschachtelten Schleifen sinn. Mein Problem ist jetzt:
Zitat:
Zitat von Prophet
Mein problem liegt also in der Datenstruktur zur aufnahme der Schleifen daten und der realisierung einer einfachen schnittstelle (methode) zum hinzufügen von daten.
Ich hoffe es wird deutlich das das Ganze ziemlich häßlich wird sobald Mehrere Schleifen in tieferen Ebenen liegen oder die verschachtelung noch tiefere ebene erreicht.
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:25   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Ah, ah habe ich verstanden.
Du könntest das ja "rekursiv" lösen. Die Daten, die der innersten Schleife zugewiesen werden - das kannst du ja aus dem Template-Code, z.B. <loop var=$data_inner_loop>, per RegExp herausfilten.

Dazu gehört dann ein
PHP-Code:
$tpl->assign('data_inner_loop'$data_inner_loop); 
und ein
PHP-Code:
public function assign($varName$varData)
{
     
$this->assignedData[$varName] = $varData;

oder so. (nur als Pseudocode!)

Letztlich arbeitest du dich dann folgendermaßen vor.
Du "parsed" die äußere Schleife.
Findest du hier eine weitere Schleife, so "parsed" du die usw. usf.!

Letztlich sollte dann eigentlich klar sein, welche Daten zu welcher Schleife gehören, oder steh ich auf dem Schlauch?

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:34   Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Soweit war ich auch schon.

Will ich aber nun das beim ersten element der äußeren Schleife die letzten drei elemente der inneren Schleife ausgeben, so müsste ich etwas in dieser Art schreiben:
PHP-Code:
function assign($loop$data$parent_data_row)
{
  
/* Die Datenstruktur wird bereits komplizierter. Das array erhlät schon einige ebenen. */

PHP-Code:
$tpl->assign('inner_loop'$die_daten1); 
Gut Damit wäre die zuweisung von Daten in der zweiten ebene vollbracht. Nun haben wir aber auch noch eine Schleife in der dritten ebene. Bestimmte Datensätze sollen aber nur im ersten datensatz von der obersten schleife ausgegeben werden und beim dritten datensatz der mittleren schleife.
Also kommt jetzt folgendes:
PHP-Code:
function assign($loop$data$root_data_row$second_level_data_row)
{
  
/* Die Tiefe und anzahl der Array dimensionen kann schon kaum noch gezählt werden...*/

PHP-Code:
$tpl->assign('third_level_loop'$die_daten13); 
Soweit so gut will man das model auf zwei oder drei ebenen begrenzen geht das alles ja noch. Aber ich möchte es so gestalten das beliebig tief verschachtelte Schleifen möglich sind...
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:39   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hm, das verstehe ich nicht.
Du willst Daten aus der inneren Schleife in der äußeren Schleife explizit verwenden/ausgeben?

Wozu das? :-/
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:48   Nach oben    #7
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Gut nehmen wir mal ein Beispiel.

Das Forum unterteilt sich in Kategorien und Foren in diesen Kategorien. Also ganz klarer fall wir brauchen eine verschachtelte Schleife!

Was haben wir:
> Die Daten für die Kategorien.
> Die Daten für die Foren.

Gut, nun sollen aber nur bestimmte Foren in bestimmten Kategorien ausgegeben werden. Beispielsweise enthält Kategorie 1 die Foren 2, 5 und 8. Kategorie 2 Hingegen die Foren 1, 4, und 17. usw.

Nun müssen wir also bestimmte Datensätze der inneren Schleife mit denen der äußeren Schleife verknüpfen damit nicht in jeder Kategorie alle Foren ausgegen werden!

Also müssen wir jedem datensatz der Kategorie-Schleife einzeln die entsprechende Foren-Datensätze zuweisen.

So für diese Modell aus zwei Ebenen kann man ja noch eine einigermasen übersichtliche Datenstruktur schaffen, auch das einfügen von Daten per funktion sollte noch gut klappen ( assign($loop, $data, $parent_data_row) ).

Nun wird es kompliziert. Wenn wir diese System so erweitern das beliebig viele ebenen möglich sind. Müssen wir in jeder Daten eben und für jeden Datensatz angeben mit welchen Eltern-Datensätzen sie verknüpft sind! Ebene 3 bräuchte also bereits 2 zusätzliche parameter zur eindeutigen zuweisung. Ebene 4 benötigt bereit 3 usw.

Verstehst du mein Problem jetzt?
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 17:56   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Ersteinmal muss man an dieser Stelle wohl auch mal mit einbeziehen, ob es überhaupt sinnvoll ist, eine beliebig tiefe Verschachtelung zu implementieren!

Gerade in einem Forum.
Auf der Startseite siehst du Kategorien mit Foren und eventuell Subforen. Ist mehr nötig?

Okay, aber zurück zum programmiertechnischen Problem.
Ich würde die Daten so hinzufügen, das du für jede Schleife ein Array erstellst/füllst, welches die benötigten Daten enthält.

Ich verstehe wiederum nicht so ganz, wo hier das Problem liegt:
Zitat:
Zitat von Prophet
Also müssen wir jedem datensatz der Kategorie-Schleife einzeln die entsprechende Foren-Datensätze zuweisen.
Ist doch nix Schlimmes.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 18:04   Nach oben    #9
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Nun gut ob es sinnvoll ist ist natürlich ein anderes thema. Zwei ebenen sind ja auch kein Problem.

Aber mich interssiert es wie man es für viele ebenen realisiert.

Stecke ich hier den gerade in einem Denkfehler fest? Wie würdest du das den für sagen wir 4 ebenen implementieren?
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 18:09   Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
Standard

Hi.

Ich glaube, du würfelst da was zusammen, was garnicht Zusmamen gehört. Das Zuordnen der Foren zu den Kategorien gehört doch nicht in die "Darstellungs-Ecke", sondern wird im Modell definiert. Und für deine Template-Bestückung kannst lässt du dir das fertig von den jeweiligen Objekten ausgeben oder itertierst eben über die Objektlisten und übergibst dem Template-Objekt ein fertiges Array. Oder du greift direkt auf die öffentlichen Attrbute der Objekte zu.

PHP-Code:
$a = array();

$aCats = $...->getCats();

foreach (
$aCats as $Cat) {

    
$sCatLabel $Cat->getLabel();
    
$aBords $Cat->getBoards(:(

    foreach (
$aBoards as $Board) {

        
$a[$sCatLabel][] = $Board->getLabel();
    }
}

$this->Template->assign('cats'$a); 
Im übrigen würd ich mir nicht den Stress geben, die Templates selbst zu parsen. Ich wandle die einfach in PHP-Code um und gut is.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 18:20   Nach oben    #11
Erfahrener Benutzer
 
Benutzerbild von Prophet
 
Registriert seit: 10.05.2006
Ort: Jevenstedt
Beiträge: 131
Standard

Zitat:
Zitat von Basti
Das Zuordnen der Foren zu den Kategorien gehört doch nicht in die "Darstellungs-Ecke", sondern wird im Modell definiert.
Das tut es auch nicht. Das habe ich auch nicht vor. Mir ist auch klar das ich diese zusammenhänge vorher mit PHP verarbeiten muss aber trotzdem benötige ich intern eine Datenstruktur dafür und eine entsprechende Schnittstelle zum einfügen.

Ich mache mir da nochmal in ruhe gedanken drüber...

Vielen dank für eure hilfe.

Zitat:
Zitat von Basti
Im übrigen würd ich mir nicht den Stress geben, die Templates selbst zu parsen. Ich wandle die einfach in PHP-Code um und gut is.
Eval = Evil
__________________
Prophet ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.09.2006, 19:16   Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
Standard

Zitat:
Zitat von Prophet Beitrag anzeigen
aber trotzdem benötige ich intern eine Datenstruktur dafür und eine entsprechende Schnittstelle zum einfügen.
Eben nicht, wen du einfach ein Array oder Objektlisten übergibst. Andernfalls schau dir einfach mal DOM oder so an. Hier ist jeder Knoten ein Objekt und diesem kannst du Kinder-Elemene zuordnen etc.

Du brauchst einfach ein Bezugsobjekt. Das ist im einfachten Fall eben das Objekt selber, dem du einen Wert "unterornest" (ist bei einem Array das gleiche Spiel, wie mit Objekten). Das kann aber auch die ID eines anderen Wertes sein, aber ich vermute, das wird nicht mehr wirklich toll anwendbar sein.

Zitat:
Zitat:
Zitat von Basti
Im übrigen würd ich mir nicht den Stress geben, die Templates selbst zu parsen. Ich wandle die einfach in PHP-Code um und gut is.
Eval = Evil

Eval? Wie kommst du denn darauf? Schau dir mal z.B. Smarty an. Ich benutze halt XML-Templates und dabei kommt dann natürlich auch korrektes PHP bei rum, ohne dass ich das selbst prüfen müsste. Das wird dann eben auch gespeichert und eingebunden.


Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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

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

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP template und schleifen Victorious PHP-Programmierung 57 25.09.2007 00:18
Schleifen im Templatesystem Stefan125 PHP-Programmierung 4 19.07.2007 02:36
Template - Bedingungen verarbeiten Prophet PHP-Programmierung 15 26.06.2006 00:26
Kleines Prob mit phpBB Template System Garnele PEAR, PECL und Frameworks 6 22.10.2005 00:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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