2016-02-22 3 views
5

Mein Code ist wie folgt:

content.tpl:

{* Smarty *} 
{extends file='PageContentLayout.tpl'} 

PageContentLayout.tpl

{* Smarty *} 
{block name="file_name"} 
    <p>{$smarty.current_dir}</p> 
    <p>{$smarty.template}</p> 
{/block} 


{block name="other_content"} 
    ... 
    {* blah... *} 
    ... 
{/block} 

In früheren Versionen von Smarty, Dieser Code würde den Vorlagennamen und den Pfad der Datei ausgeben: content.tpl.

Allerdings habe ich gerade auf 3.1.29 aktualisiert, und es scheint jetzt, dass es der Name der Basisdatei PageContentLayout.tpl ist, die gedruckt wird.

Ich nehme an, dass dies eine bewusste Designänderung in verschiedenen Versionen von Smarty ist, aber ich kann keine Dokumentation zu diesen Änderungen finden.

Was ich wirklich gerne wissen würde, ist, was der beste Weg, um die ehemalige Funktionalität zu erreichen ist?

== == EDIT

Ich habe bemerkt, dass, selbst wenn {$smarty.current_dir} vom verlängern Aufruf Datei ing, wir immer noch die Basis-Dateipfad und den Dateinamen erhalten. Dies ist eine ziemlich signifikante Änderung gegenüber früheren Versionen und in meinem Fall sehr ernst, da ich keinen dynamischen Code mehr schreiben kann, um den Pfad der obersten Ebene zu finden.

+0

Ich denke, dass Sie jetzt 'file_name' Block zu Kind Vorlage' content.tpl' bewegen müssen, um es Dateiname zu bekommen. –

+0

@ PawełMikołajcuk Nein. Ich sage speziell in meinem == EDIT == Block, dass der gleiche Code in die untergeordnete Vorlage, den Pfad und den Dateinamen der Eltern !! Verrückter Freak, nein? Hauptänderung, die in einer Nebenversion eingeführt wird. – cartbeforehorse

+0

Ouć/Wir verwenden Smarty in Newscoop, aber wir haben am 3.1.21 angehalten. Die letzten Änderungen sind enorm und sie sollten mindestens als 3.2.x oder sogar 4.x gebrandmarkt werden.Ich habe Angst, dass jetzt Ihr Anwendungsfall nicht möglich ist (Sie können Informationen über Änderungen in meiner Antwort finden) und am besten wird es sein, auf 3.1.27 herunterzustufen. –

Antwort

4

wird führen Dies ist wahrscheinlich in Smarty der letzten Änderung

Starting with version 3.1.28 template inheritance is no longer a compile time process. 
All {block} tag parent/child relations are resolved at run time. 

Diese alle bekannten bestehenden Beschränkungen nicht lösen (siehe unten).

Von Smarty Devs:

Versionen < 3.1.28 tat Cache alle für die Leistung Vorlage Objekte, um sie für den Fall wieder zu verwenden eine Untervorlage mehrmals aufgerufen wurde. Es war jedoch eine Verschwendung von Erinnerung. 3.1.28 ist für Größe und Geschwindigkeit optimiert und das interne Template Objekt Handling ist völlig anders. Die $smarty->template_objects wurde entfernt.

Wenn das Debugging aktiviert ist, können einige Informationen wie der Pfad der Vorlagendatei im Array $smarty->_debug->template_data gefunden werden.

Inheritance Release Notes: https://github.com/smarty-php/smarty/blob/master/INHERITANCE_RELEASE_NOTES.txt

Neue Features: https://github.com/smarty-php/smarty/blob/master/NEW_FEATURES.txt

können Sie überprüfen, ob $smarty.template_object keine Daten haben, was Sie brauchen.

+0

Ich muss mehr Nachforschungen anstellen, was Sie gesagt haben, aber ich habe vorläufig eine Auszeit gefunden, und die Kopfgeldzeit geht zu Ende. Ihre Antwort ist jedoch gründlich, also danke. – cartbeforehorse

+0

können Sie in Ihren Workaround schreiben? –

Verwandte Themen