Oxid Azure: Wo neue Template Blöcke vorschlagen

Im Einführungsvideo zum Thema 4.5 Template Blocks wird gesagt, Vorschläge für neue Blöcke seien sehr willkommen.

Wo und wem schlage ich in welcher Form vor, wenn ich neue Blöcke für die Azure Templates benötige? Und wie lange dauert es dann, bis so ein Blockelement aufgenommen wird?

Beispielsweise:

Um am Ende jeder Seite Code für Tracking JS einzubinden zu können, würde ich vorschlagen, in der base.tpl direkt vor </body> einen

[{block name=“LastInsideBody”}]
[{/block}]

einzuführen.

Ist dies die richtige Stelle, das vorzuschlagen? Oder sollte das lieber als Featurerequest in den Bugtracker?

Das Problem an der Sache ist, dass man bei der Entwicklung von neuen Templates für 4.5 doch recht spontan merkt, wenn man irgendwo einen neuen Block benötigt. Wenn so ein Block-Element-Vorschlag nun aber erst durch diverse Instanzen läuft um dann im nächsten Major Release vielleicht aufgenommen zu werden, ist mir damit erstmal nicht geholfen.

Was wäre Ihre vorgeschlagene Vorgehensweise, um hier ein beiderseits flüssiges Vorankommen zu erreichen?

Gruß,
Tjungcl

so ganz spontan würd ich sagen hier rein:

http://oxid.uservoice.com/forums/31940-feature-requests

soll aber Marco was dazu sagen

Ohje, ich hoffe nicht. So schön so ein Feature-Request-Voting Teil auch ist, aber für so etwas wie neue Template Blöcke wird es mangels v4.5 Anwendern Monate dauern, bis so ein Vorschlag Aufmerksamkeit bekommt.

[QUOTE=tjungcl;56545]Im Einführungsvideo zum Thema 4.5 Template Blocks wird gesagt, Vorschläge für neue Blöcke seien sehr willkommen.

Wo und wem schlage ich in welcher Form vor, wenn ich neue Blöcke für die Azure Templates benötige? Und wie lange dauert es dann, bis so ein Blockelement aufgenommen wird?

Beispielsweise:

Um am Ende jeder Seite Code für Tracking JS einzubinden zu können, würde ich vorschlagen, in der base.tpl direkt vor </body> einen

[{block name=“LastInsideBody”}]
[{/block}]

einzuführen.

Ist dies die richtige Stelle, das vorzuschlagen? Oder sollte das lieber als Featurerequest in den Bugtracker?

Das Problem an der Sache ist, dass man bei der Entwicklung von neuen Templates für 4.5 doch recht spontan merkt, wenn man irgendwo einen neuen Block benötigt. Wenn so ein Block-Element-Vorschlag nun aber erst durch diverse Instanzen läuft um dann im nächsten Major Release vielleicht aufgenommen zu werden, ist mir damit erstmal nicht geholfen.

Was wäre Ihre vorgeschlagene Vorgehensweise, um hier ein beiderseits flüssiges Vorankommen zu erreichen?

Gruß,
Tjungcl[/QUOTE]
Ich hatte die letzten Monate, im “Shopware”-Kontext, Gelegenheit, das Smarty-Block-Konzept zu verstehen und in Aktion zu sehen.

Mit dem Ergebnis, dass ich beschlossen habe, das fürderhin nicht mehr zu nutzen, da ziemlich sinnlos.

Zum einen macht das m.E. überhaupt nur irgendeinen Sinn, wenn man vorhat, knallhart am Shop-Standard-Template zu bleiben.

(Aber wer will das schon, vor allem wenn man, als Agentur, viele Templates macht.)

Andererseits erschwert es das Template-Updating bei neuen Software Releases ungemein…

Weil man jetzt nicht nur eine Template-Datei auf Anpassungen untersuchen, sondern auch noch prüfen muss, ob ein Block definiert ist, der anzupassen ist.

Und bei dem in OXID implementierten “Block-System für Arme”, wo das Ganze auch noch über die Datenbank und notwendige Admin-Aktionen realisiert ist (statt in den normalen Template-Dateien), um so schwieriger…

Da ist man, m.E., sehr viel besser bedient, wenn man die zu ändernden Template-Dateien in das Custom-Template holt, und dort, ohne den Umweg über Block-Vererbung, direkt so ändert, wie man das braucht.

(Aus der Erfahrung von vielen Shop-Projekten weiß ich, dass man max. 5 bis 10 Template-Dateien ändert, um shopspezifische Layouts und Designs zu berücksichtigen: Struktur-Definition, Startseite, Artikelliste, Detailseite,… Und die kann man locker und bequem im Custom-Template verwalten.)

Damit wird das Updating wieder überschaubar, und man muss bei der Installation eines Templates nicht im Admin Blöcke eintragen, die man ändert, sondern kann das einfach im Rahmen des Templates kopieren.

Auch das Debuggen von Templates geht da wesentlich einfacher von der Hand…

Denn in Smarty 3 beginnt die Zeilenzählung bei jedem Block von vorne. D.h., wenn Smarty z.B. einen Fehler in einer Seite mit mehreren Blöcken auf Zeile 25 meldet, dann muss man erst mal schauen, die Zeile 25 welchen Blocks das ist…

Wobei, dummerweise, die Zeilenzählung in einem Editor diese Blockaufteilung natürlich nicht kennt, und man dann erst mal ziemlich auf dem Schlauch steht…

Bei dem OXID “Block”-Verfahren, das letzten Endes “Smarty Captions” aus den Datenbankeinträgen macht, ist das vermutlich noch wesentlich schlimmer…

Wenn Smarty nämlich dann einen Fehler in Zeile x eines Templates meldet, hat das keinerlei Bezug mehr zum Quelltext des Templates, da Smarty bei der Kompilierung diese Captions in die Template-Datei einbezieht, und die gemeldeten Zeilen dann überhaupt nicht im Template-Quelltext sichtbar sind.

[B]Fazit: [/B]

m.E. ist diese Smarty-Blockerei eine Fehlentwicklung, die Probleme löst, die es vorher gar nicht gab…

Diese Funktionalität braucht eigentlich kein Mensch, man handelt sich aber im Gegenzug eine ganze Reihe von Zusatzproblemen ein.

Und wenn ich dann noch sehe, was für ein Aufwand es vermutlich ist, einen neuen “Block” zu beantragen…

Danke für das Statement, Avenger.

Ich muss dazu sagen, dass ich noch von Version 4.0 komme - da gab es kein sCustomTheme Override System, wodurch Updates der absolute Horror waren.
Das hab ich drei,vier mal mitgemacht, aber beim übernächsten Major Release (4.2) dann aufgegeben.

Die Version 4.5 Azure mit dem stark überarbeiteten Templatesystem und den zunächst mal vielversprechenden Blöcken sieht nun so gut aus und klingt vom Konzept so viel besser, dass wir nun endlich mit unseren Templates wieder updatefähig werden wollen.

Da sowieso eine Layoutmodernisierung ansteht, bringen wir alles unter einen Hut und bauen neue Templates auf Basis des Azure-Themes. Dabei will ich alles richtig machen und hatte daher eigentlich vor, das Block-System ausgiebig zu verwenden.

Unsere notwendigen Anpassungen gehen allerdings weit über das mit CSS erreichbare Maß hinaus (unser Shop ist nurnoch für den Source-Code-Kenner als oxidshop erkennbar) und ich bekomme allmählich das Gefühl, dass das mit auf Blöcke beschränkten Änderungen nicht zu erreichen sein wird.

Vielleicht sollte ich mich mit dem Override-System begnügen.

Was meint denn der Rest der versammelten Spezis dazu?

Gruß,
Tjungcl

Nun, zumindest der hier in der Community teilnehmende Teil der Oxid Entwickler scheint das “Template-Inheritance” System vollständig zu ignorieren; das schließe ich aus der Resonanz hier sowie der Tatsache, dass das Thema “Blöcke” auch in anderen Threads in diesem Forum keinerlei Rolle zu spielen scheint.

Ich hoffe, Ihr (Oxid) habt nicht all zuviel Zeit da rein gesteckt… sonst würd ich mich an Eurer stelle ja ärgern ^^

Ich werde jetzt auch auf den Gebrauch verzichten. Ich hätte Bedarf an diversen neuen Blockdefinitionen, aber da es anscheinend noch kein Konzept gibt, wie man diese zeitnah in die offiziellen Templates einbauen lassen kann, macht es wohl wirklich (noch) keinen Sinn.

