[QUOTE=leofonic;123077]oxubase ist nicht erweiterbar[/QUOTE]
Hallo Frank,
danke für den Tipp. Ich hatte es zunächst erfolglos mit alist versucht. Die Klasse ist aber wohl auch nicht generell erweiterbar.
Zur Erklärung meines Ziels:
Ich möchte zur Anzeige von Angeboten als Datenherkunft nicht die Funktion getBargainArticleList aus alist.php verwenden, da ich ja dann vorher im Backend manuell die Artikel auswählen muss.
Die Ausgabe soll über
erfolgen (einige Parameter zur Übersichtlichkeit weggelassen).
Es sollen alle Artikel angezeigt werden, die einen UVP angegeben haben. Ich konnte dazu leider keine fertige Lösung finden und möchte nun die Funktionen getBargainArticleList aus alist.php und loadActionArticles aus oxarticlelist.php kopieren und modifizieren.
Wie du durch meine Frage sicher schon bemerkt hast, bin ich Oxid-Neuling.
Ist meine geplante Vorgehensweise überhaupt sinnvoll oder gibt es hier einen besseren Weg?
Welche Klasse erweitere ich für diesen Zweck?
class sk_config extends sk_config_parent {
protected $_blLoadActions = null;
protected $_aTopArticleList = null;
protected $_aNewArticleList = null;
protected $_oFirstArticle = null;
protected $_oCatOfferArticle = null;
protected $_oCatOfferArtList = null;
protected function _getLoadActionsParam()
{
if ( $this->_blLoadActions === null ) {
$this->_blLoadActions = false;
if ( $this->getConfig()->getConfigParam( 'bl_perfLoadAktion' ) ) {
$this->_blLoadActions = true;
}
}
return $this->_blLoadActions;
}
public function getReduziert()
{
if ( $this->_aArticleList === null ) {
$this->_aArticleList = array();
if ( $this->_getLoadActionsParam() ) {
// start list
$oArtList = oxNew( 'oxarticlelist' );
$oArtList->loadActionArticles( 'oxreduced' );
if ( $oArtList->count() ) {
$this->_aArticleList = $oArtList;
}
}
}
return $this->_aArticleList;
}
...
public function getIsUvp() {
....
}
}
Vielleicht hilft es Dir etwas beim Verständnis.
Bei mir dient dieses Modul dazu, die Aktionen im ganzen Shop sichtbar zu machen.
Normalerweise sind diese nur von der Startseite sichtbar, dann kann die aufrufende Funktion nicht mehr initialisiert werden.
[B]und nun im Template mit [{$oViewConf->getReduziert()}][/B]
klar, diese findest du mit der Hilfe der Forensuche.
Und es gibt noch eine Sourcecode Dokumentation, in der man nach Klassen und Funktionen suchen kann bzw. schauen, was es für Klassen und Funktionen gibt und was sie machen: http://docu.oxid-esales.com/CE/sourcecodedocumentation/
[QUOTE=vanilla thunder;123271]klar, diese findest du mit der Hilfe der Forensuche.
Und es gibt noch eine Sourcecode Dokumentation, in der man nach Klassen und Funktionen suchen kann bzw. schauen, was es für Klassen und Funktionen gibt und was sie machen: http://docu.oxid-esales.com/CE/sourcecodedocumentation/[/QUOTE]
Ja danke. Ich bin mir im klaren darüber. Und habe diese auch schon gelesen.
Man muss ja nicht gleich so losbellen.
ICH MÖCHTE AUCH KEINE KOMPLETTLÖSUNGEN HABEN. ^^
Und da hakt es grad mal wieder. Ich habe mir wie im Beispiel oben die ‘actionlist’ mit getList() ausgeben lassen.
Da die benötigten ClassMember aber protected sind, habe ich versucht mit phps ReflectionClass an die Werte zu kommen. Scheint aber nicht zu funktioniern. Und laut Doku gibt es auch sonst keine funktion, mit der ich da ran komme.
Ich sehe es jedenfalls nicht.
public function getActivatedActions()
{
$oActionList = oxnew('oxactionlist');
$this->_actionClass = $oActionList->getList();
$reflect = new ReflectionClass($this->_actionClass);
//$property = $reflect->getProperties();
$property = $reflect->getProperty('_aArray');
foreach ($property as $key => $value)
{
foreach ($value as $k => $v)
{
echo $k ." ". $v."<br/>";
}
}
}
[QUOTE=keno;123299]
Da die benötigten ClassMember aber protected sind, habe ich versucht mit phps ReflectionClass an die Werte zu kommen. Scheint aber nicht zu funktioniern. Und laut Doku gibt es auch sonst keine funktion, mit der ich da ran komme.
Ich sehe es jedenfalls nicht.[/QUOTE]
Welche Class-Member, für was benötigt? Ein bisschen was musst du schon erzählen.
Ich dachte es mir so.
Es sollen im Template alle aktiven Aktionen angezeigt werden.
Wenn ich es jetzt so mache, wie in dem Beispiel vor mir, dann müsste man jedesmal ,wenn neue Aktionen hinzukommen das im Template erweitern.
Deshalb erst abfragen welche sind aktiv, ids merken per foreach mit der funktion
public function getActionList($action)
{
if ( $this->_aArticleList === null )
{
$this->_aArticleList = array();
if ( $this->_getLoadActionsParam() )
{
// start list
$oArtList = oxNew( 'oxarticlelist' );
$oArtList->loadActionArticles( $action );
if ( $oArtList->count() )
{
$this->_aArticleList = $oArtList;
}
}
}
return $this->_aArticleList;
}
laden.
Somit würde beim aktivieren/deaktivieren alles gleich uptodate sein.
! Ein Banner ist auch eine Aktion und würde somit mitgeladen werden !
Also mach eine DB Query auf oxactions mit select oxid … where oxactive=1 und oxtype!=3, dann hast Du ein Resultset der OXIDs. Dann kannst Du zu jeder dieser Oxids die oxnew(oxactions) laden und die ganzen Actions in einem 2dimensionalen array ( array_name[index=action_nr][index2=actionarticle] ) an Dein TPL übergeben
[QUOTE=kalina.0404;123310]! Ein Banner ist auch eine Aktion und würde somit mitgeladen werden !
Also mach eine DB Query auf oxactions mit select oxid … where oxactive=1 und oxtype!=3, dann hast Du ein Resultset der OXIDs. Dann kannst Du zu jeder dieser Oxids die oxnew(oxactions) laden und die ganzen Actions in einem 2dimensionalen array ( array_name[index=action_nr][index2=actionarticle] ) an Dein TPL übergeben[/QUOTE]
wird die Artikelliste beim ersten Aufruf gecached so dass man damit sicher keine unterschiedlichen Aktionen angezeigt bekommt. Wg. Aktiv: das Snippet von mir liefert bereits nur die aktiven Aktionen.
Die Banner könnte man auch einfach rausfiltern per oxtype oder weil Banner keine Artikel haben.
$oActionList = oxnew('oxactionlist');
$oActionList->getList();
foreach ($oActionList as $oAction){
$oArtList = oxNew( 'oxarticlelist' );
$oArtList->loadActionArticles( $oAction->getId() );
//Nur Aktionen mit Artikeln
if (count($oArtList)){
//Titel der Aktion
echo "<br><br>";
echo $oAction->oxactions__oxtitle;
//Artikel der Aktion
foreach ($oArtList as $oArticle){
echo "<br>";
echo $oArticle->oxarticles__oxtitle;
}
}
}