ich möchte gerne ein Modul (ohne Composer) schreiben bzw. von V4 auf V6 portieren, leider schon sehr lange vergeblich, trotz vieler Anleitungen und Beispiele anderer. Deshalb versuche ich es jetzt mal hier mit einem für mich recht einfach erscheinenden Beispiel:
Das Modul verändert die Methode ‘getMediaUrls()’ in
‘/vendor/oxid-esales/oxideshop-ce/source/Application/Model/Article.php’
Es soll der SQL-Abfrage ’ ORDER BY OXDESC’ hinzugefügt werden, damit die Reihenfolge der Medien-Links alphabetisch sortiert wird. ‘sortmediaurls’ ist der Name des Modulordners, ‘sortmediaurls.php’ ist die Klasse darin, die ‘sortmediaurls_parent’ erweitert.
aus der alten V4-Version:
class sortmediaurls extends sortmediaurls_parent
public function getMediaUrls()
{
if ( $this->_aMediaUrls === null ) {
$this->_aMediaUrls = oxNew("oxlist");
$this->_aMediaUrls->init("oxmediaurl");
$this->_aMediaUrls->getBaseObject()->setLanguage( $this->getLanguage() );
$sViewName = getViewName( "oxmediaurls", $this->getLanguage() );
$sQ = "select * from {$sViewName} where oxobjectid = '".$this->getId()."' ORDER BY OXDESC";
$this->_aMediaUrls->selectString($sQ);
}
return $this->_aMediaUrls;
}
wird für V6:
class sortmediaurls extends sortmediaurls_parent
public function getMediaUrls()
{
if ( $this->_aMediaUrls === null ) {
$this->_aMediaUrls = oxNew(\OxidEsales\Eshop\Core\Model\ListModel::class);
$this->_aMediaUrls->init("oxmediaurl");
$this->_aMediaUrls->getBaseObject()->setLanguage($this->getLanguage());
$sViewName = getViewName("oxmediaurls", $this->getLanguage());
$sQ = "select * from {$sViewName} where oxobjectid = :oxobjectid ORDER BY OXDESC";
$this->_aMediaUrls->selectString($sQ, [
':oxobjectid' => $this->getId()
]);
}
return $this->_aMediaUrls;
}
Hab ich da schon was falsch gemacht?
Aber in der metadata.php v1 steht ja auch noch
'extend' => array(
'oxarticle' => 'sortmediaurls/sortmediaurls'
aber wenn ich hier ‘oxarticle’ zu ‘Article’ ändere, wie Klasse nun ja heißt, wird das Modul scheinbar auch nicht vom Shop erkannt, es erscheint nicht im Adminbereich, es gibt keine Fehler dazu und die geänderte Funktion im Frontend ist auch nicht zu sehen.
Was muss hier in die metadata.php, oder liegt mein Fehler ganz woanders?