Optimierung der Templates

Dieses Thema im Forum "Feature Requests" wurde erstellt von suther, 17. Mai 2013.

  1. suther

    suther Member

    Ich habe das default-Template für meine zwecke etwas aufgehübscht.

    Dabei ist mir eine etwas ungünstige Umsetzung der SideNav aufgefallen, die mir jetzt bei leerem Navigationsbaum einen unschönen Container darstellt (da ich mir eine mit Schatten hinterlegte Navi-Box generiert habe.

    Ich denke mal, das alles auf die sidenav.tpl.htm Datei heinauslaufen wird.

    Hier ist der Quellcode:
    templates/sidenav.tpl.htm

    HTML:
    <ul id="submenu">
        <tmpl_loop name="nav_left">
            <li class="title">
            <tmpl_if name="startpage">
                <a href="#" onclick="loadContent('<tmpl_var name='startpage'>')">
            </tmpl_if>
            <tmpl_var name="title">
                <tmpl_if name="startpage">
                    </a>
                </tmpl_if>
            </li>
                <tmpl_loop name="items">
                    <li <tmpl_if name="html_id"> id='<tmpl_var name="html_id">' </tmpl_if>>
                        <tmpl_if name="link">
                            <tmpl_if name="target" op="==" value="_blank">
                            <a href="<tmpl_var name='link'>" target="_blank">
                            <tmpl_else>
                            <a href="#" onclick="loadContent('<tmpl_var name='link'>')">
                            </tmpl_if>
                        </tmpl_if>
                        <tmpl_var name="title">
                        <tmpl_if name="link">
                            </a>
                        </tmpl_if>
                    </li>
                </tmpl_loop>
        </tmpl_loop>
    </ul>
    
    
    Die TPL-Engine is mir jetzt nicht bekannt, aber kann man nicht relativ simple eine Abfrage davor setzen, die prüft, ob überhaupt eine der hier zu verarbeitenden Variablen einen Wert hat, und wenn nicht, dass dann das gesamte <ul> nicht angezeigt wird?
     
  2. tkausl

    tkausl New Member

    Die Template-Engine scheint sehr Primitiv zu sein und es wird gerne mal zwischen <> und {} gewechselt bei Template-Variablen und co. ist mir so aufgefallen.

    Wird es nichtmal Zeit, auf Smarty zu wechseln?
     
  3. nowayback

    nowayback Well-Known Member

    Oh nein... Wenn hier smarty zum einsatz kommt, fliegt ispconfig wieder runter. Die Gründe dazu findet man mit etwas suchen im Quellcode von Smarty...
     
  4. suther

    suther Member

    Es is mir ein Rätsel, warum immer solche Template-Engines zum Einsatz kommen, da doch PHP selbst eine Art eingebaute Template-Engine is.

    Ob ich nun eine PHP-IF-Schleife in den Quellcode-Hämmere, oder ob da smarty-Klammern stehen. Und scheinbar alles nur weil es halt - egal was es is, ABER - kein PHP sein soll.
    Wobei Smarty und Co ja auch PHP-PRogrammblöcke zulässt - also meiner Meinung nach - performance-raubend, aufblähend, verkomplizierend, kurzum unnötig!

    Aber eh hier ein Flame-War gestartet wird, wäre ich froh eine Antwort auf meine eingangs gestellte Frage zu erhalten.
     
  5. Till

    Till Administrator

    Die TEmplate engine kann exakt dass was sie können soll und es ist meines Erachtens eine sehr gute Template engine, sie unterstützt u.a. 2 verschiedene Syntaxe wie Du bereits selbst rausgefunden hast. Smarty ist viel zu aufgebläht. Wir hatten den smarty code damals evaluiert und das Ergebnis war das Smarty keinesfalls eingesetzt wird.

    Dem kann ich nur zustimmen.

    Die Variablen stehen nur innerhalb des loop zur Verfügung, daher kannst Du sie nicht auserhalb des loop abfragen.

    Der Grund für eine Template engine ist einfach dass man eben keinen PHP Code im Template haben möchte um eine saubere Trennung der Software Layer zu erhalten, denn wenn Du ein großes OpenSource Projekt wie ispconfig entwickelst und dann PHP in templates zulässt dann wandert immer mehr Code Stück für Stück von den Library und code Dateien in die Templates und nach kurzer Zeit ist die Software faktisch unwartbar.
     
  6. suther

    suther Member

    Danke Till für dein Feedback.
    Das mit dem Zulassen von PHP als Templatesprache in Großen Projekten kann ich nachvollziehen.

    Nun gut, mich stört es nicht weiter, da ich ja nicht dauernd damit arbeite. Aber nochmal zu meiner Frage... hast du da auch eine Lösungsmöglichkeit parat? Ich habe da rumgebastelt und es nicht hinbekommen, dass der DIV nicht angezeigt wird, wenn er leer ist.

    Bin für jeden praktischen Tipp dankbar.
     
  7. Till

    Till Administrator

  8. tkausl

    tkausl New Member

    Würde mal Sagen es wäre sinnvoll das ganze im Top-Menü einzubauen statt im Left-Menü. Der Button oben im Menü braucht ja garnicht angezeigt zu werden, wenn es garkeine Unterseiten gibt.
     
  9. suther

    suther Member

    Jo-Ne, bringt nicht wirklich was. Weil der Navigations-Div ja schon in der Template-Datei dargestellt wird.
    HTML:
      <!-- begin: main content area #main -->
                <section id="main" name="content">
                    <nav id="sideNav" class="clearfix">&nbsp;</nav>
                    <!-- begin: #content -->
                    <section id="content">
                        <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
                            <div id="pageContent"><!-- AJAX CONTENT --></div>
                        </form>
                        <div id="ie_clearing">&nbsp;</div>
                        <!-- End: IE Column Clearing -->
                    </section>
                    <!-- end: #content -->
                </section>
                <!-- end: #main -->
    
    Sprich - hier müsste ein Schritt vorher gestartet werden. Dass der gesamte ul -li und sidenav-Bereich nur über die nav.php eingefügt wird.
     
  10. Till

    Till Administrator

    Der Div sollte auch immer unsichtbar sein, er ist nur ein Platzhalter für Ajax Requests und nict fürs styling des Menüs. Du kannst ja im nav Template einen eigen div um Dein menü legen wenn Du es mit eine Rahmen versehen willst.
     
  11. Croydon

    Croydon Super-Moderator

    Zum Thema Template-Variable für Elementanzahl:

    Beginnend mit Version 3.0.5.3 wird automatisch eine Zählervariable angelegt, wenn eine Schleife im Template definiert wird.

    Wenn eine Schleife mit setLoop() definiert wurde, die den Namen "meine_elemente" hat, so wird automatisch auch eine Variable im Template definiert, die "_meine_elemente_num" heißt.
    Sie kann dann z. B. wie folgt verwendet werden:

    <tmpl_if name='_meine_elemente_num' op='>=' value='10'>
    <!-- nur anzeigen, wenn mehr als 10 Elemente vorhanden sind -->
    </tmpl>

    Im Beispielfall hier aus dem Thema wäre das dann also

    <tmpl_if name='_nav_left_num' op='>' value='0'>
    <!-- inhalt -->
    </tmpl_if>
     

Diese Seite empfehlen