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(
    array(
        'id' => $page_id
    )
);
$page_html = $page_action->display();

Сокращенный вариант этого же кода — с использованием функции wao:

$page_html = wao(new myappPageAction(
    array(
        'id' => $page_id
    )
))->display();

Методы

public function display ($clear_assign = true)

Возвращает HTML-код, сформированный экшеном.

Параметры

Пример

$page_action = new myappPageAction(
    array(
        '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).

Параметры

Пример

$this->setLayout(new myappBackendLayout());

public function setTemplate ($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-шаблон темы дизайна для экшена фронтенда.

Параметры

Пример

$this->setThemeTemplate('page.html');