Smarty Forum Index Smarty
The discussions here are for Smarty, a template engine for the PHP programming language.
Angepasste Pfadangeben in Smarty

 
Post new topic   Reply to topic    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
Stadler
Smarty Rookie


Joined: 12 Jul 2013
Posts: 10

PostPosted: Sun Dec 15, 2013 3:11 pm    Post subject: Angepasste Pfadangeben in Smarty Reply with quote

Moin, moin,

ich bin derzeit dabei, mein eigenes einfaches Templatesystem durch Smarty zu ersetzen. Wenn ich z. B. das Template form/input/text.html laden möchte, verwende ich z. B.
ABC::$tpl->fetch('form.input.text');
Die Dateiendung der Templatedateien stehen dann in der Config drinne.
Nun möchte ich Smarty fetch und Co. & KG genauso anpassen, dass das auch mit Smarty geht, damit ich nicht alles durch
ABC::$smarty->fetch('form/input/text.html'); ersetzen muss.

Wer kann mir hier weiterhelfen?
Back to top
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 108
Location: Germany

PostPosted: Mon Dec 16, 2013 9:19 am    Post subject: Reply with quote

Du kannst smarty "sagen" wo er nach den Templates suchen soll. Wenn du z. B. unterschiedliche Ordner hast die alle "durchsucht" werden sollen, ohne aber den eigentlichen Pfad der Datei angeben zu müssen, sondern nur den Dateinamen z. B. index.tpl (sucht z. B. unter templates/mytemps/directoryXYZ/)

Du kannst es so machen:

Code:

$directories = array("/templates/path1",
                                 "/templates/path1/path2",
                                 "/templates/path3");

$smarty->template_dir = $directories;


Dabei gilt dann, dass das erste FIle mit diesem Namen gerendert wird, welches gefunden wird. Also sprich index.tpl in templates/path1 wird angezeigt, index.tpl in templates/path1/path2 allerdigs nicht (außer du gibst es als Pfad an).
_________________
BASE4U - Deine Meinung ist Wichtig!
Back to top
View user's profile Send private message Visit poster's website
Stadler
Smarty Rookie


Joined: 12 Jul 2013
Posts: 10

PostPosted: Mon Dec 16, 2013 2:08 pm    Post subject: Reply with quote

Du hast mich flchas verstanden: Ich will dass aus
Code:
ABC::$smarty.>fetch('form.input.text');

intern
Code:
ABC::$smarty.>fetch('form/input/text.tpl');

wird.

Logischerweise durch Vererbung + Überschreiben der Methoden. Dass soll dann für alle Pfadangaben zu Templatedateien gelten, also auch bei include innerhalb von Templates usw.
ABC::$smarty enthielte dann eine Instanz von MySmarty, welche dann von Smarty erben würde.

Die Frage ist jetzt: bei welcher Methode bzw. bei welchen Methoden müsste ich da ansetzen?

Der erste Ansatz wäre halt am Anfang der Methode(n), den Ordner einfach zu 'parsen' und umzuschreiben und dann dort einfach parent::xyz([...]) aufzurufen.
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4692
Location: Hamburg / Germany

PostPosted: Tue Dec 17, 2013 8:30 pm    Post subject: Reply with quote

Am sichersten wäre aus Smarty_Internal_Resource_File eine neue Resource zu erzeugen.

In der Funktion populate()vor dem Aufruf von buildFilepath ()
$source->name entsprechend zu manipulieren.

$smarty->default_resource_type auf die neue Resource umsetzen.
Back to top
View user's profile Send private message
Stadler
Smarty Rookie


Joined: 12 Jul 2013
Posts: 10

PostPosted: Thu Dec 19, 2013 7:17 am    Post subject: Reply with quote

Erstmal danke für die Antwort.

Allerdings möchte ich das gerne durch Vererbung und ohne den Code von Smarty selbst zu verändern, realisieren. Ein schnelles
Code:
egrep -ri Smarty_Internal_Resource_File .
hat mir leider nicht ausgespuckt, wo das instanziert wird. Wahrscheinlich, weil der Klassenname iwo erst zusammengesetzt wird und dann per $xyz = new $class(...); instanziert wird. Da müsste ich dann wohl heute abend nochmal genauer den Code durchforsten. Oder kann mir hierbei jemand auf die Sprünge helfen?

Und außerdem: Müsste ich dann Smarty_Internal_Cacheresource_File nicht auch anpassen?

MfG
Christian Stadler
Back to top
View user's profile Send private message
Aristophan
Smarty Regular


Joined: 10 Jan 2011
Posts: 84

PostPosted: Thu Dec 19, 2013 10:16 am    Post subject: Reply with quote

Warum klonst du nicht die fetch method und setzt darin deine replace regex?
Back to top
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4692
Location: Hamburg / Germany

PostPosted: Thu Dec 19, 2013 10:44 pm    Post subject: Reply with quote

Ein clone von fetch() nützt nichts, da {include} nicht fetch() benutzt.

Es könnte so gehen

resource.myres.php ins plugins directory


Code:

<?php
class Smarty_Resource_Myres extends Smarty_Internal_Resource_File
{
    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
    {
--> $source->name   bearbeiten
       parent::populate($source, $_template)
    }
}


Dann $smarty->default_resource_type = 'myres'; in den Scripts setzte.

Die cache resource hat damit nichts zu tun.
Back to top
View user's profile Send private message
Stadler
Smarty Rookie


Joined: 12 Jul 2013
Posts: 10

PostPosted: Mon Dec 23, 2013 8:23 am    Post subject: Reply with quote

Sry die späte Antwort, hatte ganz übersehen, dass ich hier schon neue Antworten hatte.
U.Tews wrote:
Ein clone von fetch() nützt nichts, da {include} nicht fetch() benutzt.
Genau deswegen hatte ich ja auch die Frage hier gestellt.

Quote:
Es könnte so gehen

resource.myres.php ins plugins directory
[schnipp]

Supi, danke. Das probier ich mal aus.
Quote:
Die cache resource hat damit nichts zu tun.
Gut zu wissen. Ich wollte nur nicht, dass plötzlich der Cache nicht richtig verwendet wird, weil Smarty mit den unterschiedlichen Datennamen nicht zurecht kommt. Aber das ist ja nicht so.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP