Базовый класс — 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');