URL: https://www.overclockers.at/coding-stuff/smarty-frage_155076/page_1 - zur Vollversion wechseln!
Mahlzeit!
Ich hab ein kleines Verständnisproblem bei dem mir leider auch die Dokumentation nicht weiterhelfen konnte.
Nehmen wir einmal dieses Typische Szenario an, dass wir per index.php?page=seitenname die richtige Seite übergeben und dann je nachdem die richtige Seite ins system einbinden. Also ensteht so ca. folgendes:
index.php bindet das menü und die datei content.php ein
content.php hat eine switch abfrage, welche auf die $_GET['page'] variable zugreift und je nachdem die richtige seite includet
soweit so gut, kein problem.
mein problem ist jetzt allerdings, dass in allen dokumentationen und beispielscripten davon ausgegangen wird, dass einfach ein script durchlaufen wird, am schluss werden mit assign die variablen zugewiesen und das template mit display ausgegeben. da ich jetzt aber dynamisch arbeite (also die einzelenen eingebundenen dateien ja immer andere formatierungen haben) müsste ich doch zuerst den html header, dann irgendwann das template der seite und dann wieder der rest der gleichbleibt. ich kann aber keine zwei templates mit display ausgeben 
ich weiß, dass ich mittels code im .tpl file selber code einbinden kann, wie ich das realisiere ist mir aber noch nicht ganz klar
ich hoff ihr könnt mir da denkanstöße geben 
danke im voraus
daschl
hm... also in meinen Smarty Anwendungen is des immer so, dass die index.php im prinzip nur folgendes inne hat:
Im main.tpl werden halt die variablen main_title und main_content ausgegeben.Code: PHP// Modul ausfuehren $ret = ExecuteModule(MODULE,GO); // Ergebnis zuweisen $smarty->assign("main_title",$ret['title']); $smarty->assign("main_content",$ret['content']); // Anzeige $smarty->display('main.tpl');

du kannst mehrere smartyinstanzen starten und dann auch mehrere templates ausgeben.
$smarty1 = news Smarty();
$smarty1->assign();
$smarty1->display();
$smarty2 = news Smarty();
$smarty2->assign();
$smarty2->display();
Zitat von kleinerChemikerdu kannst mehrere smartyinstanzen starten und dann auch mehrere templates ausgeben.
$smarty1 = news Smarty();
$smarty1->assign();
$smarty1->display();
$smarty2 = news Smarty();
$smarty2->assign();
$smarty2->display();

warzm sollte es nicht im sinne des erfinders sein? ist nun mal so, daß man mehrere objekte haben kann.
ist auch praktisch, wenn du dynamischen und fast statischen content hast, da du ja für jedes objekt die cachedauer einstellen kannst.
stimmt daran hab ich auch nicht gedachtZitat von kleinerChemikerwarzm sollte es nicht im sinne des erfinders sein? ist nun mal so, daß man mehrere objekte haben kann.
ist auch praktisch, wenn du dynamischen und fast statischen content hast, da du ja für jedes objekt die cachedauer einstellen kannst.


