Я решил переписать старый сайт, который сделал несколько лет назад, и использовать систему шаблонов. Я решил использовать Latte, поскольку он генерирует PHP-файлы, что делает его действительно быстрым по сравнению с системами, которые каждый раз анализируют tpl. Но я не смог выяснить, как вызвать функцию с помощью latte и получить ее результат.
Я привык к нашей системе TPL нашей компании, которая может вызывать любую функцию и даже передавать ей параметры, просто вызывая {function_name.param}
или используйте константы функции с {function::param}
,
Возможно ли что-то подобное исключительно в Latte (я не использую Nette или любой другой фреймворк)? Я не хочу вызывать каждую функцию в PHP и добавлять ее в массив параметров, которыми располагает TPL. Это только делает его медленнее (да, я знаю, что мог бы использовать ifs там и тогда ifs в TPL, но это также бесполезное дублирование кода).
Я хочу, чтобы он мог вызывать функцию внутри класса, которая рендерит TPL (или его родительские классы OFC), и возвращать свой вывод, когда мне это нужно (если мне это даже нужно), поэтому я могу избежать ненужных вызовов функций при инициализации параметры для разбора TPL.
Я много пытался гуглить, но ничего полезного не нашел.
Я также должен отметить, что я не собираюсь использовать какие-либо фреймворки вообще, кроме Latte с Tracy и Tester для автоматического тестирования. Я не хочу использовать Nette, Symfony 2 и т. Д., Так как сайт не такой большой, а использование целого фреймворка сделает его еще более сложным, чем нужно.
Благодарю.
.
Ps .: Может ли кто-нибудь создать тег для латте?
Вы можете просто вызвать любую функцию php следующим образом:
{? echo 'hello'}
или в более новых версиях Latte:
{php echo 'hello'}
Также вы можете передавать экземпляры Nette \ Utils\ Html (небольшая библиотека, отделенная от фреймворка, полная отличных инструментов даже для небольших приложений), которая будет отображаться напрямую.
Или, если вы хотите использовать собственный вывод визуализации класса, просто реализуйте __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>
Попробуйте использовать что-то вроде этого, его так же, как с Javascript
{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression
Не уверен, что ваш TPL справится с этим, но вы увидите
Если это сработает, вы можете использовать больше воображения и использовать что-то вроде
{
some fluffy code
}