Gruß,
Tjungcl

Auf der Commons bzw. auf der unconference ist das Thema zur Sprache gekommen - Marco, kannst Du mal was dazu sagen?

[QUOTE=tjungcl;57524]Nun, zumindest der hier in der Community teilnehmende Teil der Oxid Entwickler scheint das “Template-Inheritance” System vollständig zu ignorieren; das schließe ich aus der Resonanz hier sowie der Tatsache, dass das Thema “Blöcke” auch in anderen Threads in diesem Forum keinerlei Rolle zu spielen scheint.[/QUOTE]
Das siehst Du aber total falsch!

“Template-Inheritance” (auch als “Template-Override” bekannt) ist für mich [B]der [/B]zentrale Punkt überhaupt…

Ich verwende für [B]alle [/B]unsere Shops ein eigenes “Basic”-Template.

Shop-spezifische Eigenschaften (Grafiken, Buttons, CSS, abweichende Templates, usw.) werden im Override-Template gespeichert.

Erfahrungsgemäß gibt es recht wenige “abweichende Templates”: Seitenlayout (bei mir eine “_index.tpl”), Artikellisten, Detailseiten, Info-Boxen.

“Blöcke” sind wieder ein anderes Thema, und das hast Du recht: ich verzichte darauf.

Wobei man schon den Bedarf von Agenturen, die viele Shops erstellen, und einem Shopbetreiber, der seinen einen Shop selbst betreibt, unterscheiden muss.

Für letztere ist das Block-System evtl. sinnvoll…

Wobei ich aufgrund der von mir erwähnten Update- und Debugging-Aspekte auch hier die Verlagerung von kompletten Template-Dateien in das Override-Template vorziehen würde.

Ist m.E. einfach klarer und übersichtlicher.

[QUOTE=avenger;57527]
Ich verwende für [B]alle [/B]unsere Shops ein eigenes “Basic”-Template.

Shop-spezifische Eigenschaften (Grafiken, Buttons, CSS, abweichende Templates, usw.) werden im Override-Template gespeichert.[/QUOTE]
Wie machst du das, getRessourceUrl() verweist ja auf das Basis-Theme?

[QUOTE=avenger;57527]
“Template-Inheritance” (auch als “Template-Override” bekannt)[/QUOTE]
Template-Inheritance nennt OXID das neue System mit den Blöcken. Beim Override kann man ja nur ein abweichendes Theme angeben, bei Inheritance können das mehrere Ebenen sein.

Für die Template-Erstellung ist das wirklich zu umständlich und unübersichtlich, da stimme ich dir zu. Man braucht ja auch nicht mehrere Ebenen weil man ja alle Änderungen selber macht.

Den Sinn sehe ich woanders: “Template-Inheritance” bietet für Templates das, was die Vererbungskette beim Erweitern von Core-Dateien bietet. Damit kann man dann Module installieren ohne selber an den Templates Änderungen zu machen. “One-Click”-Installation von Modulen also.

[QUOTE=leofonic;57557]Wie machst du das, getRessourceUrl() verweist ja auf das Basis-Theme?[/QUOTE]Ich verwende eine ziemlich modifizierte, ganz auf meinen Bedarf angepasste Templatestruktur…

Ich habe auch “Smarty” überladen und setze da einige wichtige zentrale Template-Variablen.

u.a. auch die Variable “tpl_path” (in Memoriam xtCommerce :D), und die verweist auf "oxConfig::getInstance()->getOutUrl().$this->sCustomTheme.’/tpl/’.

Da gibt es das Unterverzeichnis “css”, und ich binde dann die diversen CSS-Dateien im Template über “[{$tpl_path}]css” ein.

Teilweise gibt es auch sprachabhängige CSS-Dateien (um Background-Grafiken und Buttons einzubinden), die kann ich über “[{$tpl_path}]css/[{$language}]/” referenzieren.

Gleiches gilt analog für ein “img” und “buttons” Verzeichnis…

(Für die neue Template-Struktur werden ich sicher ein paar Anpassungen machen müssen…)

[QUOTE=leofonic;57557]Template-Inheritance nennt OXID das neue System mit den Blöcken. Beim Override kann man ja nur ein abweichendes Theme angeben, bei Inheritance können das mehrere Ebenen sein.