ah ich hab jetzt noch eine frage
folgenden code hab ich um werte aus der datenbank auszulesen und im script darzustellen
Code: PHP$mysqlQuery = "SELECT * FROM ok_news ORDER BY newsID DESC"; $mysqlResult = mysql_query($mysqlQuery); while($actualRow = mysql_fetch_array($mysqlResult)) { /* SmartyNews Instanz */ $smartyNews = new MySmarty; /* variablen zuweisen */ $smartyNews->assign("newsTitle", $actualRow['newsTitle']); $smartyNews->assign("newsDate", $actualRow['newsDate']); $smartyNews->assign("newsContent", $actualRow['newsContent']); $smartyNews->display("news.tpl"); }
Code: PHP$mysqlQuery = "SELECT * FROM ok_news ORDER BY newsID DESC"; $mysqlResult = mysql_query($mysqlQuery); while($actualRow = mysql_fetch_array($mysqlResult)) { $a[]=$actualRow['newsTitle'] } /* SmartyNews Instanz */ $smartyNews = new MySmarty; $smartyNews->assign("newsTitle", $a);
ah das is mir gestern noch eingefallen... wenn ich das dann für mehrere mache muss ich hald im smarty template eine schleife einbauen und dann alle elemente der reihe nach ausgeben lassen.
da gibts keine einfachere methode nehm ich an!?
edit:
es gibt keine while's und for's in php? hmm mit foreach is ned so gut
sicher gibts for und while, gibt sogar do .. while (hab ich aber noch nie benutzt)
an deiner stelle würd ichs etwa so machen:
template:
Code:{foreach from=$news item=zeile} {$zeile.newstitle} {$zeile.date} ... {/foreach}
Code: PHP$mysqlQuery = "SELECT * FROM ok_news ORDER BY newsID DESC"; $mysqlResult = mysql_query($mysqlQuery); while($actualRow[] = mysql_fetch_array($mysqlResult)) /* SmartyNews Instanz */ $smartyNews = new MySmarty; $smartyNews->assign("news", $actualRow); $smartyNews->display("news.tpl");
jap genauso hab ichs jetzt auch (irgendwie mühsam ausm inet zammgsucht 
template:
Code:{foreach item=news from=$newsArray} <table width="100%" border="1"> <tr> <td>{$news.newsTitle}</td> <td>{$news.newsDate}</td> </tr> <tr> <td colspan="2">{$news.newsContent}</td> </tr> </table> <br /> {/foreach}
Code: PHP$mysqlQuery = "SELECT * FROM ok_news ORDER BY newsID DESC"; $mysqlResult = mysql_query($mysqlQuery); while($currentRow = mysql_fetch_array($mysqlResult)) { $newsArray[] = $currentRow; } /* SmartyNews Instanz */ $smartyNews = new MySmarty; $smartyNews->assign("newsArray", $newsArray); $smartyNews->display("news.tpl");

np. mit smarty arbeite ich selber des öfteren. kann dir allerdings auch das smartyforum empfehlen. zwar muß man manchmal nen tag warten, aber eigentlich sehr freundlich und sehr hilfreich. auch das deutsche unterforum.
gleicher code, neues - nicht entdecktes - problem
ich hoff es kommt nicht so rüber als würd ich alles fragen aber ich such immer nach einer lösung aber komm nicht drauf 
suchen hat auch noch ned geholfen (aber ich bin im smarty forum auf beiträge von dir gestoßen chemiker
)
wenn ich das mit der foreach ausgebe, hab ich immer einen eintrag zuviel? aus meiner programmier-intuition heraus hats sicher was damit zu tun, dass er bei 0 anfängt oder wie auch immer..
hat wer eine ahnung?
edit:
also er gibt zwei beträge aus, wie es in der datenbank steht und dann noch ein 3. leeres grundgerüst da er ja nichtsmehr aus der datenbank lesen kann bzw in dem array nixmehr drinsteht
edit2:
debug zeigt mir auch ein 3. element aber ohne einträge
dürft also der hund irgendwo im php code sitzen
#debug:
Code:Array (3) 0 => Array (8) 0 => 4 newsID => 4 1 => 02.01.2006 newsDate => 02.01.2006 2 => Inhalt der zweiten Nachricht newsContent => Inhalt der zweiten Nachricht 3 => Titel der zweiten Nachricht newsTitle => Titel der zweiten Nachricht 1 => Array (8) 0 => 3 newsID => 3 1 => 01.01.2006 newsDate => 01.01.2006 2 => Inhalt der Ersten Message newsContent => Inhalt der Ersten Message 3 => Titel der Ersten Message newsTitle => Titel der Ersten Message 2 =>
Code: PHPwhile($row = mysql_fetch_array($mysqlResult)) { $newsArray[] = $row; }

liegt vermutlich daran, daß in der "kurzen" while-schreibweise erst zugeordnet wird und dann festgestellt, daß es false ist. damit gibts einen überschüssigen leeren eintrag im array.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026