waViewAction

Контроллер (экшен), возвращающий фрагмент HTML-кода

Содержание...

Базовый класс — 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 — без обязательной отправки его в браузер пользователя. Для этого нужно:

  1. Создать экземпляр класса экшена, при необходимости передав в его конструктор массив дополнительных параметров.
  2. Вызвать метод 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');