Alist erweitern OXID 6.1.2

#1

Hi,

ich versuche unter der o.g. Version die Klasse alist zu erweitern um eine Funktion.
Das klappt aber bei mir nicht, obwohl ich das unter 4.9 bereits schon mal gemacht habe und da klappte es…

Es kommt zwar keine Fehlermeldung bei mir wenn ich das Modul registriere, aber wenn ich die Funktion im Template aufrufe:

[{$oView->getArticlesTest'}]

kriege ich einen redirect auf die Startseite mit der Meldung:

[2019-05-09 16:16:34] OXID Logger.ERROR: Function ‘getArticlesTest’ does not exist or is not accessible! (ho_article)

Gibt es ein praxisnahes Beispiel wie das nun geht?

Viele Grüße

Christopher

Wie Suche erweitern und Ergebnisse filtern OXID 6.1.2?
#2

es soll angeblich direkt beim OXID dabei ein paar quelloffene Module geben, praxisnäher gehts nicht.

#3

Ok, das Problem hab ich gelöst. Da war nur die Pfadangabe falsch. Allerdings bin ich jetzt gerade doch etwas Verwirrt.

Kurze Erklärung. ich möchte die Produkte in der alist noch einmal Filtern.
Also Versuhe ich natürlich die Klasse alist zu erweitern. Da ich wie ich dachte, die Artikel in der Funktion getArticleList() geladen werden, dem scheint aber nicht so.

Denn wenn die Funktion

public function getArticleList()
{
    if ($this->_aArticleList === null) {
        if ($category = $this->getActiveCategory()) {
            $articleList = $this->_loadArticles($category);
            if (count($articleList)) {
                $this->_aArticleList = $articleList;
            }
        }
    }
    return $this->_aArticleList;
}

aufrufe, ist, so wie ich das feststellen konnte, $this->_aArticleList nicht leer.

Weiß einer wo die Artikel geladen werden und wo ich Einfluß auf die Liste nehmen könnte?

Vielen Dank im Voraus.

#4

Ist zwar schon alt, vielleicht hilft’s: Workshop 2 von X: AJAX Filter

#5

@rubbercut Danke für den Tip, ist zwar etwas alt aber ich konnte mir davon etwas umwandeln, jetzt baut er schon mal mit meiner Funktion die Artikelliste auf. Jetzt muss ich nur noch herausfinden wie die session_attrfilter Variable aussehen muss und ich kann den Filter mit übergeben. Dann sollte es funktionieren.

Weißt du zufällig wie aufgebaut wird? Ist höchstwahrscheinlich ein array oder?

#6

Yepp:

public function executefilter()
{
$iLang = oxRegistry::getLang()->getBaseLanguage();
// store this into session
$aFilter = oxRegistry::getConfig()->getRequestParameter(‘attrfilter’, true);
$sActCat = oxRegistry::getConfig()->getRequestParameter(‘cnid’);

    if (!empty($aFilter)) {
        $aSessionFilter = oxRegistry::getSession()->getVariable('session_attrfilter');
        //fix for #2904 - if language will be changed attributes of this category will be deleted from session
        //and new filters for active language set.
        $aSessionFilter[$sActCat] = null;
        $aSessionFilter[$sActCat][$iLang] = $aFilter;
        oxRegistry::getSession()->setVariable('session_attrfilter', $aSessionFilter);
    }
}

Sorry:6.

$baseLanguageId = \OxidEsales\Eshop\Core\Registry::getLang()->getBaseLanguage();
// store this into session
$attributeFilter = \OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter(‘attrfilter’, true);
$activeCategory = \OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter(‘cnid’);

    if (!empty($attributeFilter)) {
        $sessionFilter = \OxidEsales\Eshop\Core\Registry::getSession()->getVariable('session_attrfilter');
        //fix for #2904 - if language will be changed attributes of this category will be deleted from session
        //and new filters for active language set.
        $sessionFilter[$activeCategory] = null;
        $sessionFilter[$activeCategory][$baseLanguageId] = $attributeFilter;
        \OxidEsales\Eshop\Core\Registry::getSession()->setVariable('session_attrfilter', $sessionFilter);
    }
#7

@rubbercut vielen Dank, es hat funktioniert… sogar noch besser als es eigentlich von mir geplant war :slight_smile:

#8

Sowas soll gelegentlich vorkommen :laughing:
Gerne.