2016-05-31 14 views
0

Ich mache ein Modul in Prestashop und ich muss das Methodenupdate in der Klasse CartCore überschreiben. Ich habe eine Klasse innerhalb der Ordnerüberschreibung erstellt (ich habe es auch in modules/name_of_module/override probiert) Cart erweitert CartCore (die Datei ist Cart.php), und ich habe den nächsten Code.Override Prestashop 1.6.1.4

public function update($null_values = false, $hook = true) 
{ 
    if (isset(self::$_nbProducts[$this->id])) { 
     unset(self::$_nbProducts[$this->id]); 
    } 

    if (isset(self::$_totalWeight[$this->id])) { 
     unset(self::$_totalWeight[$this->id]); 
    } 

    $this->_products = null; 
    $return = parent::update($null_values); 
    if($hook) Hook::exec('actionCartSave'); 

    return $return; 
} 

Ich habe die Datei cache/class_index.php gelöscht, und ich habe die Überschreibungen im Back-Office-Leistung aktiviert, aber es funktioniert nicht. Funktioniert nur, wenn ich die ursprüngliche Warenkorbklasse ändere, aber ich möchte dies nicht tun.

Danke!

+0

Welches ist der genaue Speicherort dieser Datei? Könnten Sie die gesamte Datei einfügen? – joseantgv

Antwort

1

Wenn Sie eine neue Überschreibung in einem Modul erstellen, ist Prestashop diese neue Datei nicht bekannt. Wenn Sie /cache/class_index.php löschen, wird Prestashop nur gezwungen, nach neuen Dateien im Stammordner /overrides/ zu suchen, aber nicht in Ihrem Ordner /modules/your_module/overrides/.

Ihre Datei muss unter dem Stammordner /overrides/ abgelegt werden. Dieser Vorgang wird automatisch durchgeführt, wenn Sie Ihr Modul installieren. Jede Überschreibungsdatei in Ihrem Modul befindet sich unter dem Stammordner /overrides/. Wenn Sie eine neue Überschreibung erstellen, während Ihr Modul bereits installiert ist, wird Prestashop es nicht für Sie verschieben.

Sie haben dann zwei Möglichkeiten. Deinstallieren und installieren Sie Ihr Modul. Oder kopieren Sie diese Datei in den Stammordner /overrides/ und löschen Sie die Datei /cache/class_index.php.


auch berücksichtigen Niclas Larsson beraten diese Datei unter /overrides/classes/Cart.php zu setzen.

+0

Ich hatte die Cart.php in /override/classes/Cart.php aber es funktioniert nicht. Das ist mein class_index.php Datei: 'Warenkorb' => Array ( 'Pfad' => 'Betätigung/classes/Cart.php', 'type' => 'Klasse', 'überschreiben' => falsch, ), Ich habe versucht, wahr, aber es funktioniert auch nicht. –

+0

@SergiohLonet Gehen Sie zu Ihrem Backend und stellen Sie unter 'Advanced Parameters -> Performance sicher, dass' Disable overrides' auf 'No' gesetzt ist. – TheDrot

+0

ist auf Nein eingestellt. –

1

Overriding default behaviors

eine Klasse Aufschalten
Um die Produktklasse außer Kraft zu setzen, muss die Dateien product.php aufgerufen werden und muss eine Produktklasse verfügen, die dann ProductCore-Klasse erweitert.
/override/classes/Product.php
/modules/my_module/override/classes/Product.php Dateien

Aufschalten ein getrennt in Ordnern:

Die Datei kann in diesen beiden Orten platziert werden, basierend auf ihren Typen (Klassen, Controller, Module, ..)

Also ich denke, dass Sie Dinge richtig machen, aber Sie müssen den Ordner "Klassen" in Override hinzufügen, und verschieben Sie Ihre Datei hinein.