getSubCategories() liefert nur leere Liste

Gesperrt
quasiso
Beiträge: 3
Registriert: Mo 11. Aug 2008, 15:00
Kontaktdaten:

getSubCategories() liefert nur leere Liste

Beitrag 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 :-)
rbi
Beiträge: 95
Registriert: Do 27. Sep 2007, 21:33
Kontaktdaten:

Beitrag 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.
quasiso
Beiträge: 3
Registriert: Mo 11. Aug 2008, 15:00
Kontaktdaten:

Beitrag 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?
rbi
Beiträge: 95
Registriert: Do 27. Sep 2007, 21:33
Kontaktdaten:

Beitrag 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.
quasiso
Beiträge: 3
Registriert: Mo 11. Aug 2008, 15:00
Kontaktdaten:

Beitrag 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
Gesperrt