Für die Template-Erstellung ist das wirklich zu umständlich und unübersichtlich, da stimme ich dir zu. Man braucht ja auch nicht mehrere Ebenen weil man ja alle Änderungen selber macht.

Den Sinn sehe ich woanders: “Template-Inheritance” bietet für Templates das, was die Vererbungskette beim Erweitern von Core-Dateien bietet. Damit kann man dann Module installieren ohne selber an den Templates Änderungen zu machen. “One-Click”-Installation von Modulen also.[/QUOTE]
Ja, das hat was für sich…

Die vorhandenen Blockstrukturen werde ich ja erhalten, so dass da kein Konflikt entsteht.

Allerdings halte ich das aus meiner Erfahrung für ziemlich optimistisch, bei einer Modul-Installation einfach irgendeinen Template-Code in ein Template einzupflanzen…

Weil (zumindest unsere) Templates doch teilweise ziemliche Struktur- und CSS-Änderungen erfahren haben, um bestimmte Layout- und Design-Features umsetzen zu können.

Und die werden von solchen Code-Blöcken halt nicht berücksichtigt, so dass man eh’ wieder Hand anlegen muss. .

Zudem wird das eine ganze Weile Utopie bleiben, weil ja nun nicht jeder sofort auf die neue Template-Struktur mit den Blöcken umsteigen kann (oder will)…

Wo es sinnvoll ist, soll man es nutzen, muss jeder für sich selbst entscheiden…

Ich sehe das nicht dogmatisch, ist nur meine (derzeitige) Meinung…

[QUOTE=leofonic;57557]Template-Inheritance nennt OXID das neue System mit den Blöcken. Beim Override kann man ja nur ein abweichendes Theme angeben, bei Inheritance können das mehrere Ebenen sein.
[/QUOTE]
Genau, das meinte ich mit Inheritance.

Das Override System ist prima, da bau ich jetzt ebenfalls voll drauf auf!

[QUOTE=leofonic;57557]
Wie machst du das, getRessourceUrl() verweist ja auf das Basis-Theme?
[/QUOTE]

In Version 4.5 sind auch Ressourcen Theme-spezifisch (von Haus aus). In jedem Theme kann man nun also ein eigenen src Verzeichnis anlegen.
Es gibt sogar eine Theme-spezifische Konfiguration in der Admin, alles ohne tiefe Systemeingriffe.
=> Das Overriding wurde somit in 4.5 nochmals verbessert gegenüber den Vorgängerversionen.

Hm? das ging doch schon immer indem man einfach in der config.inc.php die Variable “sTheme” auf “meintheme” gestellt hat. Dann wurde einfach alles von “meintheme” geladen statt von basic.

Das Override System ist prima, da bau ich jetzt ebenfalls voll drauf auf!

Aber langsam. OXID guckt immer schon vorher ob datei in einem theme existiert, dann in dem anderen. Diese zugriffe brauchen verhältnismäßig lange, und wenn man eh vor hat einen shop einen totalumbau zu verpassen kann man auch direkt ein komplett eigenes Theme nehmen. Updatefähigkeit hin oder her.

Ja, einfach alles ersetzen konnte man schon immer.
Aber das Override System für Ressourcen nutzen ging anscheinend noch nicht immer (ich grade grad von 4.1 auf 4.5 up, in 4.1 gabs kein Override, daher muss ich mich auf das verlassen, was hier so geschrieben wird… :slight_smile: )

Naja, “Totalumbau” ist ja relativ.

Man kann sehr vieles umbauen so dass es hinterher völlig anders aussieht, ohne viel an den Templates ändern zu müssen - wenn die Templates gut strukturiert und alles schön mit CSS adressierbar ist.

Und da die neue Template Struktur in 4.5 deutlich feingranularer ist als in 4.1 (mehr includes), kann man auch ziemlich krasse Änderungen an der Struktur umsetzen, indem man lediglich einige Zeilen ändert und damit andere/eigene Teil-Templates inkludiert.

