Базовый класс — waController.
См. правила маршрутизации HTTP-запросов в бекенде и во фронтенде.
Класс waViewAction предназначен для формирования фрагмента HTML-кода, который можно либо вернуть в браузер пользователя в ответ на HTTP-запрос либо использовать для любых других целей. Контроллеры, созданные на базе класса waViewAction, называют экшенами.
Основная логика обработки HTTP-запроса должна быть описана в публичном методе execute().
HTML-файлы экшенов
Для каждого PHP-класса контроллера, унаследованного от waViewAction (кроме случаев использования метода setTemplate), необходимо создать файл HTML-шаблона, размещенного в директории templates/actions/. Файлы HTML-шаблонов обязательно должны быть распределены по поддиректориям, названным по имени модуля: templates/actions/backend/, templates/actions/settings/.
Имя HTML-файла
Имя файла с HTML-шаблоном экшена должно быть сформировано по правилу [Module_id][Action_id].html. Примеры: Backend.html (шаблон для экшена по умолчанию — default — модуля backend), BackendPage.html, SettingsSection.html.
Использование экшенов
Экшены могут использоваться несколькими способами, как показано ниже.
Способ 1. Отправка фрагмента HTML-кода в ответ на HTTP-запрос
Для того чтобы экшен обрабатывал нужные вам HTTP-запросов, необходимо отнести его к соответствующему модулю и, при использовании во фронтенде, настроить маршрутизацию (подробнее о маршрутизации запросов).
Для получения содержимого HTTP-запроса в PHP-классе экшена следует использовать методы класса waRequest. Пример:
$page_id = waRequest::post('id', null, waRequest::TYPE_INT);
Для передачи значений в HTML-шаблон необходимо использовать экземпляр класса шаблонизатора (по умолчанию это Smarty 3), доступный через поле $view PHP-класса экшена. Пример:
$this->view->assign('customer', $customer_data);
Никаких дополнительных действий для отправки HTML-кода в браузер пользователя предпринимать не нужно — это будет сделано автоматически.
Способ 2. Возврат фрагмента HTML-кода
Экшен можно также использовать только для формирования фрагмента HTML — без обязательной отправки его в браузер пользователя. Для этого нужно:
- Создать экземпляр класса экшена, при необходимости передав в его конструктор массив дополнительных параметров.
- Вызвать метод
display()экшена для получения сформированного HTML-кода.
Полученный HTML-код можно использовать произвольным образом.
Пример:
$page_action = new myappPageAction([
'id' => $page_id
]);
$page_html = $page_action->display();
Сокращенный вариант этого же кода — с использованием функции wao:
$page_html = wao(new myappPageAction([
'id' => $page_id
]))->display();
Методы
-
display
Возвращает HTML-код, сформированный экшеном.
-
getLayout
Возвращает экземпляр класса макета (
waLayout), используемого экшеном. -
getTemplate
Возвращает путь к файлу HTML-шаблона, используемому экшеном в данный момент.
-
getTheme
Возвращает экземпляр класса
waTheme, содержащего информацию о текущей теме дизайна фронтенда. -
getThemeUrl
Возвращает URL директории с файлами темы дизайна, используемой во фронтенде.
-
setLayout
Устанавливает текущий макет (
waLayout). -
setTemplate
Устанавливает путь к альтернативному HTML-шаблону.
-
setThemeTemplate
Устанавливает HTML-шаблон темы дизайна для экшена фронтенда.
public function display ($clear_assign = true)
Возвращает HTML-код, сформированный экшеном.
Параметры
-
$clear_assign
Флаг, обозначающий необходимость очистки значений всех переменных, переданных в HTML-шаблон, после выполнения метода.
Пример
$page_action = new myappPageAction([
'id' => $page_id
]);
$page_html = $page_action->display();
public function getLayout ()
Возвращает экземпляр класса макета (waLayout), используемого экшеном.
Пример
$layout = $this->getLayout();
protected function getTemplate ()
Возвращает путь к файлу HTML-шаблона, используемому экшеном в данный момент.
Пример
$current_template = $this->getTemplate();
public function getTheme ()
Возвращает экземпляр класса waTheme, содержащего информацию о текущей теме дизайна фронтенда.
Пример
$theme = $this->getTheme();
protected function getThemeUrl ()
Возвращает URL директории с файлами темы дизайна, используемой во фронтенде.
Пример
$theme_dir_url = $this->getThemeUrl();
public function setLayout (waLayout $layout = null)
Устанавливает текущий макет (waLayout).
Параметры
-
$layout
Экземпляр класса
waLayout, который следует использовать для формирования макета страницы, где используется данный экшен.
Пример
$this->setLayout(new myappBackendLayout());
public function setTemplate ($template)
Устанавливает путь к альтернативному HTML-шаблону. При использовании этого метода экшен может не иметь HTML-шаблона, размещенного и именованного в строгом соответствии с описанными выше правилами.
Параметры
-
$template
Путь к файлу шаблона, который можно указать разными способами:
- полный абсолютный путь к файлу,
- имя HTML-файла без расширения; в этом случае предполагается, что указано имя файла существующего HTML-шаблона данного приложения либо плагина, размещенного и именованного в соответствии с описанными выше правилами.
Примеры
//для приложения
$this->setTemplate('BackendOrder');
$this->setTemplate(wa()->getAppPath('templates/actions/backend/BackendOrder'), 'myapp');
//для плагина
$this->setTemplate('BackendOrder');
$this->setTemplate(wa()->getAppPath('plugins/myplugin/templates/actions/backend/BackendOrder'), 'myapp');
protected function setThemeTemplate ($template)
Устанавливает HTML-шаблон темы дизайна для экшена фронтенда.
Параметры
-
$template
Имя HTML-файла темы дизайна.
Пример
$this->setThemeTemplate('page.html');









