Seite 1 von 1

getSubCategories() liefert nur leere Liste

Verfasst: Mo 11. Aug 2008, 15:21
von quasiso
Hallo zusammen,

ich setze PHP: 5.2.6 mit Contenido: 4.8.6 ein und bastle mir gerade ein Modul, das in den Artikel-Header direkt Links zu speziellen Unterkategorien - soweit vorhanden - einbaut.
Im konkreten Beispiel sollen die Unterkategorien der aktuellen Kategorie durchforstet werden, ob eine der Kategorien "Presse" heißt. Falls ja, wird daraus ein Link generiert - dafür brauche ich dann die entsprechende idCat.
Es hängt allerdings bei mir an der Funktion getSubCategories(), die als count() immer 0 auswirft, egal wo und wie ich sie integriere?!?

Code: Alles auswählen

// get headline
$oConCat = new Contenido_Category($db, $cfg);
$oConCat->load($idcat, true, $lang);
$sCat = $oConCat->getCategoryLanguage()->getName();

// "presse" found?
$oSub = $oConCat->getSubCategories();
if ($oSub->count() > 0) 
{ 
    foreach ($oSub as $oContenidoCategory) 
   { 
        $sName = $oContenidoCategory->getCategoryLanguage()->getName();
        if ($sName == "Presse")
            $idPresse = $oContenidoCategory->getIdCat();
    }
} 
Nur leider landet er nie im "if"-Teil. Kategorien sind selbstverständlich da und aktiv/online. Was mache ich falsch oder was fehlt?

Schon mal vielen Dank im voraus :-)

Verfasst: Mo 11. Aug 2008, 15:40
von rbi
Schau mal in die Sample.php von Contenido_Category. Es gibt eine Methode

Code: Alles auswählen

$oConCat->setloadSubCategories(true, 2); // will load subcategories of this idcat until given level
mit der du die Unterkategorien holst. Wenn du das nicht mitgibst, wird nur die angegebene Kategorie als Objekt geladen.

Verfasst: Mo 11. Aug 2008, 16:25
von quasiso
Schau mal in die Sample.php von Contenido_Category. Es gibt eine Methode Code [...] mit der du die Unterkategorien holst. Wenn du das nicht mitgibst, wird nur die angegebene Kategorie als Objekt geladen.
Sorry, ich vergaß zu erwähnen: setloadSubCategories(true,3) habe ich auch schon probiert. Ohne Effekt. Trotzdem danke für den Tipp.

Setze ich per $oSub=load(array($idcat),true,$lang) mal testweise nur die eigene Kategorie, verläuft alles ok: count() ergibt 1. Mich wundert aber, dass ich im ursprünglich angegebenen Code nicht mal die eigene Kategorie erhalte, wenn ich getSubCategories() benutze.

Oder bin ich da auf irgendeinem totalen Holzweg? Was genau (welchen Datentyp etc.) gibt die Funktion getSubCategories() zurück? Kann es Kategorien mit Unterkategorien geben, die trotzdem eine "0" zurückschicken?

Verfasst: Mo 11. Aug 2008, 17:18
von rbi
Contenido_Category ist ein Objekt, das eine einzelne Kategorie repräsentiert.
Wenn du dort Unterkategorien laden lässt, bekommst du mit getSubCategories() ein Objekt vom Typ Contenido_Categories (sowas wie ne Collection von Contenido_Category Objekten) zurück, was du dann mit foreach durchlaufen kannst. Es werden hier nur die Unterkategorien von der einen Kategorie geladen, von der du das Contenido_Category Objekt erzeugt hast.

Verfasst: Mo 11. Aug 2008, 18:40
von quasiso
Genauso hatte ich das auch verstanden.
Gute Nachrichten: Inzwischen läuft es - mir war nicht klar, dass "setloadSubCategories" vor dem "load"-Befehl kommen muss, ich hatte die Syntax genau anders herum verstanden. So sieht's jetzt aus:

Code: Alles auswählen

$oConCat = new Contenido_Category($db, $cfg);
$oConCat->setloadSubCategories(true,3);
$oConCat->load($idcat, true, $lang);
$sCat = $oConCat->getCategoryLanguage()->getName();

$oSub = $oConCat->getSubCategories();
$idPresse = $idcat; // if no "Presse" available
if ($oSub->count() > 0) { 
    foreach ($oSub as $oContenidoCategory) { 
        $sName = $oContenidoCategory->getCategoryLanguage()->getName();
        if ($sName == "Presse")
            $idPresse = $oContenidoCategory->getIdCat();
    }
}
Also tausend Dank für Deine schnelle Hilfe! :D