Modify

Opened 3 years ago

Last modified 3 years ago

#2419 new Neues Feature

Templates weitgehend update-sicher machen

Reported by: noRiddle Owned by: somebody
Priority: normal Milestone: modified-shop-2.0.9.0
Component: Shop Version: 2.0.7.2
Keywords: Cc:
Blocked By: Blocking:

Description

Könnte man nicht die Arbeit bei Updates bezogen auf das Template sehr vereinfachen indem man Folgendes einbaut ?
(am Beispiel tpl_modified_responsive)

  • /templates/tpl_modified_responsive/ ist der Standard-Ordner
  • ein weiteres Verzeichnis anlegen namens /templates/custom/

Bei Bestimmung des Files für das Template schaut man ob es das File im zweitgenannten Ordner gibt und wenn nicht nimmt man das Original im erstgenannten Ordner.
Damit könnte man bei einem Update alle Template-Files im Original-Ordner drüberbügeln und müsste lediglich die Files im custom-Ordner bearbeiten.

Am Beispiel /includes/modules/product_info.php:
Statt

$product_info = $info_smarty->fetch(CURRENT_TEMPLATE.'/module/product_info/'.$product->data['product_template']);

das

$product_info = is_file(DIR_FS_CATALOG.'templates/custom/module/product_info/'.$product->data['product_template']) ? $info_smarty->fetch(DIR_FS_CATALOG.'templates/custom/module/product_info/'.$product->data['product_template']) : $info_smarty->fetch(CURRENT_TEMPLATE.'/module/product_info/'.$product->data['product_template']);