Updatefähigkeit empfinde ich schon als sehr wichtig - insbesondere wegen Sicherheitslücken, von dnen ja seit Oxid 4.1 doch einige gefunden und geschlossen wurden. Und auch von Performanzverbesserungen, Anpassungen an neue SEO Erkenntisse, Browserkompatibilitätsverbesserungen, etc hat man nur was, wenn man in der Lage ist, die Oxid Version abzugraden.
Nicht zu verachten ist auch die Kompatiblität zu kommerziellen und freien Oxid Modulen. Wenn der eigene Shop total umgebaut ist, tut man sich auch damit schwer, diese einzubauen. Beispielweise das Paypal Modul von eFire: unser Warenkorb ist so umgebastelt, dass es nicht mehr mit dem Paypal modul läuft. Klar - kann man natürlich auch selbst nachbauen, das paypal. Aber dann ist man wieder erstmal beschäftigt und so geht das dann immer fort…

Kurzum: ich hatte jetzt 2 Jahre lang ne Totalkonversion ohne Updatefähigkeit und hab die Nase voll ^^

Wegen Performanz: Ist mir jetzt nicht negativ aufgefallen:
Ich hab gerade mal einen Test gemacht und den Mittelwert aus je Zwanzig Seitenabrufen genommen mit Azure und einer Azure-Extension. Mit Extension war die Execution Time im Schnitt 0.1 Sekunden länger. (1.2s statt 1.1s)
Wobei es nicht direkt vergleichbar ist, da die Extension auch noch per SQL ein paar Daten mehr in den Header holt - also mehr tut als die Azure Templates.

[QUOTE=csimon;57576]Hm? das ging doch schon immer indem man einfach in der config.inc.php die Variable “sTheme” auf “meintheme” gestellt hat. Dann wurde einfach alles von “meintheme” geladen statt von basic.
[/QUOTE]
Genau. Wenn man sCustomTheme benutzt werden die Templates aus dem Custom-Ordner gezogen, die Ressourcen aber aus dem Standard-Ordner. Das macht das Theme-Overriding für ein komplett neues Theme unattraktiv finde ich. Wenn das jetzt funktioniert finde ich das super.

Avenger deine Lösung klingt gut, aber so wie ich das verstehe benutzt du das Override um ein bereits komplett geändertes Theme nochmals abzuwandeln. Das war denke ich nicht die eigentliche Idee des Template-Override, sondern bei einem Shop-Update sollten nur die geänderten Dateien vom Update ausgenommen werden.

Dass die One-Click Installation nicht gleich gehen wird weil noch kaum jemand die Blöcke benutzt sehe ich auch so. Ich frage mich aber wie das dann aussehen soll, wenn ein Modul Templateänderungen benötigt. Bisher gab’s “copy_this” und “changed_full”. Schon da muss man dazuschreiben, wenn aber ein Custom-Theme benutzt wird, bitte “copy_this” dorthin kopieren und nicht nach basic. Jetzt müsste man zusätzlich schreiben: Wenn Basic dann schauen die Änderungen so aus, bei azure so.

Die One-Click Installation kann zwar nicht immer funktionieren, aber in vielen Fällen würde das schon klappen denke ich, z.B. bei Zahlungsanbietern.

Also ich habe mir das Blocksystem nochmal angesehen und mein erster Eindruck war: ziemlich cool für die Modulinstallation. Das SQL könnte man in einer Installationsroutine erstellen und damit wäre 1-click-Installation machbar. Außerdem würde ein so installiertes Modul ohne weitere Änderungen in allen Themes funktionieren, die auf azure aufbauen. Weil an den Templates keine Änderungen erfolgen, muss man auch beim Update keine Templates mehr nachpflegen.

Dann habe ich bemerkt, dass es fast überhaupt keine Blöcke gibt, was das ganze leider unbenutzbar macht. In diesem Video

stellt Sarunas das allerdings selbst fest, und sagt dort auch wo man neue Blöcke vorschlagen soll: in der Entwickler-Mailingliste.

Die neue Version des Oxid Paypal Moduls hat tatsächlich 3 Installationsanleitungen, eine für 4.4, eine für 4.5 Basic und eine für 4.5 Azure. Es wird wohl so aussehen dass das Basic-Theme irgendwann wegfällt und nur Azure übrigbleibt. Ich finde OXID sollte jetzt einfach die fehlenden Böcke einbauen und nicht auf Vorschläge warten, damit das System möglichst schnell benutzbar wird.