Фон Smarty - это механизм создания шаблонов, который отделяет уровень представления от логического уровня веб-приложений. Он хорошо подходит для подхода модель-представление-управление к разработке веб-приложений. Представление может быть представлено шаблонами Smarty, которые содержат только теги HTML и Smarty. Элемент управления может быть реализован с помощью файлов PHP, которые обслуживают соответствующие представления на основе логики, содержащейся в них, через код PHP. Представление создается путем отображения шаблонов с помощью команды display()
. В качестве альтернативы шаблон можно прочитать как переменную, не отображая его с помощью команды fetch()
. Имя файла шаблона является аргументом обеих этих команд.
Проблема. Команда fetch()
может прочитать весь шаблон. Чтобы читать части / части шаблона, каждая из этих частей обычно должна храниться в отдельном файле с собственным именем, которое может быть аргументом команды. Это создает ненужные файлы.
Вопрос Можно ли получить только части шаблона Smarty, помечая как-то разделы шаблона?
Пример случая Ниже я представляю образец файла шаблона с тегами Smarty и HTML, а также соответствующий файл контроллера с кодом PHP.
Файл шаблона (index.tpl)
<html>
<body>
<div id="sec1">
First section
</div>
<div id="sec2">
Second section
</div>
</body>
</html>
Файл контроллера (index.php)
<?php
$smarty = new Smarty;
$template = $smarty->fetch("index.tpl");
?>
В приведенном выше примере переменная $template
будет содержать полный вывод со страницы шаблона. Ниже дамп его содержимого из примера.
$template => string(255)
"<html><body>
<div id="sec1">First section</div>
<div id="sec2">Second section</div>
</body></html>"
Однако предположим, что я хочу читать код из каждого из контейнеров DIV отдельно и сохранять их в отдельных переменных, как я могу этого добиться? Например, предположим, что у меня есть волшебная функция под названием fetch_sub()
. Вот мои ожидания от его использования.
<?php
$smarty = new Smarty;
$div1 = $smarty->fetch_sub("index.tpl", "sec1");
$div2 = $smarty->fetch_sub("index.tpl", "sec2");
?>
Тогда $div1
и т. Д. Будет содержать только соответствующую часть, а не весь шаблон.
Другая информация Я не новичок в Smarty и довольно хорошо разбираюсь в основных концепциях, а также в некоторых продвинутых концепциях Smarty. Ниже приведены мои попытки концептуализировать проблему и найти решение. Моя первоначальная приблизительная идея - разделить шаблон на разделы с помощью {capture}
, а затем каким-либо ссылаться на каждый из этих разделов. Я представляю схематический пример идеи ниже.
{capture name=sec1}
<div id="sec1">
First section
</div>
{/capture}
. . .