Service Navigation nur bis x-te Ebene auslesen

Gesperrt
GOLD
Beiträge: 71
Registriert: Sa 14. Aug 2004, 22:24
Kontaktdaten:

Service Navigation nur bis x-te Ebene auslesen

Beitrag von GOLD » Mi 21. Sep 2005, 17:50

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

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 21. Sep 2005, 19:46

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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

GOLD
Beiträge: 71
Registriert: Sa 14. Aug 2004, 22:24
Kontaktdaten:

Beitrag von GOLD » Mi 21. Sep 2005, 19:58

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

}
?>

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 21. Sep 2005, 20:29

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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

GOLD
Beiträge: 71
Registriert: Sa 14. Aug 2004, 22:24
Kontaktdaten:

Beitrag von GOLD » Mi 21. Sep 2005, 21:07

ich bedanke mich vielmals, das hat gut geklappt :D

Gesperrt