Problem bei Modul-Erweitertung

Ich will eine Erweiterung der “oxArticleList”-Klasse vornehmen.

Wie in der Doku beschrieben, habe ich

im Admin/Module-Bereich

oxarticlelist => articlelist/myarticles

hinzugefügt.

Im Verzeichnis “modules/articlelist” gibt es das Modul “myarticles.php”.

In “myarticles.php” gibt es die Definition

class myarticlelist extends myarticlelist_parent

Beim Durchlauf mit dem Debugger habe ich festgestellt, dass das Modul “myarticles.php” richtig angesteuert wird, bei der Definition

class myarticlelist extends myarticlelist_parent

meldet PHP jedoch den Fehler

Class ‘myarticlelist_parent’ not found in …\oxid_test\modules\articlelist\myarticles.php on line 29

Wo liegt mein Fehler???

Class ‘myarticlelist_parent’ not found in …\oxid_test\modules\articlelist\myarticles.ph p on line 29

Das Leerzeichen in der Dateierweiterung ist ein Tippfehler oder hast du das auch so im Programm?

LG Carolin

Hallo, Carolin.

Das ist ja nur die PHP-Meldung…

Das Modul wird ja von der “factory” richtig angesteuert, nur dass es eben diese Fehlermeldung gibt…

ein debugger wird dir dabei wahrscheinlich kaum was nutzen, mach lieber irgendwo ein var_dump(1); oder echo 1;

Die klasse myarticlelist_parent gibts tatsächlich nicht, die wird zur laufzeit erzeugt.

Warum soll mir ein Debugger nicht dabei helfen???

“Var_dump” und “echo” ist was für Leute, die keinen Debugger haben…

Na jetzt bitte keinen Grundsatzstreit über debuggen :wink:

Die Lösung ist das Klasse und Dateiname identisch sein müssen. Der Autoloader geht davon aus das Klasse und Datei identisch heissen. Wenn du willst schau mal in die “oxutilsobject.php” “getClassName()”.

Grüße
Mathias

[QUOTE=MaFi;8726]Na jetzt bitte keinen Grundsatzstreit über debuggen :wink:

Die Lösung ist das Klasse und Dateiname identisch sein müssen. Der Autoloader geht davon aus das Klasse und Datei identisch heissen. Wenn du willst schau mal in die “oxutilsobject.php” “getClassName()”.

Grüße
Mathias[/QUOTE]
Jo, das war’s, danke!

Dann kann ich mich jetzt ja über einige Modifikationen her machen… :smiley:

Beim Durchlauf der Klassen-Initiierung im Debugger ist mir noch ein kleines Fehler’chen in

[B]private function _makeSafeModuleClassParents( $aClassChain, $sBaseModule )[/B]

in “[B]oxutilsobject.php[/B]” aufgefallen:

In der Anweisung

[B]$sParentPath = $myConfig->getConfigParam( ‘sShopDir’ )."/modules/".$sModule.".php";[/B]

ist der Slash vor “modules” falsch, und verursacht einen Doppel-Slash in “$sParentPath”.

Das Filesystem bügelt das zwar aus, ist aber halt unschön.

Ach ja, eine Frage noch:

diesen Mechanismus kann man doch sicher auch dazu verwenden, nicht nur [B]neue [/B]Methoden zu definieren, sondern auch dazu, [B]existierende[/B] Methoden zu [B]überladen (ersetzen).[/B]…

Oder sehe ich das falsch?

ja kannst du natürlich. Einfach die methode nochmal in deiner klasse nochmal erstellen und schon ist sie überschrieben. Nur am besten da wo es geht die parent methode irgendwie nochmal aufrufen, da die Methode von mehreren Modulen überschrieben worden sein könnte. Manchmal lässt sich da ein konflikt aber auch nicht vermeiden. Aber wenn man die render() methode von View Klassen überschreibt sollte man auf jeden fall die parent-methode nochmal aufrufen, allein weil dort alle variablenzuweisungen für das jeweilige template geschehen.