我决定重写我几年前制作的一个旧网站,并使用模板系统。我决定使用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等,因为站点不是那么大,使用整个框架只会使它比需要的更复杂。
谢谢。
。
附言:有人能为拿铁创建标签吗?
发布于 2016-08-30 18:27:38
你可以这样简单地调用任何php函数:
{? echo 'hello'}或者在更新版本的Latte中:
{php echo 'hello'}此外,你还可以传递Nette\Utils\Html的实例(从框架中分离出来的小型库,甚至对于小应用程序来说都充满了很棒的工具),它们将被直接呈现。
或者,如果您想直接使用自己的类渲染输出,只需使用IHtmlString接口实现__toString()函数:
class MyOwnClassRenderableByLatte implements \Latte\Runtime\IHtmlString
{
function __toString()
{
return 'Hi';
}
}模板示例,包括您后面的问题:
{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>发布于 2016-08-26 16:52:34
尝试使用类似下面的代码,它与javascript相同。
{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression不确定您的TPL是否能处理它,但您将看到
如果它可以工作,你可以使用更多的想象力,并使用类似于
{
some fluffy code
}https://stackoverflow.com/questions/39152118
复制相似问题