Artikel bewerten

homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Artikel bewerten

Beitrag von homtata »

Ich denke, dass

Code: Alles auswählen

$oSubCategory
Käse ist, weil das als Objekt ja gar nirgends instanziert wird und es wohl eher lauten muss:

Code: Alles auswählen

$mycats[] = $oContenidoCategory->getIdCat();
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Artikel bewerten

Beitrag von stefkey »

Ohja, sorry, das hatte ich tatsächlich noch selber erkannt gesternabend und hier vergessen zu korrigieren.

So siehts nun aus:

Code: Alles auswählen

$iStartIdcat = 1037; //hier die gewünschte idcat eintragen
$iSelectedDepth = 2; // hier erstmla nicht gewünscht, es wird nur 1 Ebene ermittelt.


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

$oSub = $oConCat->getSubCategories();

if ($oSub->count() > 0) { 
    foreach ($oSub as $oContenidoCategory) { 
    $mycats[] = $oContenidoCategory->getIdCat();
    }
}
Es wird jedoch trotzdem nur die erste Ebene im Array gespeichert. Mir fehlt da einfach noch viel wissen, zB vestehe ich nicht wirklich was $oSub->count() > 0) macht.
Hast du noch eine Idee woran es liegt das nur die erste Ebene ins Array fliegt?
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Artikel bewerten

Beitrag von homtata »

Heyho,

es tut mir leid, aber ich kann dir den Code wirklich derzeit nicht genauer zusammenbasteln, sonst müsste ich das gleich selbst hier programmieren.
In der Frontenendnavigation mit den zusätzlichen inkludierten Dateien ist das so, dass im Modul selbst zur angegebenen Kategorie die Unterkategorien einmal ermittelt werden. Danach schickt das Modul diese Unterkategorien in die ausgelagerte Funktion, wo die Unterkategorien selbst wieder die Funktion aufrufen, um zu ermitteln, ob sie selbst wieder Unterkategorien hätten usw.
Und so wird am Ende alles korrekt zusammengebastelt.

Es erfordert jetzt halt schon Programmierkenntnisse, um das Frontendnavigationsmodul samt inkludierter Funktion so zu nutzen, dass es die gleichen Durchläufe macht wie sonst auch, aber halt das ganze nicht ins Templatesystem übergibt, sondern in ein Array.

Mein bisheriger sehr simpler Code muss nix verschachteln, weil über diese Funktionen eben IMMER nur die nächste Ebene einer Kategorie ausgelesen wird, mehr nicht. Die Leveltiefe ergibt sich durch das Einsetzen der Funktionsschleife, ohne die es offensichtlich bei dir nicht gehen wird.
Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Artikel bewerten

Beitrag von Zuschauer »

Moin stefkey,
stefkey hat geschrieben:

Code: Alles auswählen

    foreach ($oSub as $oContenidoCategory) { 
    $mycats[] = $oSubCategory->getIdCat();
    }
genau dort liegt der Fehler, $oContenidoCategory ist nicht $oSubCategory.

Gruß
Zuschauer
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Artikel bewerten

Beitrag von homtata »

Hallo stefkey,

ich habe dir jetzt den Code mal zusammengestellt, so wie ich das vorgeschlagen hatte mit dem Umbiegen der Hauptnavigation. Kastriert man das auf die puren Schleifen, nimmt die Ausgaben weg und erzeugt eine neue Klasse, die sich mit der Hauptnavigation nicht beißt, dann ergibt das den folgenden Code für ein Modul. In Zeile 43 findest du dann die Variable $mycats, die enthält das Array für die oben definierte Ausgangskategorie und die genannte Tiefe, die sich selbstverständlich in die dort vorgeschlagenen Mandantenwerte auslagern lassen.

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Output some HTML text
*
* @version 1.0.0
* @author Rudi Bieller
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2008-04-07
* }}
*
* $Id$
*/


// in $mycats werden nach und nach durch die Loops die Kategorie-IDs gespeichert.
if (!isset($db)) {
    $db = new DB_Contenido();
}

$iStartIdcat = getEffectiveSetting('navigation_comments', 'idcat', 1);
$iSelectedDepth = getEffectiveSetting('navigation_comments', 'level-depth', 4);

if ($iStartIdcat > 0) {
    $mycats[] = $iStartIdcat;
    $oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
    $oFeNav->setAuth($auth);
    $oFeNav->setRootCat($iStartIdcat);
    $oSubCategories = $oFeNav->getSubCategories($iStartIdcat, true, true, 1);
    // see if there are any subcategories to display
    if ($oSubCategories->count() > 0) {
        
        $aDepthInfo = array();
        $aDepthInfo[0] = 0;
        $aDepthInfo[1] = $iSelectedDepth;
        foreach ($oSubCategories as $oSubCategory) {
            $mycats[] = $oSubCategory->getIdCat();
            Contenido_GetSubs_Util::loopCats($oSubCategory, $oFeNav, $cfg, $lang, intval($idcat), $aDepthInfo);
        }
        print_r($mycats);
    }
} else {
    echo '<p>Navigation not configured correctly.</p>';
}

class Contenido_GetSubs_Util {

    public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, array $aCfg, $iLang, $iCurrentPageIdcat, array $aDepthInfo = array()) {
    
        global $mycats;
        
        $aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1;
        $aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1;
        $oCurrentSubcategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat());

        // continue until max level depth
        if ($aDepthInfo[1] > $aDepthInfo[0]) {
            // check if current item has sub-items to be displayed

            if ( $oCurrentSubcategories->count() > 0) {
                $oSubCategories = $oCurrentSubcategories;
                foreach ($oSubCategories as $oSubCategory) {
                    $mycats[] = $oSubCategory->getIdCat();
                    self::loopCats($oSubCategory, $oFrontendNavigation, $aCfg, $iLang, $iCurrentPageIdcat, $aDepthInfo);
                }
            } 
        }
    }
}

?>
LG
Viktor
Gesperrt