首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Latte -调用TPL中的函数(理想情况下使用参数),而不是变量

Latte -调用TPL中的函数(理想情况下使用参数),而不是变量
EN

Stack Overflow用户
提问于 2016-08-26 02:12:05
回答 2查看 1.6K关注 0票数 1

我决定重写我几年前制作的一个旧网站,并使用模板系统。我决定使用Latte作为生成PHP文件的工具,这使得它比每次解析tpl的系统都要快。但是我不知道如何用latte调用一个函数并得到它的结果。

我习惯了我们公司的TPL系统,它可以调用任何函数,甚至只需通过调用{function_name.param}或在{function::param}中使用函数常量来传递参数。

这样的事情在Latte中是可能的吗(我没有使用Nette或任何其他框架)?我不想在PHP中调用每个函数并将其添加到TPL拥有的参数数组中。这只会使它变慢(是的,我知道我可以在那里使用in,然后在TPL中使用in,但这也是一个无用的代码重复)。

我希望它能够在类中调用呈现TPL的函数(或它的父类OFC),并在需要时返回它的输出(如果我确实需要它的话),这样我就可以在初始化TPL解析的参数时避免不必要的函数调用。

我试着用谷歌搜索了很多次,但是我没有找到任何有用的东西。

我还应该提到的是,我根本不打算使用任何框架,除了用于自动测试的Tracy和Tester的Latte。我不想使用Nette或Symfony 2等,因为站点不是那么大,使用整个框架只会使它比需要的更复杂。

谢谢。

附言:有人能为拿铁创建标签吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-30 18:27:38

你可以这样简单地调用任何php函数:

代码语言:javascript
复制
{? echo 'hello'}

或者在更新版本的Latte中:

代码语言:javascript
复制
{php echo 'hello'}

此外,你还可以传递Nette\Utils\Html的实例(从框架中分离出来的小型库,甚至对于小应用程序来说都充满了很棒的工具),它们将被直接呈现。

或者,如果您想直接使用自己的类渲染输出,只需使用IHtmlString接口实现__toString()函数:

代码语言:javascript
复制
class MyOwnClassRenderableByLatte implements \Latte\Runtime\IHtmlString
{
    function __toString()
    {
        return 'Hi';
    }
}

模板示例,包括您后面的问题:

代码语言:javascript
复制
{php
    // You can instantiate needed classes in one synoptical block
    // in the head of template file or reather instantiate them
    // outside of template and pass them as template variables
    $a = new ClassA();
    $b = new ClassB();
}

<div>{$a->someFunction()}</div>
<div>
    {* Or you can instantiate class inplace this way,
       but I wouldn't recommend it. BTW: This is Latte comment.
    *}
    {php (new ClassC())->otherFunction()}
</div>
票数 2
EN

Stack Overflow用户

发布于 2016-08-26 16:52:34

尝试使用类似下面的代码,它与javascript相同。

代码语言:javascript
复制
{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression

不确定您的TPL是否能处理它,但您将看到

如果它可以工作,你可以使用更多的想象力,并使用类似于

代码语言:javascript
复制
{
some fluffy code
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39152118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档