Hallo,
gibt es ein Feature um die tatsächliche Anzahl der Artikel in einer Kategorie und allen Unterkategorien zu ermitteln?
A
|—B
| |—C
| | |—Prod1
| | |—Prod2
| | |—Prod3
| |
| |—D
| | |—Prod1
| | |—Prod2
| |
| |—Prod1
| |—Prod2
Hallo Lukas,
sehr schön und sehr elegant.
Ich habe es natürlich schon gestern mit einer Erweiterung des alist Controllers umgesetzt, ohne Rekursion, nur schnell Q&D und einem rudimentären Break, sollte er eine Endlosschleife durchlaufen:
public function getDeepCount() {
//DB Connect
$oDB = oxDb::getDb( true );
$oCat = $this->getActiveCategory();
$catid=$oCat->oxcategories__oxid->value;
//Alle direkten Unterkategorien
$sql_mycheck="select oxid from oxcategories where oxparentid='$catid';";
$res_mycheck=$oDB->execute($sql_mycheck);
$aDone=array();
array_push($aDone,$catid);
$aTodo=array();
if ($res_mycheck&&$res_mycheck->RecordCount()>0) {
while(!$res_mycheck->EOF){
$sOxid=$res_mycheck->fields[0];
array_push($aDone,$sOxid);
array_push($aTodo,$sOxid);
$res_mycheck->moveNext();
}
}
/* print_r($aTodo); */
$ibreak=0;
while(count($aTodo)>0) {
$workid=array_shift($aTodo);
$sql_mycheck_sub="select oxid from oxcategories where oxparentid='$workid';";
$res_mycheck_sub=$oDB->execute($sql_mycheck_sub);
if ($res_mycheck_sub&&$res_mycheck_sub->RecordCount()>0) {
while(!$res_mycheck_sub->EOF){
if($ibreak>15000) { /*wir laufen in einer endlosschleife */ break;}
$sOxid=$res_mycheck_sub->fields[0];
array_push($aDone,$sOxid);
array_push($aTodo,$sOxid);
$res_mycheck_sub->moveNext();
$ibreak++;
}
}
}
/* print_r($aDone); */
$sql_suff="";
foreach ($aDone as $id) {
$sql_suff.="'".$id."',";
}
$sql_suff=substr($sql_suff,0,-1);
$sql_mycount="select oxobjectid from oxobject2category,oxarticles where oxobject2category.oxcatnid in ($sql_suff) and oxarticles.oxid=oxobject2category.oxobjectid;";
$res_mycount=$oDB->execute($sql_mycount);
$iMyCount=0;
if($res_mycount&&$res_mycount->RecordCount()>0) {
$iMyCount=$res_mycount->RecordCount();
}
return $iMyCount;
}
Hi, nein. Ich brauche alle, auch die inaktiven
sonst einfach um oxactive=1 erweitern, also
$sql_mycount="select oxobjectid from oxobject2category,oxarticles where oxobject2category.oxcatnid in ($sql_suff) and oxarticles.oxid=oxobject2category.oxobjectid and oxarticles.oxactive=1;";