воскресенье, 20 марта 2011 г.

CS-Cart Контроллеры. Часть 1.

И так что такое контроллер и с чем его едят?

В CS-Cart контроллер является основой для навигации, коллекции информации и презентации этой информации. Пока не сильно понятно что такое контроллер?

Например домашняя страница управляется с помощью index контроллера. Это специальный контроллер и он никак не обрабатывается, хотя может, как и любой другой контроллер. Всё что связано с продуктами обрабатывается с помощью product контроллера. На самом деле по названию контроллера можно понять за что он отвечает. Также контроллеры работают на разные области сайта: администраторскую панель и клиентскую часть (фронт-энд).
Контроллеры работающие в админке находятся в папке:
/controllers/admin
Контроллеры работающие в фронт-энде находятся в папке:
/controllers/customer

Каждый контроллер имеет свои свойства, которые мы передаём при помощи ссылки, а именно параметра dispatch в ссылке.
Например ссылка:
http://example.com/index.php?dispatch=pages
вызовет контроллер под названием pages, который находится здесь:
/controllers/customer/pages.php

По поводу свойств. Свойства передаются контроллеру с помощью специального разделителя "." (точки). Приведём пример. Ссылка
http://example.com/index.php?dispatch=pages.view.xml.5
вызывет контроллер pages с такими свойствами:
$mode == 'view';
$action == 'xml';
$dispatch_extra == '5';

Иногда удобнее просто использовать $_REQUEST массив. Живой пример:
http://example.com/index.php?dispatch=pages.view&page_id=5
Отобразит страницу, где page_id равен 5.

И так давайте теперь заглянем в простой контроллер, например pages во фронт-энде.
Открываем
/controllers/customer/pages.php

if ($mode == 'view') {
Проверяем какой $mode задан. Как вы видите в данном контроллере это единственный вариант $mode.
$_REQUEST['page_id'] = empty($_REQUEST['page_id']) ? 0 : $_REQUEST['page_id'];
Просто удостоверимся что $_REQUEST['page_id'] задан.
$preview = ($auth['area'] == 'A' && !empty($_REQUEST['action']) && $_REQUEST['action'] == 'preview') ? true : false;
Эта проверка сделана для того, чтобы мы могли просматривать отключенные в админке страницы.
$page = fn_get_page_data($_REQUEST['page_id'], CART_LANGUAGE, $preview);
Записываем в переменную $page данные о странице. Константа CART_LANGUAGE содержит в себе язык, на котором просматривается страница.

if (empty($page) || ($page['status'] == 'D' && !$preview)) {
 return array(CONTROLLER_STATUS_NO_PAGE);
}
Если страница отключена то вызываем 404 страницу. Контроллеру всегда нужно возвращать статус, но мы поговорим об этом попозже.
Дальше задаем meta информацию для страницы, название страницы и breadcrumbs.

С помощью переменной $view задаем отображением. Тем кто знаком со Smarty будет все понятно. Автор статьи утверждает что лучше использовать Registry::get('view')->, нежели $view, т.к. $view не всегда доступен.

Дальше CS-Cart будет искать нужный нам шаблон (.tpl файл). Он называется также как и $mode.
Например если вы используете тему Super и заходите на страницу:
http://example.com/index.php?dispatch=pages.view&page_id=5
то CS-Cart использует .tpl файл:
/skins/super/customer/views/pages/view.tpl

Если этот файл не будет найден, будет вызвана страница 404.

Какие выводы можно сделать в конце статьи?
С помощью ссылки мы указываем какому контроллеру сработать и как этот контроллер будет себя вести.
$mode важен тем, что он называется также как и .tpl файл.

Конец первой части.
Оригинал статьи можно найти здесь.

Комментариев нет:

Отправить комментарий