Обмен данными между компонентами
Немного остановлюсь на разделении компонентов на типы: prepare – эти
компоненты ничего не выводят на экран, они только подготавливают данные для
других компонентов или общего (главного) шаблона, и view – эти компоненты
обязательно в результате своей работы что-то выводят на экран.
Давайте посмотрим, каким образом компонент prepare может подготовить данные для
компонента view.
<?php
// --- Фрагмент компонента prepare ---
$smarty->assign('prepare_data', $prepare_data);
?>
Из данного фрагмента видно, что компонент prepare создал какой-то набор данных и
ассигнул (assign) его в главный шаблон, присвоив этим данным имя 'prepare_data'.
Теперь давайте взглянем на главный шаблон:
<!-- Фрагмент главного шаблона -->
<!-- Вызываем компонент prepare -->
{component name='prepare'}
<!-- Вызываем компонент view -->
{component name='view' prepare_data=$prepare_data}
Как видно из этого фрагмента, сначала мы вызвали компонент prepare, а затем
компонент view. В качестве параметра передали в view продукт деятельности
компонента prepare.
<?php
// --- Фрагмент компонента view ---
print_r($params['prepare_data']);
?>
В свою очередь, компоненту view эти данные стали доступны посредствам массива $params,
в котором появился новый индекс – prepare_data.
Итоги
Итак, здесь мы с вами рассмотрели несколько необычную роль шаблонизатора Smarty
в разработке приложений: поручили Smarty быть не только удобным шаблонизатором,
но и диспетчером нашего приложения, отдали ему на откуп формирование сайта.
Таким образом, используя эту технологию, вы легко можете менять логику и вид
своего приложения изменяя только его шаблоны для вывода на экран, что позволяет
довольно часто экономить время при разработке как простых, так и сложных
приложений. Также, такой подход позволяет максимально абстрагировать ядро вашего
сайта (классы) от вывода информации на экран, что дает дополнительные
преимущества для создания переносимого кода и позволяет развертывать новые
приложения на базе старых.
Компонентная модель разработки позволяет добиться существенного разграничения
труда программистов, работающих в команде.
На этом все, надеюсь этот материал даст вам повод для новых изысканий и идей.