Latte - 在 TPL 中调用函数(最好使用参数)而不是变量

Latte - call function in TPL (ideally with parameter) instead of variable

我决定重写我多年前制作的一个旧网站并使用模板系统。我决定使用 Latte,因为它会生成 PHP 文件,与每次都解析 tpl 的系统相比,它确实非常快。但我无法弄清楚,如何用 latte 调用一个函数并得到它的结果。

我已经习惯了我们的定制公司 TPL 系统,它可以调用任何函数,甚至可以通过调用 {function_name.param} 或使用带有 {function::param} 的函数常量来传递参数给它。

在 Latte 中完全可以实现这样的功能吗(我没有使用 Nette 或任何其他框架)?我不想调用 PHP 中的每个函数并将其添加到 TPL 必须处理的参数数组中。这只会让它变慢(是的,我知道我可以在那里使用 ifs,然后在 TPL 中使用 ifs,但这也是无用的代码重复)。

我希望它能够在 class 中调用一个函数来渲染 TPL(或其父 classes OFC)并在我需要时 return 它的输出(如果我什至需要它),这样我就可以在初始化 TPL 解析参数时避免不必要的函数调用。

我尝试 google 很多次,但没有发现任何有用的东西。

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

谢谢。

.

Ps.: 有人可以为 Latte 创建标签吗?

尝试使用类似这样的东西,它与 javascript

相同
{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression

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

如果可行,你可以发挥更多的想象力,使用类似的东西

{
some fluffy code
}

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

{? echo 'hello'}

或较新版本的 Latte:

{php echo 'hello'}

此外,您还可以传递 Nette\Utils\Html 的实例(与框架分离的小库,即使对于小型应用程序也有很多很棒的工具)将被直接渲染。

或者如果您想直接使用自己的 class 渲染输出,只需使用 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>