我的代码如下:

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}

在smarty的早期版本中,此代码将打印模板名称和文件路径:content.tpl

但是,我刚刚升级到3.1.29,现在看来,它就是要打印的基本文件PageContentLayout.tpl的名称。

我假设这是Smarty不同版本中的蓄意设计更改,但是我找不到有关这些更改的任何文档。

我真正想知道的是,实现前一种功能的最佳方法是什么?

==编辑==

我注意到,即使从扩展文件中调用{$smarty.current_dir},我们仍然会获得基本文件的路径和文件名。与以前的版本相比,这是一个相当大的变化,对于我而言,这是相当严重的,因为我无法再编写动态代码来查找顶级文件的路径。

最佳答案

这可能是smarty最新更改的结果

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.

这确实解决了所有已知的现有限制(请参阅下文)。

来自聪明的开发者:

版本<3.1.28确实缓存了所有模板对象,以提高性能,以便在多次调用子模板的情况下重新使用它们。但是,这浪费了内存。
3.1.28针对大小和速度进行了优化,并且内部模板对象的处理方式完全不同。$smarty->template_objects已删除。

启用调试后,可以在$smarty->_debug->template_data数组中找到一些信息,例如模板文件路径。

继承发行说明:https://github.com/smarty-php/smarty/blob/master/INHERITANCE_RELEASE_NOTES.txt

新功能:https://github.com/smarty-php/smarty/blob/master/NEW_FEATURES.txt

您可以检查$smarty.template_object是否没有所需的数据。

关于php - 从扩展模板调用时的$ smarty.current_dir值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35559402/

10-11 12:37