Mittels meines notepad++ habe ich das folgendermaßen mit einem Schlag für alle Files umsetzen können:

  • Suchmodus "Reguläre Ausdrücke"
  • Suchen nach: \$([a-z_]*)smarty->fetch\(CURRENT_TEMPLATE\.'(.*)\);
  • Ersetzen durch: is_file\(DIR_FS_CATALOG.'templates/custom\2\) ? \$\1smarty->fetch\(DIR_FS_CATALOG.'templates/custom\2\) : \$\1smarty->fetch\(CURRENT_TEMPLATE\.'\2\);
  • Button "Alle ersetzen" klicken

Das geht natürlich entsprechend für smarty->display(.

Attachments (0)

Change History (11)

comment:1 by noRiddle, 3 years ago

Ich merke gerade, daß der Ordner /custom/ nicht im Hauptverzeichnis /templates/ sein sollte, weil von da ja die zur Verfügung stehenden Templates ausgelesen werden.
Es sollte also wohl im Template selbst sein.
Dann müsste es, um beim Beispiel zu bleiben, so aussehen:

$product_info = is_file(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/custom/module/product_info/'.$product->data['product_template']) ? $info_smarty->fetch(CURRENT_TEMPLATE.'/custom/module/product_info/'.$product->data['product_template']) : $info_smarty->fetch(CURRENT_TEMPLATE.'/module/product_info/'.$product->data['product_template']);

Für notepad++:

  • Suchmodus "Reguläre Ausdrücke"
  • Suchen nach: \$([a-z_]*)smarty->fetch\(CURRENT_TEMPLATE\.'(.*)\);
  • Ersetzen durch: is_file\(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/custom\2\) ? \$\1smarty->fetch\(CURRENT_TEMPLATE.'/custom\2\) : \$\1smarty->fetch\(CURRENT_TEMPLATE\.'\2\);
  • Button "Alle ersetzen" klicken

Gruß,
noRiddle

comment:2 by Torsten Riemer, 3 years ago

Da haben wir in der Tat auch schon drüber nachgedacht, aber ich habe Bedenken, dass es den Support erschwert, da nicht automatisch klar ist, ob ein Shopbetreiber den neuen Ordner "custom" nutzt oder nicht und ob er die darin enthaltenen Dateien auch gemäß "Tutorial: Template eines xt:Commerce Shops in der modified eCommerce Shopsoftware weiter verwenden" aktualisiert.
Ich gehe bei meinen Kunden immer so vor, dass ich das Template "tpl_modified_responsive" kopiere nach "tpl_modified_responsive_custom". So sehe ich beim Vergleich der beiden Templates auch sofort, welche Dateien ich mal geändert hatte und brauche nur diese Änderungen in eine neue Version des Templates übernehmen.

comment:3 by noRiddle, 3 years ago

Ja, die Vorgehensweise ist gut. Natürlich benennt man sein Template bei Verwendung des Originales mit Anpassungen um und kann dann mittels FileMerge schön sehen was geändert wurde.
Aber die Arbeit könnte man sich sparen wenn man lediglich die /custom/-Files beachten müsste.

Wenn jemand Dateien im Ordner /custom/ hat nutzt er ihn ja automatisch.
Wenn er die Dateien nicht pflegt kommt das auf's selbe hinaus als wenn er die Standard-Datein nicht pflegt.

Oder habe ich etwas nicht verstanden ?

Gruß,
noRiddle

comment:4 by RobinTheHood, 3 years ago

Ich finde die Herangehensweise von noRiddle auch gut.

Zudem könnte man auch noch etwas weiter denken. Die Smarty Template Engine bietet von Haus aus einiges an Funktionalität, mit der man die Templates und die Darstellung von Modulen updatefähig gestallten könnte. Siehe https://www.smarty.net/docs/en/advanced.features.template.inheritance.tpl und https://www.smarty.net/docs/en/language.function.block.tpl

Die Templates müssten dafür nach einer festen Konvention aufgebaut werden und in entsprechende Blöcke aufgeteilt werden. Das wäre dann vielleicht eher ein übernächster Schritt, den man aber vielleicht im Hinterkopf bei der Planung behalten könnte. Zudem müsste es noch einen Loader als SmartyPlugin geben, der die Pfade automatisch für Smarty auflösen kann.

Insgesamt finde ich die Idee spannend.

Mit besten Grüßen
Robin
RobinTheHood

comment:5 by Markus Rehm, 3 years ago

Hi,

wie Torsten schon sagte ... wir haben uns zu dem Thema auch schon einige Stunden unterhalten.
Ich sehe es aber wie Torsten.

Das Ganze geht bis zu einem gewissen Grad noch gut ... wenn ich aber mehr als 20 oder 30 Dateien habe wird es schon unübersichtlich.

Ich muss im Prinzip immer schauen ob ich irgendwas in "Custom" drin habe oder nicht ... wenn nein muss ich es dort rein packen und peinlichst genau auf die Ordnerstruktur achten. Das wird unübersichtlich werden ... da würde ich drauf wetten.

Den Javascript oder CSS Order mit den komprimierten Files lasse ich jetzt mal außen vor. Ich würde jetzt mal vermuten dass würde eine Großbaustelle werden.

Auch gibt es noch einen smarty-Ordner im Template. Es kann ja durchaus Sinn machen den auch zu nutzen und eben nicht den /external/smarty/plugin/ - Ordner.
Es gibt aus meiner Sicht nur den Vorteil, dass ich auf einen Blick sehe welche Dateien ich verändert habe.

Updaten muss ich die Dateien trotzdem. Sonst kann es durchaus passieren dass es weiße Seiten nach einem Update gibt. Das ganze setzt aber voraus dass man peinlichst genau aufpasst welche Dateien man verändert und die dann eben auch in den custom-Ordner lädt.

Und nur mal am Rande ... wo lade ich Template-Dateien für Module rein? Auch das muss abgefangen werden. Und ob es damit alles übersichtlicher wird ... ich bin mir da alles andere als sicher.

Markus

Last edited 3 years ago by Markus Rehm (previous) (diff)

comment:6 by Markus Rehm, 3 years ago

Hi,

und weil es mir gerade noch so einfällt ... wenn ich als User Dateien ändere und es nichtmal schaffe die für mich kenntlich zu machen indem ich die alte Datei sichere und evtl. hinter den Dateinamen der alten Datei ein _GEANDERT anhänge .. wie soll man es schaffen den User dahin zu bringen einen "custom" Ordner zu verwenden?

Ich bin der Meinung das gibt mehr Chaos als dass wir damit Gutes tun.
Ein Shop ist kein Wordpress ... dafür ist bei uns einfach der Aufbau viel zu komplex.

Markus

comment:7 by RobinTheHood, 3 years ago

Guten morgen

ich möchte sagen, dass ich zum jetzigen Zeitpunkt näher an der Meinung von noRiddle bin.

  1. Ich sehe bei der Übersichtlichkeit keinen Unterschied bei der Bezeichnung der Dateien, ob in einem kopierten Templateverzeichnis alle Dateien enthalten sind oder in einem custom Verzeichnis eine kopierte Datei enthalten ist. Im Gegenteil. Im custom Verzeichnis sehe ich auf den ersten Blick, was nicht mehr dem Original entspricht. Ich empfinde das als übersichtlicher. Und in welchem Fall muss ein Entwickler / Designer / Nutzer nicht darauf achten, dass Pfade, Dateien und z. B. Variablen exakt benannt wurden? Was ich verstehen kann ist, dass der Nutzer die Datei im zweiten Fall aufmerksamer selbst anlegen muss, wobei die Dateien im ersten Fall bereits in dem richtigen Verzeichnis mit einem richtigen Namen vorhanden sind.
  1. Ich persönlich würde vielleicht darüber nachdenken, ob das Konzept der "weißen Seite" hier das richtige ist. Wäre vielleicht eine adäquate Fehlermeldung als angemeldeter Admin oder in einem Debug-Modus sinnvoll? In den Logs wird ja entsprechend etwas angezeigt.
  1. An einer Datei ein Pre- oder Postfix anzuhängen, um damit zu deklarieren, dass diese Datei geändert wurde, ist meiner Meinung nach kein Konzept, das man sich als Entwickler wünscht. Nach meiner Einschätzung ist das auch nicht State of the Art. Ich will damit nicht sagen, dass es nicht funktioniert, aber man hat damit ebenfalls nicht weniger Dateien oder es wird nach meinem Empfinden auch nicht übersichtlicher oder einfacher mit diesem Konzept.
  1. Da hier ein Vergleich zu Wordpress gemacht wird, mache ich gerne einen Vergleich zu den anderen Shop Systemen auf dem Markt. Die meisten lösen das Problem mit Inheritance. Ein sehr ähnliches Konzepte wie es hier von noRiddle vorgeschlagen wurde. Ich kann nicht erkennen, wie z. B. Shopware, Magento, Prestashop oder Gambio damit im Chaos versinken. Ich weiß nicht wie gerne solche Vergleiche gesehen werden, aber aus meiner Sicht sind diese Shop Systeme keine Projekte, die keine Relevanz haben. Zurzeit gibt es keinen Schutz davor, dass ein User Teile am original Template bearbeitet und dann von dem original Template eine Kopie macht und in seiner Kopie weiterarbeitet. Chaos kann aus meiner Sicht in beiden Fällen passieren.

Bin auf weitere Meinungen gespannt. ?

Mit besten Grüßen und einen guten Start in den Tag
Robin

Last edited 3 years ago by Torsten Riemer (previous) (diff)

comment:8 by voodoopupp, 3 years ago

Also generell finde ich die Idee nicht schlecht. Egal wie, eine Vereinfachung in der Pflege des Templates wäre sehr willkommen! Als Shopbetreiber muss ich sagen, dass ich immer wieder den Aufwand habe, beim eigenen Template die ganzen Änderungen einzupflegen.

Da das Template ja selbst erstellt wurde bzw. an den entsprechenden Stellen verändert wurde, damit unser Design passt, wurden über die Jahre einige Änderungen an Dateien so gebaut wie gewünscht. Hinzu kamen natürlich auch die ein oder andere Zusatzfunktion...

Welche Dateien aber die wirklich veränderten sind und vom Standardtemplate abweichen, würde mir meines Erachtens ein "Custom" Ordner leichter anzeigen.

Aktueller Stand:
wenn also ein Update kommt gehe ich jede abweichende Datei durch und schaue, was ich anpassen muss. Dafür nutze ich den entsprechenden Wiki-Eintrag:
Tutorial: Template eines xt:Commerce Shops in der modified eCommerce Shopsoftware weiter verwenden

Davon ist aber meist ein großee Teil eigentlich Standard und wird von mir entweder als Standard-Modified Code verwendet oder wird von mir teilweise gar nicht verwendet.

Dennoch habe ich nicht alles im Kopf, welche Datei es alles betrifft bzw. wenn ich mal schnell irgendeine Datei leicht modifiziert habe, habe ich mir das vielleicht mal eben nicht notiert.

Ein Custom Ordner könnte folgendermaßen helfen:
wenn nun ein Update kommt, dann mache ich einen Merge aus altem Standard-Template und neuem Standard-Template und extrahiere die geänderten Dateien.

Nun habe ich also die notwendigen Dateien fürs Update.

Nun nochmals einen Merge mit meinem Custom Ordner, welcher ja die für mich wirklich notwendigen Änderungen enthält.

Dann fallen nochmals alle Dateien raus, die simpel im Standard übernommen werden können.
Nur die gematchten Dateien müssen wirklich von mir überarbeitet werden.

Mit dem Custom Ordner habe ich auch nicht das Problem, dass ich evtl. mal vergessen habe mir irgendwo zu notieren, welche Dateien ich so verbogen habe, dass sie niemals mehr Standard sein dürfen!

Grüße
Dominik

Last edited 3 years ago by Torsten Riemer (previous) (diff)

comment:9 by noRiddle, 3 years ago

Schade, die Diskussion hätte ich mir im zugehörigen Thread gewünscht, den ich, ja, muß ich zugeben, versäumt habe hier zu verlinken.
Vielleicht kann Torsten die Kommentare ja in den Thread verlagern, damit das Ticket-System hier nicht zurm Diskussions-Forum verkommt.
Der Thread: Weitgehend update-sichere Templates

Gruß,
noRiddle

Last edited 3 years ago by Torsten Riemer (previous) (diff)

comment:10 by Torsten Riemer, 3 years ago

Seid ihr so lieb und übertragt die Kommentare in entsprechender Reihenfolge selber? Ich kann das nicht für euch Benutzer so übernehmen, dass die Beträge von euch sind, sondern die Beiträge wären dann von mir.

comment:11 by Gerhard Waldemair, 3 years ago

Milestone: modified-shop-2.0.8.0modified-shop-2.0.9.0

Modify Ticket

Action
as new The owner will remain somebody.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.