Seite 1 von 1
Kategorienamen nur wenn Unterkategorie vorhanden
Verfasst: Mi 13. Sep 2006, 13:14
von silicone
Hallo liebe Leute,
um den aktuellen Kategorienamen anzuzeigen benutze ich folgenden Schnipsel von emergence (Danke hierfür):
Code: Alles auswählen
<?php
$sql = "SELECT
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
B.idcat ='$idcat'";
$db->query($sql);
$db->next_record();
echo '<h1>'.$db->f('name').'</h1>';
?>
Das dient mir als Überschrift für die geteilte Hauptnavi von OSI.
Funktioniert auch bestens. Aber jetzt wäre es schön, wenn der Kategoriename nur auftaucht, wenn es in dieser Kategorie noch Unterkats gibt.
Kann mir jemand dabei helfen?
Das besagte Projekt ist
hier zu sehen. (Noch im Anfangsstadium)
Gruß
Thomas
Verfasst: Mi 13. Sep 2006, 13:26
von php0815
Wenn von der idcat eine parentid vorhanden ist ist auch eine Unterkategorie da.
Zu finden in der Tabelle xxx_cat.
Verfasst: Mi 13. Sep 2006, 14:20
von silicone
Danke für den Tip. Leider bin ich , was Programmierung angeht, immer noch Greenhorn. Habe es mit folgendem Code versucht:
Code: Alles auswählen
<?php
$sql = "SELECT
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
B.idcat ='$idcat' AND
B.parentid != 0";
$db->query($sql);
$db->next_record();
echo '<h1>'.$db->f('name').'</h1>';
?>
Das liefert aber nicht das gewünschte Ergebnis.
Bei dieser Abfrage liefert das Script für B.parentid als Ergebnis 1, sofern ich nicht in Unterkategorien bin...
Verfasst: Do 14. Sep 2006, 08:32
von simu
Versuchs mal damit... habs nicht getestet aber sollte funktionieren.
Code: Alles auswählen
<?php
$sql = "SELECT
C.name
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C,
".$cfg["tab"]["cat"]." AS D1,
".$cfg["tab"]["cat_lang"]." AS D2
WHERE
A.idcat=B.idcat AND
B.idcat=C.idcat AND
C.idlang='$lang' AND
B.idclient='$client' AND
B.idcat ='$idcat' AND
B.parentid != 0 AND
D1.parentid = A.idcat AND
D2.idcat = D1.idcat AND
D2.public =1
LIMIT 1";
$db->query($sql);
if( $db->next_record() )
echo '<h1>'.$db->f('name').'</h1>';
?>
Verfasst: Do 14. Sep 2006, 11:23
von silicone
Hallo Simu,
danke für deine Hilfe!
Auf den ersten Blick funktioniert deine Abfrage super. Leider hab ich dann gemerkt, dass keine Überschrift mehr angezeigt wird, wenn ich mich eine Ebene weiter bewege. Dann habe ich nur die Verzeichnisauflistung ohne Überschrift.
Ich habe mir mit folgendem Code geholfen:
Code: Alles auswählen
<?php
$sql = "SELECT
name,parentid
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
B.idcat ='$idcat' AND
B.parentid != 0";
$db->query($sql);
$db->next_record();
$pid = $db->f('parentid');
if ($pid != 1) {
echo '<h1>'.$db->f('name').'</h1>';
} else {
$sql = "SELECT
C.name,
B.parentid
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C,
".$cfg["tab"]["cat"]." AS D1,
".$cfg["tab"]["cat_lang"]." AS D2
WHERE
A.idcat=B.idcat AND
B.idcat=C.idcat AND
C.idlang='$lang' AND
B.idclient='$client' AND
B.idcat ='$idcat' AND
B.parentid != 0 AND
D1.parentid = A.idcat AND
D2.idcat = D1.idcat AND
D2.public =1
LIMIT 1";
$db->query($sql);
if( $db->next_record() )
echo '<h1>'.$db->f('name').'</h1>';
}
?>
Das funktioniert soweit, scheint aber aus Programierersicht völliger mumpiz zu sein. Was meinst du?
Gruß
Thomas