mahega Posted February 9, 2015 Share Posted February 9, 2015 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 More sharing options...
Whiley Posted February 9, 2015 Share Posted February 9, 2015 Hallo Mathias, controller und classes ins override so wie hier beschrieben: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors tpl ist ja wahrscheinlich Teil des Templates, also - damit das Template nicht überschrieben wird - Template mit eigenem Namen anlegen (duplizieren) Grüsse Whiley Link to comment Share on other sites More sharing options...
eleazar Posted February 9, 2015 Share Posted February 9, 2015 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 More sharing options...
mahega Posted February 9, 2015 Author Share Posted February 9, 2015 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 More sharing options...
eleazar Posted February 9, 2015 Share Posted February 9, 2015 O, habe ich vergessen zu erwähnen: Du musst natürlich immer in solchen Fällen unter Erweiterte Einstellungen --> Leistung auch den Cache löschen und auch die Kompilierung einmalig erzwingen. Und denk bitte auch an den Browser-Cache. Link to comment Share on other sites More sharing options...
mahega Posted February 10, 2015 Author Share Posted February 10, 2015 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 More sharing options...
eleazar Posted February 10, 2015 Share Posted February 10, 2015 Das ist auch nicht immer so einfach. Da müsstest du dann schon mal verraten, was du zu welchem Zweck denn eigentlich ändern willst. Link to comment Share on other sites More sharing options...
mahega Posted February 10, 2015 Author Share Posted February 10, 2015 (edited) 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 February 10, 2015 by mahega (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now