Jump to content

Änderungen in ProductController, product.tpl, ... - Wie Updatefähig bleiben?


mahega

Recommended Posts

Guten Morgen,

 

ich habe gerade ein Modul für meinen zukünftigen Webshop erstellt und musste neben eigenen Klassen/Controller auch Änderungen in bereits vorhandenen Shop-Files vornehmen:

- product.tpl

- ProductController

- AdminProductController

- ...

 

Nun habe ich aber die Befürchtung, dass bei einem Update (welches z.B. auch o.g. Files ändert) meine Änderungen verloren gehen bzw. nichts mehr funktioniert.

 

Es gibt ja das Override Verzeichnis. Soll ich dort meine geänderten Controller reinpacken und von eigentlich Controller erben? Und wie kann ich das mit den Templates (*.tpl) machen?

 

Danke im Voraus!

 

MfG

Matthias

Link to comment
Share on other sites

Hallo Matthias,

 

du kannst nicht so einfach deine geänderten Klassen oder Controller in ein Unterverzeichnis von /overrides einspielen. Ein korrektes Override der ProductController.php beginnt z.B. mit

class ProductController extends ProductControllerCore

Override-Vorlagen wurden früher mitgeliefert, jetzt leider nicht mehr. Deshalb solltest du dir einfach mal eine Version von PrestaShop 1.5.2 oder 1.5.3 laden - da sind sie nämlich noch alle drin. ;)

 

Die product.tpl kannst du dagegen nur direkt im aktiven Template ändern bzw. über einen Hook, der in der Datei aufgerufen wird und den sie sich zur Laufzeit aus dem Verzeichnis

/modules/<DeinModul>/views/templates/hook

holt.

 

Gruß

eleazar

Link to comment
Share on other sites

Vielen Dank für die Antworten!

 

Ich habe die Anleitung aus dem Faq befolgt und meinen ProductController unter folgedem Verzeichnis gespeichert: 

  • /modules/my_module/override/controllers/front/ProductController.php

 

 

"my_module" selbstverständlich mit meinem Modulnamen ersetzt!

 

Controller startet wie folgt...

 

class ProductController extends ProductControllerCore

{...

 

Leider wird meine ProductController.php total ignoriert und die originale ProductController aufgerufen.

Muss ich das noch irgendwo "registrieren"? Oder das Modul neu installieren?

Link to comment
Share on other sites

Hat geklappt danke!

Ich habe in meinem ProductController jetzt einfach mein eigenes product.tpl (in meinem Modulverzeichnis) statt des originalen. So bleibt das Originale auch erhalten.

 

Nur bei dem customization.tpl, das ich bearbeitet habe, verstehe ich echt nicht, wo das "assigned" wird? Wenn ich in meinem IDE eine Volltextsuche nach "customization.tpl" in allen php-Dateien machen, bekomme ich kein Ergebnis!?

Das verwundert mich total. Weis einer dafür ne Lösung?

Link to comment
Share on other sites

Also es gibt ja im AdminProductsController die Möglichkeit TextFields und FileUploads als Customization hinzuzufügen.

 

Ich habe noch eine dritte Möglichkeit hinzugefügt, die ich benötigt habe. Dafür musste ich natürlich Änderungen im AdminProductsController und im customization.tpl vornehmen.

 

Den AdminProductsController habe ich ins Override Verzeichnis gepackt, aber wie ich die customization.tpl überschreiben kann ohne das Original zu verlieren, erschließt sich mir nicht.

 

// NACHTRAG:

 

Ich habe meine modifizierte customization.tpl unter folgendes Verzeichnis gepackt:

 

<mymodule>/override/controllers/admin/templates/products/customization.tpl

 

Leider wird diese File trotz leeren des Cache und re-installieren meines Moduls einfach nicht in des override Verzeichnis kopiert, wie es z.B. bei dem Controller der Fall ist.

 

Wenn ich meine modifizierte customization.tpl selbst in das override Verzeichnis kopiere, funktioniert es wie gewollt:

 

<presta_home>/override/controllers/admin/templates/products/customization.tpl

 

Woran liegt es, dass die Template File nicht ins override verzeichnis kopiert wird?

 

// NACHTRAG 2

 

Habe jetzt ne Lösung gefunden:

Da ich den AdminProductsController ja sowieso überschreibe, habe ich in der Methode "public function initFormCustomization($obj)" folgendes geändert:

 

// Vorher
//$data = $this->createTemplate($this->tpl_form);

//Nachher
$data = $this->context->smarty->createTemplate(_PS_MODULE_DIR_ . 'mysticker/views/templates/admin/controllers/products/customization.tpl', $this->context->smarty);

Statt die createTemplate Methode vom Parent aufzurufen (die sucht, ob im Override Folder etwas ist, ansonsten vom Standard Folder holt), erstelle ich das Template direkt selbst aus meinem Pfad.

 

Ist zwar wirklich keine schöne Lösung, aber es funktioniert :)

 

Edited by mahega (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...