Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - globale Konstanten importieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - globale Konstanten importieren

    Hallo zusammen,

    ich würde gerne eine "konstanten.html"-Datei verwenden, um Visu-weite Voreinstellungen in Konstanten zu verwalten, also etwa so:
    Code:
    {% set ICON_LICHT_AN  = icon1~'light_light_dim_100.png' %}
    {% set ICON_LICHT_AUS = icon0~'light_light.png' %}
    ... um in den Widgets dann direkt auf diese Konstanten zugreifen zu können. So kann ich auf einfachem Wege die Symbole bei Bedarf auf einen Rutsch ändern.
    Das funktioniert, wenn ich die obigen Zeilen direkt in z.B. root.html schreibe, das ist aber nicht im Sinne des Erfinders. Ich kann's natürlich auch in meine eigene rooms.html schreiben, habe es dann aber nicht in den autogenerate-Seiten zur Verfügung.
    Was ich also brauche, ist eine Funktion ähnlich import oder extends...

    Wenn's bereits eine passende Stelle gibt, die ich für sowas auch verwenden kann, ist's natürlich auch gut...
    CU,
    Mathias

    #2
    Du kannst das doch so machen?! Du willst deine Eigenen Definitionen zusammen mit der Autogenerierung verwenden?

    Dann erstelle dir einen Ordner unter smartVISU/pages/ dort kopierst du dir die Dateien rein die du selbst vorgeben/anpassen möchtest.

    Dort habe ich z.B. die rooms.html drinnen die meine eigene Widgets importiert (Vorlage z.b. aus smarthome Ordner kopieren und anpassen). Die wideget.html (oder deine konstanten.html) liegt dann auch in dem Ordner.

    Dann in SmartVISU Setup wird deine Eigene Seite ausgewählt. Die Autogenerierten Seiten werden dann aus dem smarthome Ordner genommen.

    Also im Prinzip wird erst in deinem Ordner nach der Datei index.html gesucht, wenn nicht vorhanden dann im smarthome Ordner. Und so wird nach und nach der Inhalt und die Includes immer erst im eigenen und dann im smarthome Ordner gesucht, so dass man alles überschreiben kann was man will. Die navigation.html und die einzelnen raum.html's sollten natürlich dann nur im smarthome Ordner sein, damit die Autogenerierung noch funktioniert.

    Hoffe das Hilft dir weiter.

    Gruß

    Kommentar


      #3
      Ich versuch grad, meine Konstanten da hinzukriegen, wo ich sie will; erstmal ohne irgendwelche Imports, sondern einfach in einer html, die sowieso aufgerufen wird. Dazu schreibe ich die obigen Zeilen in die HTML-Datei ganz an den Anfang und schaue, was passiert:
      • pages/base/root.html: funktioniert
      • pages/base/base.html: funktioniert
      • pages/gindler/index.html: funktioniert nicht

      In der pages/gindler/index.html steht ja {% extends "base.html" %}, in base.html steht {% extends "root.html" %} - dann sollte es doch auch klappen, wenn ich meine Konstanten direkt in die index.html schreibe....
      CU,
      Mathias

      Kommentar


        #4
        Kommando zurück - ich sollte es natürlich in die rooms.html schreiben und nicht in die index.html....
        So sieht's schon mal besser aus.
        CU,
        Mathias

        Kommentar


          #5
          neue Erkenntnisse:
          • Konstanten in pages/gindler/index.html: funktioniert auf Startseite (logisch), nicht aber auf den Raumseiten
          • Konstanten in pages/gindler/rooms.html: funktioniert auf den Raumseiten, nicht aber auf der Startseite

          Meine große Preisfrage bleibt also bestehen: wie kriege ich eine zentrale Datei (s. 1. Post) an möglichst einer einzigen Stelle integriert, sodass alle Seiten (in pages/gindler und in pages/smarthome) darauf zugreifen können?
          In der von dir angesprochenen smarthome/rooms.html sehe ich leider nicht, wie das funktionieren sollte; ich sehe da nur ein {% extends "base.html" %} - da wird aber kein weiterer Eintrag zugelassen.
          CU,
          Mathias

          Kommentar


            #6
            Wenn du es halt auch in der Index Seite brauchst dann halt ein include in index.html und rooms.html. Andernfalls würde auch ein include in der rooms.html ausreichen.

            Kommentar


              #7
              ... und genau am include scheitert's

              pages/gindler/konstanten.html:
              Code:
              {% set ICON_DL_AN  = icon1~'light_light_dim_10.png' %}
              {% set ICON_DL_AUS = icon0~'light_light.png' %}
              pages/gindler/rooms.html:
              Code:
              {% include 'konstanten.html' %}
              
              {% extends "base.html" %}
              
              {% block sidebar %}
                  {% include 'navigation.html' %}
              {% endblock %}
              
              {% block content %}
              
                  Rooms
              
              {% endblock %}
              Ergebnis beim Aufruf einer Seite:
              Error accoured in twig-template engine! error: A template that extends another one cannot have a body. file: rooms.html line: 10
              Wenn der Inhalt von konstanten.html direkt in rooms.html steht (anstelle {% include 'konstanten.html' %}), dann klappt's...
              CU,
              Mathias

              Kommentar


                #8
                Das Include muss unter dem extends stehen - dann geht es sicherlicht.

                Gruß

                Kommentar


                  #9
                  Hallo Thomas,

                  wäre schön - ist aber leider nicht so
                  Die Fehlermeldung bleibt die Gleiche, wenn ich es so mache:
                  Code:
                  {% extends "base.html" %}
                  {% include "konstanten.html" %}
                  
                  {% block sidebar %}
                      {% include 'navigation.html' %}
                  {% endblock %}
                  
                  {% block content %}
                  
                      Rooms
                  
                  {% endblock %}
                  CU,
                  Mathias

                  Kommentar


                    #10
                    ok, dann hau es mal in den block tag:

                    https://groups.google.com/forum/#!to...rs/U7utsBNtSD4

                    Gruß

                    Kommentar


                      #11
                      Hi,

                      hab ich auch schon probiert:
                      Code:
                      {% extends "base.html" %}
                      
                      {% block sidebar %}
                          {% include 'konstanten.html' %}
                          {% include 'navigation.html' %}
                      {% endblock %}
                      
                      {% block content %}
                          {% include 'konstanten.html' %}
                          Rooms
                      
                      {% endblock %}
                      Die gute Nachricht: es kommt keine Fehlermeldung
                      Die schlechte Nachricht: es hilft nix... es wird offensichtlich auch nix includiert - die in konstanten.html definierten Werte werden nicht verwendet

                      Ich verzweifele noch - das kann doch net soooo schwer sein....
                      CU,
                      Mathias

                      Kommentar


                        #12
                        neue Erkenntnis:
                        wenn ich in konstanten.html noch irgendeinen HTML-Code mit reinschreibe, kommt dieser im %block sidebar% an, im %block content% jedoch nicht...
                        CU,
                        Mathias

                        Kommentar


                          #13
                          noch ne Erkenntnis:
                          Wenn ich innerhalb von konstanten.html eine der gesetzten Werte in einen HTML-Text wandle, funktioniert das:
                          Code:
                          {% set ICON_DL_AN  = icon1~'control_x.png' %}
                          <p>Testausgabe: {{ICON_DL_AN}}</p>
                          liefert im HTML-Code der Seite
                          <p>Testausgabe: icons/or/control_x.png</p>
                          Außerhalb dieser Datei habe ich jedoch keinen Zugriff auf diese Werte.
                          Vermutung:
                          Da ja alles in {%....%} zur Syntax einer Programmiersprache gehört, sind die hier gesetzten Werte auch nur im Kontext dieser Datei gültig und werden hier ausgewertet. Beim include wird die konstanten.html also zuerst gerendert und lediglich der resultierende HTML-Code kommt in die übergeordnete Datei.
                          Lösung:
                          ich bräuchte also eine Funktion, die den Inhalt meiner Datei ohne Rendern in die übergeordnete Datei kopiert
                          CU,
                          Mathias

                          Kommentar


                            #14
                            Include ist ja genau dafür da das es gerendert ankommt (quasi ausgelagerter Seitencode)

                            Was du suchst ist doch eher import oder? Ich würds mal damit probieren.

                            Gruss
                            Join smartVISU on facebook. Web: smartvisu.de.
                            Dir gefällt smartVISU? Bitte spenden für die Weiterentwicklung.

                            Kommentar


                              #15
                              Hi,
                              import ist laut Twig-Doku doch dafür da, Makros zu verwalten - hilft mir also wenig.
                              Ich hab's trotzdem probiert - erfolglos.
                              Ebenso mit embed, extends und use
                              CU,
                              Mathias

                              Kommentar

                              Lädt...
                              X