Zugriff auf Konfigurationsvariable

Hallo Zusammen,

im Shopware Kurs-Video wird gezeigt, wie eine, in Theme.php definierte Konfigurationsvariable, in der logo-container.tpl angezeigt wird:

 

Warum funktioniert die Anzeige und Wertänderung der Variable in Theme.php nicht? 

Man kann zum Beispiel nicht folgendes schreiben: $theme.themeSlogan = “Hallo”; , weil dann geht das Kompilieren von Themes nicht mehr!

Ein echo   $theme.themeSlogan; löst zwar keinen Fehler (man kann das Theme kompilieren) jedoch wird auch nichts angezeigt.

 

Ehrlich gesagt verstehe ich nicht wie man so eine wichtige Sache wie Variablen-Verwendung nicht ausführlich erläutert hat!? Es wird gezeigt wie man die Konfigurationsvariable definiert (sprich in die Datenbank speichert), wie man diese im Backend dem Benutzer anzeigt und wie man diese in LES oder TPL ausgibt. Aber niergendwo wird gezeigt, wie man den Wert programmatisch ändern kann!? 

Ich nenne nur ein paar Beispiele, bei den so was von grossem Vorteil sein könnte:

  1. Der Benutzer speicher einen ungültigen oder nicht vollständigen Wert (siehe mein Post mit 10px Eingabe statt 10 bei unitize-Funktion) -> entsprechend soll man in der Lage sein, die Variablen durch Plausibilitätsprüfung richtig zu stellen, oder durch Standardwerte zu ersetzen, damit unerwartete Zustände in der Applikation vermieden werden.

  2. Man hat Einstellungswerte, die im Verhältnis zu einem Wert stehen -> Z.B. Wenn ich dem Benutzer Header-Konfigurationsmöglichkeiten anbieten will, dann kann ich ihm satte 138 Konfigurationswerte anbieten (Höhe des Logos, Menüs, Einkaufsicons usw.) oder ich kann ihm nur einen Höhen-Konfigurationswert zur Verfügung stellen und daraus dann alle andere mathematisch Ableiten, indem ich mal -2px mal +3px zu den verschiedenen Container dazu addiere.

  3. Was sicher vorteilhaft wäre, und was ich in den Tuts nicht gefunden habe, ist wie man beliebige Variablen in Theme.php definieren kann, die dem Benutzer im Backend nicht ersichtlich sind, die man dann aber in LESS (oder tpl) verwendet. Zum Beispiel könnte ich einen Konfigurations-Farbton für den User erstellen, daraus aber verschiedene weitere Farbtöne ableiten sodass ein Hauptelement (z.B. Fenster) in der Farbe angezeigt wird, die der User ausgewählt hat, aber zugehörige Unterelementen (Rahmen, Schatten, Buttons usw.) in den abgeleiteten Farben. 

Das fällt mir so auf den ersten Blick, sicher gibt es noch viele Fälle, bei denen es nutzbar wäre die Variablen in der Theme.php abzuändern.

 

Hoffe, dass ich etwas in den Tutorials übersehen habe und das diese Variablenanpassung sicher möglich ist.

 

Danke

 

 

 

Sorry, aber halt dich kurz und schreib keinen Roman.

Was willst du genau machen, muss man doch in einen klaren Satz schreiben können? {$theme.themevariabel} ist eine Smarty Funktion für die Template Dateien und hat in der Theme.php nichts zu suchen.

Ansonsten wie man seine Theme Konfiguration anpasst, steht wie immer auch in den Dev Docs -> Theme.php

Hallo christiantrade

Wie ändere ich eine Konfigurationsvariable?

Beispiel: Theme.php

Wie setzen die Herren von Shopware die definierte Variable ‘basic_font_size’ => ‘20px’ aus dem Beispiel in die Funktion UNITIZE ein, weil diese 20px können dort nicht funktionieren? Also muss man zwischen Auslesen der Variable aus der Datenabnk und Einsetzen der Variable in LESS diese bearbeiten können sprich in diesem Falle man muss aus 20px dann  noch 20 machen!?

