Navigation auf Smarty umstellen?!
napsio
- php
hi,
ich bin vor kurzem auf Smarty gestoßen und bin gerade dabei mein CMS darauf umzustellen...Bis jetzt klappt auch alles ganz gut...Aber bei der Navigation habe ich ein problem
Mein bisheriger Code sag wie folgt aus:
[php]$mvNavDb=$mcDB->mfQuery("SELECT * FROM ".mTblNavCat." WHERE navcat_status='1' ORDER by navcat_order ASC");
while($mvNav=$mcDB->mfFetchArray($mvNavDb)){
if($mvNav['navcat_align']==1){
$mvSiteNavClassBody = 'navLeftBody';
$mvSiteNavClassTable = 'navLeftTable';
unset($mvSiteNavLeftHead);
unset($mvSiteNavLeftBody);
if($mvNav['navcat_box']!=""){
include("navigation/".$mvNav['navcat_box']);
$mvSiteNavLeftHead=$mvNav['navcat_title'];
eval ("$mvSiteNavLeftBody .= "".mfGetTemplate($mvNavTemplate)."";");
eval ("$mvSiteNavLeftBox .= "".mfGetTemplate("navigation_left_box")."";");
}
else{
$mvNavLinkDb=$mcDB->mfQuery("SELECT * FROM ".mTblNav." WHERE nav_cat='".$mvNav['navcat_id']."' ORDER by nav_order ASC");
while($mvNavLink=$mcDB->mfFetchArray($mvNavLinkDb)){
$mvSiteNavClassBody = "navLeftBody";
$mvSiteNavClassTable = 'navLeftTable';
eval ("$mvSiteNavLeftBody .= "".mfGetTemplate("navigation_link")."";");
}
$mvSiteNavLeftHead=$mvNav['navcat_title'];
eval ("$mvSiteNavLeftBox .= "".mfGetTemplate("navigation_left_link_box")."";");
}
}
elseif($mvNav['navcat_align']==2){
$mvSiteNavClassBody = 'navRightBody';
$mvSiteNavClassTable = 'navRightTable';
unset($mvSiteNavRightHead);
unset($mvSiteNavRightBody);
if($mvNav['navcat_box']!=""){
include("navigation/".$mvNav['navcat_box']);
$mvSiteNavRightHead=$mvNav['navcat_title'];
eval ("$mvSiteNavRightBody .= "".mfGetTemplate($mvNavTemplate)."";");
eval ("$mvSiteNavRightBox .= "".mfGetTemplate("navigation_right_box")."";");
}
else{
$mvNavLinkDb=$mcDB->mfQuery("SELECT * FROM ".mTblNav." WHERE nav_cat='".$mvNav['navcat_id']."' ORDER by nav_order ASC");
while($mvNavLink=$mcDB->mfFetchArray($mvNavLinkDb)){
$mvSiteNavClassBody = "navRightBody";
$mvSiteNavClassTable = 'navRightTable';
eval ("$mvSiteNavRightBody .= "".mfGetTemplate("navigation_link")."";");
}
$mvSiteNavRightHead=$nav['navcat_title'];
eval ("$mvSiteNavRightBox .= "".mfGetTemplate("navigation_right_link_box")."";");
}
}
elseif($mvNav['navcat_align']==3){
$mvSiteNavClassBody = 'navTopBody';
$mvSiteNavClassTable = 'navTopTable';
unset($mvSiteNavTopHead);
unset($mvSiteNavTopBody);
if($mvNav['navcat_box']!=""){
include("navigation/".$mvNav['navcat_box']);
$mvSiteNavTopHead=$mvNav['navcat_title'];
eval ("$mvSiteNavTopBody .= "".mfGetTemplate($mvNavTemplate)."";");
eval ("$mvSiteNavTopBox .= "".mfGetTemplate("navigation_top_box")."";");
}
else{
$mvNavLinkDb=$mcDB->mfQuery("SELECT * FROM ".mTblNav." WHERE nav_cat='".$mvNav['navcat_id']."' ORDER by nav_order ASC");
while($mvNavLink=$mcDB->mfFetchArray($mvNavLinkDb)){
$mvSiteNavClassBody = "navTopBody";
$mvSiteNavClassTable = 'navTopTable';
eval ("$mvSiteNavTopBody .= "".mfGetTemplate("navigation_link")."";");
}
$mvSiteNavTopHead=$mvNav['navcat_title'];
eval ("$mvSiteNavTopBox .= "".mfGetTemplate("navigation_top_link_box")."";");
}
}
elseif($mvNav['navcat_align']==4){
$mvSiteNavClassBody = 'navBottomBody';
$mvSiteNavClassTable = 'navBottomTable';
unset($mvSiteNavBottomHead);
unset($mvSiteNavBottomBody);
if($mvNav['navcat_box']!=""){
include("navigation/".$mvNav['navcat_box']);
$mvSiteNavBottomHead=$mvNav['navcat_title'];
eval ("$mvSiteNavBottomBody .= "".mfGetTemplate($mvNavTemplate)."";");
eval ("$mvSiteNavBottomBox .= "".mfGetTemplate("navigation_bottom_box")."";");
}
else{
$mvNavLinkDb=$mcDB->mfQuery("SELECT * FROM ".mTblNav." WHERE nav_cat='".$mvNav['navcat_id']."' ORDER by nav_order ASC");
while($mvNavLink=$mcDB->mfFetchArray($mvNavLinkDb)){
$mvSiteNavClassBody = "navBottomBody";
$mvSiteNavClassTable = 'navBottomTable';
eval ("$mvSiteNavBottomBody .= "".mfGetTemplate("navigation_link")."";");
}
$mvSiteNavBottomHead=$mvNav['navcat_title'];
eval ("$mvSiteNavBottomBox .= "".mfGetTemplate("navigation_bottom_link_box")."";");
}
}
}
eval ("$mvSiteNavBottom .= "".mfGetTemplate("navigation_bottom")."";");
eval ("$mvSiteNavTop .= "".mfGetTemplate("navigation_top")."";");
eval ("$mvSiteNavRight .= "".mfGetTemplate("navigation_right")."";");
eval ("$mvSiteNavLeft .= "".mfGetTemplate("navigation_left")."";");[/php]
Die Templates dazu (nur für navigation_left, da sich die anderen ziemlich gleichen):
navigation_left.tpl
[html]$mvSiteNavLeftBox[/html]
navigation_left_box.tpl
[html]<table width="100%" class="navLeftTable" border="0" cellspacing="1" cellpadding="2">
<tr>
<td class="navLeftHead" align="center">
$mvSiteNavLeftHead
</td>
</tr>
<tr>
<td class="navLeftBody">
$mvSiteNavLeftBody
</td>
</tr>
</table>
<img src="http://www.traum-projekt.com/forum/images/blank.gif" height="5" />[/html]
navigation_left_link_box.tpl
[html]<table width="100%" class="navLeftTable" border="0" cellspacing="1" cellpadding="2">
<tr>
<td class="navLeftHead" align="center">
$mvSiteNavLeftHead
</td>
</tr>
$mvSiteNavLeftBody
</table>
<img src="http://www.traum-projekt.com/forum/images/blank.gif" height="5" />[/html]
navigation_lin.tpl
[html] <tr>
<td class="$mvSiteNavClassBody">
<a href="$mvNavLink[nav_link]">$mvNavLink[nav_title]</a>
</td>
</tr>[/html]
Als ich es umgestellt habe, habe ich die ganzen eval Funktionen durch Smarty Funktionen ersetzt
[php]// z.B.
eval ("$mvSiteNavLeft .= "".mfGetTemplate("navigation_left")."";");
// in
$mcTpl->assign("mSiteNavLeft", $mcTpl->fetch('navigation_left.tpl'));[/php]
und die Variablen in den Templates in {} eingeschlossen. Aber es funktioniert nicht.
Kann mir vielleicht jemand sagen wie ich das machen muss, damit es klappt?
Smarty ist ziemlich genial...jedoch auch ziemlich schwer sich einzuarbeiten, weils doch sehr umfangreich ist
Würde mich über jede Antwort freue, die mir helfen könnte das Problem zu lösen.
Danke...=)
oder mal was anderes
kennt vielleicht jemand eine Template Klasse, die quasi genau so anwendbar ist wie mit der eval() Template Funktion?
echo $begrüßung;
kennt vielleicht jemand eine Template Klasse, die quasi genau so anwendbar ist wie mit der eval() Template Funktion?
"Genauso" würde ich ungern als Kriterium verwenden. Vielleicht bietet ja eine andere Methode eine bessere Lösung...
Es gibt in PEAR einige Template-Klassen in der Rubrik HTML: HTML_Template_*
Mein Favorit ist HTML_Template_IT und dessen Erweiterung HTML_Template_Sigma.
echo "$verabschiedung $name";
Mit "genauso" meinte ich, dass man z.B. ohne Probleme in einer While Schleife Variablen im Template durch Templates ersetzen kann.
Mit Smarty klappt das leider nicht so (denke ich...zumindest konnte mich keiner vom gegenteil überzeugen).
Und da mein CMS aus eval() Basis läuft und ich mich schon an die Handhabung gewöhnt habe, es mir jedoch zu langsam ist, suche ich entweder eine Lösung, wie ich meinen ersten Beitrag mit Smarty oder einer anderen Template-Klasse lösen kann oder eine Template-Klasse die dem eval()-Prinzip ähnelt.
Thx napsio