Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarty Problem mit include

Einklappen

Neue Werbung 2019

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

  • Smarty Problem mit include

    Hi Community

    Ich stehe vor einem Problem und finde einfach nirgends eine Lösung dafür.

    Ich habe ein DB - Suchformular erstellt im File kundenSuche.php. Dementsprechend gibt es auch ein Smarty Template dafür, kundenSuche.tpl

    Das Suchformular will ich nun in verschiedenen Seiten includieren mittels Smarty.
    Die Anzeige funktioniert, was aber nicht funktioniert ist das Verhalten dahinter.

    Sagen wir mal ich bin auf der seite uebersicht.php (bzw. uebersicht.tpl). Wenn ich nun Daten suchen will in der DB fülle ich das Suchformular und sende es. Was ich erreichen will ist, dass die Anzeige der gefundenen Daten dort stattfindet wo das kundenSuche.tpl includiert wird.

    Ich habe einige Möglichkeiten ausprobiert und momentan stehe hier:

    uebersicht.php
    PHP-Code:
    ..Logik...

    $smarty = new Smarty();
    $smarty->assign('include_dir_templates',SMARTY_TEMPL.'kundenSuche.tpl');
    $smarty->assign('action','uebersicht.php');
    $smarty->assign('aufrufendesTemplate','uebersicht.tpl');
    $smarty->display(SMARTY_TEMPL.'uebersicht.tpl'); 
    uebersicht.tpl
    PHP-Code:
    <html>
    <
    head>
        <
    title>{$title|default: "VOT"}</title>
    </
    head>

    <
    body>

    {include 
    file="{$include_dir_templates}"}

    {foreach 
    from=$menu item=seite key=text}
    <
    br><a href="{$seite}">{$text}</a>
    {/foreach}


    {if 
    $fehler}
    <
    b>{$fehler}</b>
    {/if}
    </
    body>

    </
    html
    Wie erwähnt, funktioniert die Anzeige des Suchformulars. Wenn ich nun aber auf suchen drücke, erhalte ich folgende Fehlermeldung.

    Code:
    Fatal error: Uncaught exception 'SmartyException' with message 'Missing template name' in /Applications/MAMP/htdocs/VOT/_includes/Smarty/libs/sysplugins/smarty_internal_template.php on line 624
    Eigentlich ist ja die Fehlermeldung ziemlich klar. Aber wenn ich das mittels Debugger durchspiele, kann ich sehen, dass die Variable im suchenKunde.php richtig abgefüllt ist:

    kundenSuche.php
    PHP-Code:
    $smarty = new Smarty();

    if(isset(
    $_REQUEST['kundenSuche'])){
       .. 
    Logik...
        
    $aufrufendesTemplate $_REQUEST['aufrufendesTemplate'];

    }
    //$smarty->display(SMARTY_TEMPL.'kundenSuche.tpl');
    $template SMARTY_TEMPL.$aufrufendesTemplate;
    $smarty->display($template); 
    Die Variable $template enthält folgendes:/Applications/MAMP/htdocs/VOT/templates/uebersicht.tpl


    Nun, hat jemand eine Idee wo der Fehler liegt? Bzw. gibt es eine andere Variante aus Architektur Sicht, wie man es besser lösen könnte?

    Gruss, Dadelu

  • #2
    Nutz keine absoluten Pfade mit {include ...}

    Setz Smarty ein Template-Directory, von dort aus kannst du dann direkt im Template zugreifen via {$include} und relativen Pfaden.

    PHP-Code:
    $smarty = new Smarty();
    $smarty->setTemplateDir('/absolute/foo/bar');
    $smarty->assign('loadThis''bla/bing.stpl');
    $smarty->display('a.stpl'); 
    PHP-Code:
    {include file="{$loadThis}"
    Ich würd an deiner stelle aber eher Template-Inheritance nutzen, statt wie ein blöder durch die Gegend zu includen.

    PHP-Code:
    $smarty = new Smarty();
    $smarty->setTemplateDir('/absolute/foo/bar');
    $smarty->assign('loadThis''bla/bing.stpl');
    $smarty->display('bla/bing.stpl'); 
    a.stpl
    PHP-Code:
    {block name="here"}
    Appears when nothing pushed to the block
    {/block
    bla/bing.stpl
    PHP-Code:
    {extends '../a.stpl'}

    {
    block name="here"}
    Bla Bla Bla!
    {/
    block
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Danke für die Antwort, ich werde das mit der Inhertiance anwenden. Aber was ich noch nicht verstehe ist, was ich beim Such-File angeben muss beim ->display(). Soll es da das eigene Template aufrufem, oder das Template der Seite welche es includiert?

      Kommentar


      • #4
        Das template das das basistemplate erweitert rufst du per display auf, siehe mein Beispiel.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Was ich noch nicht ganz verstehe.. Anstatt eines Includes kann ich dementsprechend ein block suchen definieren. Diesen muss ich ja auf jeder Seite dann hinzufügen mittels block Befehl (ich kann ihn ja nicht im Basistemplate implementieren, da nicht alle Seite über die Suche verfügen sollen). Wenn ich aber dies so mache, muss ich den ganzen Code jedes mal in jeder Seite reinkopieren... Gibt es da keinen anderen Weg?

          Kommentar


          • #6
            basis template
            PHP-Code:
            {block name="suche"source der suche{block
            seite mit suche
            PHP-Code:
            {extends "basis.tpl"
            seite ohne
            PHP-Code:
            {extends "basis.tpl"}
            {
            block name="suche"}{/block
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar

            Lädt...
            X