Wie wird so etwas gemacht und ist so eine Variablenanpassung überhaupt möglich?

 

PS: Ich habe noch immer den Eindruck, dass wir hier mit Konstanten zu tun haben und das der Grund ist, warum mir keiner eine klare Antwort geben kann (auch Shopware nicht, weil dort habe ich auch nachgefragt).

 

Ist in der Doku wohl eher ein kleiner Fehler - bzw. kommt es eben auch darauf an, wie du deinen Code schreibst.

Die Basis Font Variabel für das Shopware Responsive Theme ist font-size-base

Und in deiner Less Datei schreibste dann einfach .unitize(font-size, @font-size-base); oder was auch immer.

Das du keine Antwort bekommst liegt wohl eher an deinen ellenlangen Beiträgen und das du nicht eher weniger klar ausdrückst, dass lesen sich die wenigsten durch. In der Kürze liegt die Würze.

Was hat jetzt auf einmal die Less Variabel mit der {$theme…} Variabel in den Smarty Templates zu tun?

…dass man auf die Variable in der LESS Datei über  .unitize(font-size, @font-size-base);  greift ist ja klar. Aber wie verhinderst du, dass der Benutzer in der Konfiguration nicht 20px eingibt? Natürlich kann man ihn zwingen die Zahl einzugeben, aber dann kann das zu Missverständnissen führen, wenn er 20px eingibt und  diese nicht gespeichert werden, weil Konfigurationsmenu eine Zahl 20 erwartet (und nicht Zeichenkette 20px)!

Genau dies ist so ein Fall, wo man die Konfigurationsvariable zwischen Datenbank-Auslesen und Verwendung in LESS programmatisch anpassen muss! Und geht das? Wenn du denkst dass es geht, schreib mir bitte ien Beispiel dafür, weil in all Links zur Doku, die du mir bisher angegeben hast, finde ich das nicht!

>Was hat jetzt auf einmal die Less Variabel mit der {$theme…} Variabel in den Smarty Templates zu tun?

Dort (in der TPL) wird die Konfigurationsvariable in einem Videotutorial von Shopware ausgegeben. Meine Überlegung war, dass sich dieser Konstrukt auch in Theme.php anwenden lässt, weil aus TPL wird schliesslich eine PHP Datei. Aber ich denke, dass man auch in Smarty eine Konfigurationsvariable nur anzeigen kann, nicht aber ändern kann.

Ich warte wirklich darauf eine Bestätigung von Shopware Team zu kriegen, dass Konfigurationsvariablen eigentlich keine Variablen sind, sonder nur Konstanten. Dann wäre die ganze Sache klar. Wenn man aber an jeder Ecke liest VARIABLE da und VARIABLE dort, dann ist das Irreführend, wenn man diese Variable zwischen DEFINITION/INITIALISIERUNG bis zur VERWENDUNG/ANZEIGE nirgendwo abändern kann!?

Man muss halt den Nutzer darauf hinweisen, oder nehm halt ein Number field. Man kann natürlich auch eine Smarty Variabel ändern, was natürlich in diesem Fall wenig Sinn macht. Steht aber auch alles in der Smarty Doku.

Die Variablen haben nix mit der Datenbank zu tun, die Variabeln werden in der json config Datei & all.less gespeichert unter web/cache und dann entsprechend kompiliert durch den internen Less compiler.

Und das es keine Konstanten sind ist ja eigentlich selbsterklärend, da du ja die Variabeln auch entsprechnd überschreibst.

Und was macht es für einen Sinn diese Konfigurations Variabel wieder zu ändern, nachdem das Theme konfiguriert ist? 

Du kannst alles in Shopware bearbeiten. Wenn du bisschen in den Code geschaut hättest wüsstest du schon wie das gemacht wird.

Du musst bloß den theme_service dekorieren und kannst du die saveConfig Methode so anpassen wie du lustig bist. shopware/Service.php at b3520661f1c182baa9e2f3dbd8c351f25d2284f4 · shopware/shopware · GitHub