Общие классы
Безусловно, в каждом приложении есть набор классов, которые нужны всем, или
большинству компонентов, например, класс для работы с базой. Как поступить в
таком случае? И для этой проблемы в Smarty есть удачное решение. Впрочем,
давайте по порядку.
Сначала инициализируем класс Smarty:
<?php
/** Путь до Smarty */
define('SMARTY_DIR', '/smarty/');
/** Путь до Smarty шаблонов */
define('TEMPLATES', '/templates/');
/** Путь до Smarty компилированных шаблонов */
define('TEMPLATES_C', '/templates_c/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
$smarty->compile_check = TRUE;
$smarty->force_compile = TRUE;
$smarty->template_dir = TEMPLATES;
$smarty->compile_dir = TEMPLATES_C;
$smarty->plugins_dir[] = LIBS_PATH;
$smarty->caching = FALSE;
?>
Итак, Smarty готов к работе. Что необходимо сделать с общими классами, чтобы
обеспечить доступ к ним внутри любого компонента?
Скажем, у нас есть несколько общих компонентов:
1. adodb – класс для работы с базой;
2. session – класс для работы с сессиями;
3. errors – класс для обработки ошибок;
4. variables – класс для хранения и обработки состояния массивов $_GET и $_POST.
Первым делом, нам необходимо создать объекты данных классов (параметры
конструкторов зависят от вашей конкретной реализации). В целом, это делается
стандартным образом:
<?php
require_once(CLASSES_DIR . '/variables.class.php');
$vars = new Variables();
require_once(CLASSES_DIR . '/errors.class.php');
$errors = new Errors($smarty);
require_once(CLASSES_DIR . '/security.class.php');
$security = new Security($adodb);
// и так далее...
?>
Объекты созданы и теперь необходимо обеспечить доступ к ним в любом компоненте
нашего приложения.
Для этого необходимо зарегистрировать данные объекты в Smarty:
<?php
$smarty->register_object('adodb', $adodb);
$smarty->register_object('vars', $vars);
$smarty->register_object('errors', $errors);
$sma
rty->register_object('security', $security);
?>
Для регистрации объектов мы используем метод Smarty register_object(). После
чего ваш объект станет доступным везде, где он может понадобиться. Как «достать»
нужный вам зарегистрированный объект мы рассмотрим в следующей части.