Hi
Ich bin neu hier und habe einige Dinge noch nicht ganz verstanden.
Zur Zeit erstelle ich kleinere Module für einige Tests des OXID eshop Systems.
Nun, für einer der Tests möchte ich im checkout, vor der Auswahl der Zahlungsarten, die Liste der Zahlungsarten filtern.
Dafür habe ich eine schon beinahe perfekt vorbereitete Methode Gefunden:
Datei: /vendor/oxid-esales/oxideshop-ce/source/Application/Model/PaymentList.php
Klasse: PaymentList
Methode: getPaymentList
Frage #1: Ist meine einzige möglichkeit die zahlungsarten zu filtern, das Überschreiben der gesammten Klasse? Ich finde dies ist ein overkill.
So, für meinen Test habe ich direkt mal versucht die Klasse zu überschreiben.
Meta:
/**
* Metadata version
*/
$sMetadataVersion = ‘1.0’;
/**
* Module information
*/
$aModule = array(
'id' => 'chriso',
'title' => 'Chriso',
'description' => array(
'de' => 'Mehr balabala mit chriso.',
'en' => 'Mehr balabala mit chriso.',
),
'version' => '0.1.1',
'author' => 'Chriso',
'url' => 'https://www.chriso.nenenenne.com',
'email' => '[email protected]',
'extend' => array(
\OxidEsales\Eshop\Application\Model\PaymentList::class => \CHRISO\testmodule\Model\PaymentList::class,
//\OxidEsales\Eshop\Application\Controller\PaymentController::class => \OxidEsales\PayPalModule\Controller\PaymentController::class,
)
);
und die Klasse (logisch unverändert):
namespace CHRISO\testmodule\Model;
class PaymentList extends \OxidEsales\EshopCommunity\Application\Model\PaymentList
{
/**
* Loads and returns list of user payments.
*
* @param string $sShipSetId user chosen delivery set
* @param double $dPrice basket product price excl. discount
* @param \OxidEsales\Eshop\Application\Model\User $oUser session user object
*
* @return array
*/
public function getPaymentList($sShipSetId, $dPrice, $oUser = null)
{
$this->selectString($this->_getFilterSelect($sShipSetId, $dPrice, $oUser));
return $this->_aArray;
// return parent::getPaymentList ....
}
}
Problem #1:
Im Backend bekomme ich die Fehlermeldung:
Es wurden ungültige Module erkannt.
- OxidEsales\Eshop\Application\Model\PaymentList => CHRISO\testmodule\Model\PaymentList
Die Klasse wird nicht überschrieben. (Die standard Klasse wird verwendet).
Problem #2:
In diesem Fall bringt es wohl nichts, die parent klasse mit der methode getPaymentList aufzurufen.
So wie die Klasse aufgebaut ist, scheint Sie mir nicht “overridable”.
Kann mir jemand sagen wie der “best Practice”-Ansatz für das filtern von Zahlungsarten ungefähr aussehen würde?
Grüsse