我决定改写几年前制作的旧网站并使用模板系统。我决定使用Latte作为生成PHP文件,与每次解析tpl的系统相比,它真的很快。但是我无法弄明白,如何用latte调用函数并得到它的结果。
我习惯于我们的自定义公司TPL系统,它可以调用任何函数,甚至可以通过调用{function_name.param}
或使用函数常量{function::param}
来传递参数。
像这样的东西可能纯粹在Latte(我不使用Nette或任何其他框架)吗?我不想在PHP中调用每个函数,并将其添加到TPL必须处理的参数数组中。这只会让它变慢(是的,我知道我可以在那里使用ifs然后在TPL中使用ifs,但这也是一个无用的代码重复)。
我希望它能够在类中调用一个呈现TPL(或其父类OFC)的函数,并在需要时返回它的输出(如果我甚至需要它),所以我可以避免不必要的调用初始化TPL解析参数时的函数。
我试着谷歌很多,但我找不到任何有用的东西。
我还应该提一下,我根本不会使用任何框架,除了带有Tracy和Tester的Latte进行自动测试。我不想使用Nette或Symfony 2等,因为网站不是那么大,使用整个框架只会使它变得比它需要的更复杂。
感谢。
Ps。:有人可以为Latte创建标签吗?
答案 0 :(得分:2)
你可以这样简单地调用任何php函数:
{? echo 'hello'}
或更新版本的Latte:
{php echo 'hello'}
此外,您可以传递Nette\Utils \ Html的实例(与框架分离的小型lib,甚至是小型应用程序的完整工具),这些实例将直接呈现。
或者如果您想直接使用自己的类呈现输出,只需使用__toString()
接口实现IHtmlString
函数:
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>
答案 1 :(得分:0)
尝试使用类似这样的内容,与javascript相同
{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression
不确定您的TPL是否会处理它,但您会看到
如果它可以工作,你可以使用更多的想象力并使用类似
的东西{
some fluffy code
}