Seite 1 von 1
Elternelement mittels idart/idcat herausfinden
Verfasst: Mi 30. Jan 2008, 10:28
von Dalamar
Guten Morgen,
weis jemand, ob es in Contenido eine Standard-Methode gibt, die es mir ermöglicht mittels einer Artikel-ID (idart) und einer Kategorie-Ebene (0..x) die idcat der entsprechenden Elternkategorie zu erhalten.
So alla:
Code: Alles auswählen
function getParentlyIdcat($idart, $level) {
...
return $idcat;
}
Schonmal besten Dank im voraus.
Christian
Verfasst: Mi 30. Jan 2008, 11:01
von emergence
also auf den level bezogen -> nein
vielleicht nützlich
functions.con.php -> function conGetCategoryAssignments
functions.con.php -> function conFetchCategoryTree
beides müsste halt kombiniert werden...
Verfasst: Mi 30. Jan 2008, 11:20
von Dalamar
Schonmal Danke emergence... werde es ausprobieren.

Verfasst: Mi 30. Jan 2008, 14:52
von Dalamar
Keine Ahnung, ob ich mir die Mühe umsonst gemacht habe. Leider wusste ich nicht wie man mit Hilfe einer idcat oder einer idart das Elternelement einer bestimmten Ebene beziehen kann. Also habe ich mich selber mal rangesetzt. Hier der Code... vielleicht kann ihn ja jemand gebrauchen:
Code: Alles auswählen
<?
function getCategoryAssignmentByIdart($idart) {
// Liefert array, obwohl Artikel nur noch einer Kategorie zugeordnet werden kann
$idcat = conGetCategoryAssignments((int)$idart);
return $idcat[0];
}
function getCategoryAssignmentByIdcat($idcat) {
// foo
return (int)$idcat;
}
/**
* Get the Idcat of Parent Element dependent on level
*
* @param integer $current_idcat - Idcat of Child Element
* @param integer $level - Level of Parent Element
*
* @return $idcat
*
*/
function getParentIdcatByLevel($current_idcat, $level = 0)
{
global $db, $cfg, $lang, $client;
if($current_idcat > 0)
{
if ($db === false)
{
$db = new DB_Contenido;
}
$sql = "SELECT
c.level AS level
FROM
".$cfg["tab"]["cat_lang"]." AS a,
".$cfg["tab"]["cat"]." AS b,
".$cfg["tab"]["cat_tree"]." AS c
WHERE
a.idlang = '".$lang."' AND
b.idclient = '".$client."' AND
b.idcat = '".$current_idcat."' AND
a.idcat = b.idcat AND
c.idcat = b.idcat";
$db->query($sql);
$db->next_record();
$current_idcat_level = $db->f("level");
if($current_idcat_level > 0)
{
$catarray = array();
$catarray = conFetchCategoryTree($client);
for($i = $current_idcat_level - 1; $i >= $level; $i--)
{
foreach($catarray AS $key=>$value)
{
// Alle Bäume, die sich auf der selben oder einer tieferen Ebenen befinden, löschen
if($value["level"] > $i) unset($catarray["$key"]);
// i.O.
else
{
$parent = $current_idcat;
while($parent != 0)
{
$sql = "SELECT
a.parentid
FROM
".$cfg["tab"]["cat"]." AS a,
".$cfg["tab"]["cat_lang"]." AS b
WHERE
a.idclient = '".$client."' AND
b.idlang = '".$lang."' AND
a.idcat = b.idcat AND
a.idcat = '".$parent."'";
$db->query($sql);
$db->next_record();
$parent = $db->f("parentid");
if($parent == $value["idcat"] && $value["level"] == $i)
{
$parent_idcat = $value["idcat"];
$parent = $value["idcat"];
}
}
}
}
}
return $parent_idcat;
}
}
return false;
}
// idart
if($idart) {
$output = getParentIdcatByLevel(getCategoryAssignmentByIdart($idart), 1);
}
// idcat
else {
$output = getParentIdcatByLevel(getCategoryAssignmentByIdcat($idcat), 1);
}
// echo $output;
?>
Verfasst: Sa 2. Feb 2008, 17:05
von kloevekorn
Hallo Dalamar,
vielen Dank! Ich glaube, genau diese Funktion könnte ich für mein Ziel gebrauchen, die vpSitemap aufzubohren. Ich möchte alle Kategorien fest auf n Level anzeigen (konkret: n=2), aber die aktuelle Kategorie auf 3-4 Level.
(->
http://www.contenido.de/forum/viewtopic.php?t=19214.) Hierfür muss ich innerhalb der vpSitemap nur beim Parent der aktuellen Kategorie mehr Level ausgeben (wenn es ein besseres Modul für den Umbau gibt - nehme gerne einen Tipp an)
Meine Frage (ich kann den Code nicht richtig nachvollziehen): dein Code zeigt immer die oberste ParentID des Level1 an, nicht den direkten Parent, den ich für meinen Wunsch bräuchte. Ich hoffe, man muss nur einen Parameter verändern ... hast du, hat jemand einen Tipp?
Wenn ich den hätte, könnte ich die vpSitemap vielleicht erweitern. Auch wenn ich noch nicht weiß wie
vielen Dank und Gruß,
jan
Verfasst: Sa 2. Feb 2008, 20:32
von Dalamar
- Navigation (Ebene 0)
-- Menuepunkt 1 (Ebene 1)
---- Menuepunkt 1.1 (Ebene 2)
---- Menuepunkt 1.2 (Ebene 2)
---- Menuepunkt 1.3 (Ebene 2)
-------- Menuepunkt 1.3.1 (Ebene 3)
-------- Menuepunkt 1.3.2 (Ebene 3) <--- idcat 100
-------- Menuepunkt 1.3.3 (Ebene 3)
---- Menuepunkt 1.4 (Ebene 2)
-- Menuepunkt 2 (Ebene 1)
Naja, wenn Du z.B. von Menuepunkt 1.3.2 das Elternelement der zweiten Ebene haben möchtest dann rufst Du einfach die Funktion
getParentIdcatByLevel mit folgenden Parametern auf und erhälst die idcat des Menuepunktes 1.3.
Code: Alles auswählen
$idcatderzweitenebene = getParentIdcatByLevel(100, 2);
LG,
Christian
Verfasst: Mo 4. Feb 2008, 13:27
von kloevekorn
Super, dann werde ich mal weiter experimentieren .... danke.