Ankündigung

Einklappen
Keine Ankündigung bisher.

HANDLUNGSBEDARF: Maßnahmen gegen Seitenladefehler ab v3.4.a / v3.5

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

    HANDLUNGSBEDARF: Maßnahmen gegen Seitenladefehler ab v3.4.a / v3.5

    Hallo zusammen,

    seit smartVISU v2.9 (Release im März 2020) werden alle Widgets automatisch in der ./pages/base/root.html importiert, so dass man den Import nicht mehr in den eigenen Visu-Seiten machen muss. Um die Robustheit der Visu gegen doppelte Dateinamen zu erhöhen, wurde in Version v3.3 (Dezember 2022) der Namespace "@widgets" eingeführt, unter dem alle Widget-Ordner zusammengefasst sind. Die bisherige Importmethode (bzw. der bisherige Suchpfad) wurde mit v3.3 als "deprecated" eingestuft.

    Die überflüssigen Importe unter altem Suchpfad werden bis einschließlich v3.4 fehlerfrei ausgeführt und kosten lediglich Ladezeit. Wer die zahlreichen Aufforderungen zur Umstellung der eigenen Seiten bisher ignoriert hat, bekommt spätestens beim nächsten Versionswechsel eine Fehlermeldung. Anwender der develop-Version bekommen diese schon ab jetzt zu sehen.

    Zunächst bleibt die angesteuerte Seite mit alten Importpfaden leer. Beim nochmaligen Laden erscheint dann die Meldung
    Code:
                                                                           smartVISU
                                                                10:58, 28.12, v3.4.a
    --------------------------------------------------------------------------------
    
    Error occurred in twig-template engine!
    
    error: Unable to find template "basic.html" (looked into: 192.168.xxx.yyy\smartVISU\apps, 192.168.xxx.yyy\smartVISU\pages/mypages, C:\192.168.xxx.yyy\smartVISU\dropins, 192.168.xxx.yyy\smartVISU\pages/base).
    file:  raum_eg_essen.html
    line:  15
    
    --------------------------------------------------------------------------------
    Abhilfe: man löscht die alten Import-Kommandos in den eigenen Seiten:
    Code:
    {% import "mywidget.html" as mywidget %}
    Dabei ist darauf zu achten, dass die Widgets in den für Widgets bestimmten Ordnern abgelegt sein müssen.

    Wer Widgets in eigene Widgets importieren muss, verwendet den Namespace wie folgt:
    Code:
    {% import "@widgets/mywidget.html" as mywidget %}
    Näheres zum Widget-Import erläutert auch die neue Seite "User Extensions" der Inline-Doku.

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 11.11.2024, 14:53.

    #2
    Wichtig:

    alle widgets in den entsprechenden Ordnern werden automatisch mit ihren Dateinamen importiert, so wie oben angegeben. Wer bisher widgets beim Importieren gleichzeitig umbenennt, muss dies entweder weiterhin tun
    Code:
    {% import "@widgets/widget_mywidget.html" as mywidget %}
    oder die widget-Dateien umbenennen - im Beispiel von "widget_mywidget.html" in "mywidget.html". Letzteres wird empfohlen, weil die Widgets sonst doppelt importiert werden: einmal mit ihrem Dateinamen und zusätzlich mit dem gewählten Namen im selbsterstellten import. Der Templatechecker erkennt diese Widgets dann nicht und schmeißt Fehler für "unbekannte widgets".

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 25.02.2024, 11:58.

    Kommentar


      #3
      Ich hatte früher in einer html für die Makrodefinition hier mal folgendes in meiner my_computer_info.html genutzt:

      Code:
      /**
      * Some widget for status of PC and button for Wake on LAN
      *
      * @param       unique id for this widget
      * @param       Description of the computer
      * @param       a gad/item for the ping result
      * @param       a gad/item for the wol action
      */
      {% macro info(id, txt, item_ping, item_wol ) %}
      
      {% import "@widgets/basic.html" as basic %}
      {% import _self as IT %}
      
      {% set uid = uid(page, id) %}
      
      /** Design */
      <div id="{{ uid }}" class="computerinfo">
          <table style="width:100%; text-align: left;">
              <tr>
                  <th width="35%">{% if txt %} {{ txt }} {% endif %}</th>
                  <td class="w15">{{ IT.pingsymbol( item_ping) }}</td>
                  <td class="w10">{{ IT.wolbutton(item_wol)}}</td>
              </tr>
          </table>
      </div>
      {% endmacro %}
      Es funktioniert nun nach der 3.4 alles nicht mehr, was in dem Makro auf die eigene Definitionsdatei zurückgreift über {% import _self as IT %}.
      Hast Du einen Tip wie das nun klappen kann..?

      Kommentar


        #4
        Hmm. das {% import _self as .... %} wird in mehreren Widgets ohne Probleme verwendet und sollte hier nicht das Problem darstellen. Welche Fehlermeldung bekommst Du denn? (Notfalls nochmal "F5" drücken, damit Twig die Fehlermeldung anzeigt.)

        Hast Du in den Macros pingsymbol und wolbutton ggfls. noch Macros ohne den Namespace "@widgets" importiert?
        In welchem Ordner liegt die my_computer_info.html?

        Gruß
        Wolfram

        Kommentar


          #5
          Ich habe den Fehler gefunden, es lag nicht am _self sondern an einer falschen Zuweisung. Insofern läuft es nun problemlos. Danke für die Hilfe. Übrigens das blinkende SmartVISU Symbol rechts oben in der Ecke hat mich auf die Spur des Problems gebracht, also dafür nochmals Daumen hoch!

          Kommentar


            #6
            Da das Release von smartVISU v3.5 in greifbare Nähe rückt, weise ich hiermit nochmal auf den Handlungsbedarf hin. Wer jetzt nicht aktiv wird, wird nach dem Umstieg mit Fehlern zu kämpfen haben.
            • Das Entfernen der Importe aus den eigenen Seiten ist seit v2.9 möglich und wurde immer wieder empfohlen. Betroffen sind auch die index.html und die infoblock.html im Ordner der eigenen Seiten.
            • Die Umstellung auf den Namespace @widgets ist mit allen Versionen ab v3.3 möglich. Das braucht man aber nur, wenn man eigene Widgets verwendet, die wiederum andere Widgets verwenden.
            • Alle mitgelieferten Widgets, die Widgets auf smartvisu-newstuff und auch die Plugin-Widgets von smarthomeNG seit v1.9.3 sind schon auf dem erforderlichen Stand.
            Gruß
            Wolfram
            Zuletzt geändert von wvhn; 01.12.2024, 00:33.

            Kommentar


              #7
              Irgendwie klappt das bei mir nicht. Ich habe alle (eigenen) Widgets im pages/huette/widgets-Ordner, und bisher mit import eingebunden.

              Aus der Datei pages/huette/widgets/shutter_auto.html bin ich macro shutter_auto ein:

              Code:
              {{ shutter_auto.shutter_auto('foo', 'bar'...) }}
              aber das Widget erscheint einfach nicht. Es gibt aber auch keinen sichtbaren Fehler... wenn ich den Namespace der Datei weglasse, gibt es einen Fehler, widget nicht gefunden.

              Aus der Doku - hier und in pages/docu - geht für mich hervor, dass ich den widgets-Ordner weiter nutzen kann (würde ich gern, da dann alle Dateien in einem Ordner unterhalb von pages sind), aber nicht ausdrücklich, wie ich die einbinden müsste.

              Mache ich was falsch? Falls ja, was?

              Installation ist eine neue v3.5, den pages-Ordner erst bearbeitet (imports gelöscht, widget-Namen um die jew. Datei ergänzt) und dann die Konfig geladen und zweimal gesichert. Ansonsten läuft alles...

              Edit: Wenn ich Binde- aber auch Unterstriche aus den Namen nehme, geht es... da wundert mich etwas, dass er das ohne Fehler schluckt
              Zuletzt geändert von Morg; 26.12.2024, 16:28.

              Kommentar


                #8
                Zitat von wvhn Beitrag anzeigen
                Abhilfe: man löscht die alten Import-Kommandos in den eigenen Seiten: Code:

                {% import "mywidget.html" as mywidget %}
                Dabei ist darauf zu achten, dass die Widgets in den für Widgets bestimmten Ordnern abgelegt sein müssen.
                Ich habe das bei mir raus gelöscht. Die Fehlermeldung bleibt allerdings die Gleiche. Deshalb weiß ich nicht, wo ich jetzt noch suchen muss. Mein Widget liegt in dropins und heißt kwl.html. Aufgerufen wird es mittels kwl.kwl. Es kommt allerdings die oben genannte Fehlermeldung, wenn ich es auf der Page aufrufe.

                P.S.: Cache ist übrigens auch.
                Zuletzt geändert von Cannon; 27.12.2024, 00:07.

                Kommentar


                  #9
                  Cannon Innerhalb der kwl.html sind wahrscheinlich noch Importe, die nicht auf den Namespace umgestellt sind.

                  Zitat von wvhn Beitrag anzeigen
                  Wer Widgets in eigene Widgets importieren muss, verwendet den Namespace wie folgt:
                  Code:
                  {% import "@widgets/mywidget.html" as mywidget %}
                  Morg den Effekt mit den Unterstrichen schau ich mir an. Das ist seltsam, denn es wurde nur der Loader-Pfad abgespaltet, in dem twig die Dateien sucht.

                  Gruß
                  Wolfram

                  Kommentar


                    #10
                    Zitat von wvhn Beitrag anzeigen
                    Innerhalb der kwl.html sind wahrscheinlich noch Importe, die nicht auf den Namespace umgestellt sind.
                    Danke. Das war die Lösung. Ich habe das zwar oben gelesen. Aber an der Stelle nicht mehr realisiert, da das Widget ja auch schon eine Weile nicht mehr angefasst wurde.

                    Kommentar


                      #11
                      @Morg,

                      ich kann den Fehler hier teilweise reproduzieren. Habe Datei- und Widgetnamen mit Unterstrich verwendet und in ./dropins/widgets sowie ./pages/meineBude/widgets abgelegt. Alle Kombinationen funktionieren. Wenn ich stattdessen einen Bindestrich im Dateinamen verwende, funktioniert es nicht.

                      Mögliche Ursache: beim automatischen Import werden die Widgets mit dem Dateinamen benannt. Wenn Du die Widgets bisher beim Importieren noch umbenannt hast ( import "shutter-auto" as sa), dann hat "sa.shutter" funktioniert. Jetzt müsste es "shutter-auto.shutter" und da svchmeißt twig einen Fehler wegen des Bindestrichs.
                      Abhilfe: Bindestrich durch Unterstrich ersetzen, oder Widgets doch wieder selbst mit Namespace importieren:
                      Code:
                      {% import "@widgets/shutter-auto" as sa %}
                      Gruß
                      Wolfram

                      EDIT: Da twig den Macronamen als Variable verwendet, ist ein Minuszeichen dort verboten. Eigentlich logisch ...
                      Zuletzt geändert von wvhn; 27.12.2024, 17:11.

                      Kommentar


                        #12
                        Moin Wolfram,

                        danke fürs Probieren und die Info. Es kann gut sein, dass mal ein Unterstrich, mal ein Bindestrich drin war; da das immer funktioniert hat (wahrscheinlich wie in deinem Beispiel), ist es bisher nicht aufgefallen.

                        Jetzt geht es jedenfalls, vielen Dank

                        Ich habe dabei gleich noch etwas aufgeräumt und "verwandte" Widgets jeweils in einer Datei zusammengefasst und umbenannt, etwas Frühjahrsputz quasi

                        Da könnte man das inverter- und das inverter_hp-Widget auch zusammenpacken, das wäre dann eine Datei mit zwei Makros, je nach Wahl...

                        Kommentar


                          #13
                          Aus gegebenem Anlass und weil man die Dateien vielleicht nicht als „eigene Seiten“ ansieht, hier nochmal der Hinweis, dass auch die index.html und die infoblock.html im Ordner der eigenen Seiten auf veraltete Importe geprüft werden müssen.

                          Aus den Release Notes:
                          Aus den eigenen Seiten können die Importe von Widgets ganz entfernt werden, da alle in den Widget-Ordnern liegenden Widgets automatisch importiert werden. Bitte denkt dabei auch an die index.html und die infoblock.html im Ordner Eurer Seiten. Wer eigene Widgets verwendet, muss diese anpassen. Näheres siehe hier.​
                          Zuletzt geändert von wvhn; 30.12.2024, 11:59.

                          Kommentar


                            #14
                            Sorry aber ich muss euch leider eine Frage dazu stellen...

                            Code:
                            /**
                            * -----------------------------------------------------------------------------
                            * @package     smartVISU
                            * @author      Martin Gleiß
                            * @copyright   2012 - 2015
                            * @license     GPL [http://www.gnu.de]
                            * -----------------------------------------------------------------------------
                            */
                            
                            
                            {% extends "rooms.html" %}
                            
                            {% block content %}​
                            
                                <div class="block">
                                    <div class="set-2" data-role="collapsible-set" data-theme="a" data-content-theme="a" data-mini="true">
                                        <div data-role="collapsible" data-collapsed="false">
                                            <h3>WC</h3>
                                            {{ device.blind ('eg.wc.rollo', '', 'eg.wc.rollo.fahrt', 'eg.wc.rollo.stop', 'eg.wc.rollo.position') }}
                                        </div>
                            
                                    </div>
                                </div>
                                
                            <div class="block">
                                    <div class="set-2" data-role="collapsible-set" data-theme="a" data-content-theme="a" data-mini="true">
                            
                                        <div data-role="collapsible" data-collapsed="false">
                                            <h3>Zirkulation</h3>
                                            
                                            <br>
                                            
                                            {{ basic.stateswitch('', 'kg.heizung.zirku', 'midi', ['1', '0'], ['sani_water_tap.svg', 'sani_water_tap.svg'], '-      Zirkulation      -', ['#f00', 'icon0']) }}
                                    
                                            
                                            <br>
                                            <br>
                                            <br>
                                            
                                            Zirkulation zuletzt  {{ basic.print('', 'kg.heizung.zirku.zuletzt_an_uhrzeit') }}
                                            
                                        
                                        </div>
                                                    
                                    </div>
                                </div>    ​
                            
                            {% endblock %}
                            
                            ​

                            ich habe versucht diese Seite zu laden --> ähnliche Fehlermeldung wie in #1

                            dort finde ich aber gar keine Zeile mit "{% import "mywidget.html" as mywidget %}"

                            ich habe jetzt alle Datein aus smartvisu/widgets nach smartvisu/dropins kopiert (nicht nach smartvisu/dropins/widgets)


                            Es funktionieren jetzt wieder alle Seiten - aber ganz richtig war das glaube ich nicht


                            Danke schon mal für die Klarstellung


                            Kommentar


                              #15
                              Die Datei erweitert die rooms.html
                              Code:
                              {% extends "rooms.html" %}​
                              und dort wird wieder das Raummenü (rooms_menu.html oder navigation.html) eingeschlossen.Vermutlich ist in einer der beiden Dateien ein veralteter Import von Widgets.

                              Gruß
                              Wolfram

                              Kommentar

                              Lädt...
                              X