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>
我决定重写我多年前制作的一个旧网站并使用模板系统。我决定使用 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>