Es wird die Mandateneinstellung searchrange/include ausgelesen und eigentlich sollte dann der ganze Baum unter den dort angegebenen Kategorien ausgelesen werden. Leider wird nur eine Unterebene ausgelesen. Ich habe diese Funktion ergänzt und die Performanz der Methode auch noch beträchtlich verbessert. Die neue Methode sieht wie folgt aus:
Code: Alles auswählen
/**
* @param $cat_start Root of a category tree
* @return Category Tree
*/
function getSubTree($cat_start)
{
// get immediate children
$sql = "
SELECT
B.idcat
FROM
".$this->cfg['tab']['cat']." AS B,
".$this->cfg['tab']['cat_lang']." AS C
WHERE
B.idcat = C.idcat AND
B.parentid = '".Contenido_Security::toInteger($cat_start)."' AND
C.idlang = '".Contenido_Security::toInteger($this->lang)."' AND
B.idclient = '".Contenido_Security::toInteger($this->client)."'";
if ($this->bDebug) {echo "<pre>$sql</pre>";}
$this->db->query($sql);
$sub_cats = array();
while ($this->db->next_record()) {
$sub_cats[] = intval($this->db->f('idcat'));
}
// recurse
foreach ($sub_cats as $sub_cat) {
foreach ($this->getSubTree($sub_cat) as $sub_sub_cat) {
$sub_cats[] = $sub_sub_cat;
}
}
return $sub_cats;
}