Navigation auf Smarty umstellen?!

napsio

Mitglied
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")."\";");

Die Templates dazu (nur für navigation_left, da sich die anderen ziemlich gleichen):

navigation_left.tpl
Code:
$mvSiteNavLeftBox

navigation_left_box.tpl
Code:
<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="images/blank.gif" height="5" />

navigation_left_link_box.tpl
Code:
<table width="100%" class="navLeftTable" border="0" cellspacing="1" cellpadding="2">
	<tr>
		<td class="navLeftHead" align="center">
			$mvSiteNavLeftHead
		</td>
	</tr>
			$mvSiteNavLeftBody  
</table>
<img src="images/blank.gif" height="5" />

navigation_lin.tpl
Code:
	<tr>
		<td class="$mvSiteNavClassBody">
			<a href="$mvNavLink[nav_link]">$mvNavLink[nav_title]</a>
		</td>
	</tr>


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'));

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...=)
 
habs das ganze jetzt mal gekürzt und versucht schritt für schritt dran zu gehen...klappt aber immer noch nicht so ganz wies sein soll

hier mal der code

PHP:
$mvNavDb = $mcDb->query(
    "SELECT * 
	 FROM ".mTblNavCat." 
	 WHERE navcat_status='1' 
	     AND navcat_portalid='".mPortalId."' 

	 ORDER by navcat_order ASC"
);

while($mvNav = $mcDb->fetch_array($mvNavDb)){
    	$mvNavOut[] = $mvNav;
		
    $mcTpl->assign("mSiteNavLeftVar", $mvNavOut);
    if($mvNav['navcat_align']==1){
        if($mvNav['navcat_box']!=""){
			include("navigation/".$mvNav['navcat_box']);

			$mcTpl->assign("mSiteNavLeftBody", $mcTpl->fetch($mvNavTemplate));
			$mcTpl->assign("mSiteNavLeftBox", $mcTpl->fetch('navigation_left_box.tpl'));
        }
	}
}

$mcTpl->assign("mSiteNavLeft", $mcTpl->fetch('navigation_left.tpl'));

navigation_left.tpl
Code:
{foreach from=$mSiteNavLeftVar item=aktuelle_id}
	{$mSiteNavLeftBox}
{/foreach}

navigation_left_box.tpl
Code:
{$mSiteNavLeftBody}

navigation/navbox.counter.php
PHP:
unset($mvNavTemplate);
$mvNavTemplate = "navigation/counter.tpl";

navigation/counter.tpl
Code:
<b>counter test</b>

dann gibts noch ne navbox.login.php...die macht jedoch das gleiche wie die counter, bloß, dass die halt die navigation/login.tpl aufruft in der der text "login test" drin steht.

soviel zum code...nun zum problem

in der datenbank sind 7 einträge

davon haben 3 navcat_align=1 und davon 2 etwas in navcat_box stehen (navbox.counter.php & navbox.login.php)

also müssten eigentlich 2 sachen ausgegeben werden (<b>counter test</b> und <b>login test</b>)...das passiert aber nicht...es wird 7 mal "<b>counter test</b>" ausgegeben...es ist auch nicht der erste wert in der datenbank sondern der 3.

datenbank tabelle sieht ungefähr so aus:
Code:
navcat_id | navcat_status | navcat_title | navcat_align | navcat_portalid | navcat_box         | navcat_order
-----------------------------------------------------------------------------------------------------------
1         | 1             | login        | 1            | 1               | navbox.login.php   | 1
2         | 1             | test1        | 2            | 1               |                    | 1
3         | 1             | counter      | 1            | 1               | navbox.counter.php | 2
4         | 1             | test2        | 2            | 1               |                    | 2
5         | 1             | test3        | 2            | 1               |                    | 3
6         | 1             | test4        | 1            | 1               |                    | 2
7         | 1             | test5        | 1            | 1               |                    | 3

hoffe, dass mir jetzt n bisschen besser geholfen werden kann....bin total am veverzweifeln...=(
 
Zurück