Разработка сайтов и создание интернет магазинов.

Общие классы

Безусловно, в каждом приложении есть набор классов, которые нужны всем, или большинству компонентов, например, класс для работы с базой. Как поступить в таком случае? И для этой проблемы в 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(). После чего ваш объект станет доступным везде, где он может понадобиться. Как «достать» нужный вам зарегистрированный объект мы рассмотрим в следующей части.