Seite 1 von 1
Service Navigation nur bis x-te Ebene auslesen
Verfasst: Mi 21. Sep 2005, 17:50
von GOLD
Ich möchte die Service-Navigation nur bis zur 2. Ebene anzeigen lassen. Theoretisch müsste ich doch nur die DB-Abfrage eingrenzen. Das habe ich über den Zusatz DESC LIMIT 0,2 probiert, leider ohne Erfolg. Kann mir jemand weiter helfen? Ich weiß nicht wo ich den Eintrag platzieren soll.
Code: Alles auswählen
// Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
// und nicht angezeigt werden soll.
if ($key != 0) {
$sql = "SELECT CAT.idcat AS idcat , name FROM ".
$cfg["tab"]["cat"]." AS CAT, ".
$cfg["tab"]["cat_lang"]." AS CATLANG
WHERE CAT.idcat = ".$val."
AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = '$lang'";
$db->query($sql);
Verfasst: Mi 21. Sep 2005, 19:46
von HerrB
Ohne mich weiter mit der Servicenavigation beschäftigt zu haben, würde ich sagen, dass es sich zunächst um das falsche SQL-Statement handelt (dieses ermittelt den Namen der Kategorie, deren DB-ID gerade in $val steht).
Es sollte noch ein anderes Statement geben (welches die Kategorien unter der obersten Kategorie ermittelt). Dort musst Du die Werte für level begrenzen (e.g. <Tabellenname>.level > 0 AND <Tabellenname>.level < 2).
Gruß
HerrB
Verfasst: Mi 21. Sep 2005, 19:58
von GOLD
hi, danke für den hinweis. da komme ich nur nicht so ganz drauf klar. level finde ich nur im input, aber dort einzugrenzen macht ja keinen sinn, weil das auslesen der db nur für die startposition entscheidend ist, oder?
könnte mir jemand im folgenden code zeigen, wo ich einsetzen muss:
// selected category
$selected = "CMS_VALUE[0]";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
<tr valign=\"top\">
<td>Kategorie wählen:</td>
<td>
<select name=\"CMS_VAR[0]\">";
if($selected!="0" && $selected!=""){
echo"<option value=\"0\">--- kein ---</option>";
}else{
echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
}
// fetch all categorys
$query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".
$cfg["tab"]["cat"]." AS B, ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ".
"AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ".
"AND C.visible=1 ORDER BY A.idtree";
// execute query
$db->query($query);
// loop result and build the options
while ($db->next_record()) {
// indent spacer
$spaces = "|";
// how many levels
$levels = $db->f("level");
for ($i = 0; $i < $levels; $i ++) {
// add 2 spaces for every level
$spaces = $spaces . "--";
} // end for
$spaces .= ">";
if ($selected == $db->f("idcat")) {
// selected category
echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
} else {
// category
echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";
} // end if
} // end while
echo " </select>";
echo " </td>
</tr>
</table>";
output:
<?php
include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");
$catStart = "CMS_VALUE[0]";
if ($catStart != "") {
$catIds = conDeeperCategoriesArray($catStart);
echo '<table cellpadding="0" cellspacing="0" border="0"><tr>';
echo '<td><img src="images/wuerfel.gif"></td>';
if ( is_array($catIds) ) {
foreach($catIds as $key=>$val) {
// Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
// und nicht angezeigt werden soll.
if ($key != 0) {
$sql = "SELECT CAT.idcat AS idcat , name FROM ".
$cfg["tab"]["cat"]." AS CAT, ".
$cfg["tab"]["cat_lang"]." AS CATLANG
WHERE CAT.idcat = ".$val."
AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = '$lang'";
$db->query($sql);
while ( $db->next_record() ) {
echo '<td height="21" class=".navigation" style="border: 0px; border-top:1px; border-color: #F7C473; border-style: dashed; background-color: #FFFFFF; padding-left:7px; padding-right:7px;">
<a class="klein" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a></td>';
} // end while
} // if
} // end foreach
} // end if (is_array)
echo '</tr></table>';
}
?>
Verfasst: Mi 21. Sep 2005, 20:29
von HerrB
Tja, wie soll ich sagen... das wird schwierig.
Nur Output:
Die Liste der Kategorien (bereits hierarisch unterhalb der gewählten Kategorie) liefert die Funktion conDeeperCategoriesArray (die könnte man m.E. übrigens optimieren: Wenn $found mal false wird, dürfte sie wohl nie wieder true werden, oder? D.h. man könnte die Schleife abbrechen).
Aus diesem Konstrukt hilft Dir leider wohl nur eine Erweiterung der Abfrage: Du musst zu jedem idcat den Level der idcat überprüfen (und auf die gewählte Tiefe begrenzen).
Sowas in der Art:
Code: Alles auswählen
$sql = "SELECT CAT.idcat AS idcat, CATLANG.name FROM ".
$cfg["tab"]["cat"]." AS CAT, ".
$cfg["tab"]["cat_lang"]." AS CATLANG, ".
$cfg["tab"]["cat_tree"]." AS CATTREE
WHERE CAT.idcat = ".$val."
AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = '$lang'
AND CAT.idcat = CATTREE.idcat
AND CATTREE.level <= 2";
Die "2" muss an Deine Gegegenheiten angepasst werden. Ungetestet.
Gruß
HerrB
Verfasst: Mi 21. Sep 2005, 21:07
von GOLD
ich bedanke mich vielmals, das hat gut geklappt
