Приветствую.
Продолжим начатый ранее обзор возможностей Action-хэлпера ContextSwitch. В этот раз мы будем совершенствовать нашу работу с AJAX, а точнее с AJAH.

Что же такое AJAH? Приведу небольшую цитату из статьи jQuery – JavaScript нового поколения с сайта RSDN

  • AJAX – Asynchronous JavaScript and XML, асинхронный Javascript и XML. В ответ на запрос с клиента сервер отвечает правильно сфоримированным XML-документом.
  • AJAH – Asynchronous JavaScript and HTML, асинхронный Javascript и HTML. В ответ на запрос с клиента сервер отвечает уже сгенерированным HTML-документом или его частью.
  • AHAH – Asynchronous HTML and HTTP, асинхронный HTML и HTTP. То же самое, что и AJAH.
  • AJAJ – JavaScript and JSON, асинхронный Javascript и JSON. В ответ на запрос с клиента сервер отвечает правильной записью объекта Javascript в формате JSON (http://json.org).

Выбор варианта ответа зависит от ситуации. Например, AJAX или AJAJ удобен в случае, когда возвращается относительно немного данных, и мы можем без осложнений обработать их при помощи JavaScript.
Но бывают ситуации, когда нам необходимо без перезагрузки страницы обновить целый блок данных, например, комментарии. Разумеется, можно и здесь получать структурированные данные, после чего генерировать HTML-код при помощи JavaScript, но это не лучший вариант по следующим причинам:

  • Сложность реализации. Меньше кода — меньше ошибок. Здесь же нам придётся написать немало кода для генерации HTML.
  • Сложность стилизации. Мы, программисты, должны заботиться о верстальщиках, что придут после нас. Каждый должен заниматься своим делом. Верстальщик – верстать, программист – программировать. Не будем интегрировать HTML-код в скрипты, иначе нас верстать и заставят :)

Итак, перед нами стоит следующая задача – реализовать серверную часть AJAH. По вышеназванным причинам нам не подходит хэлпер AjaxContext (хотя ознакомиться с его возможностями было бы полезно).

При помощи следующего кода мы добавляем новый контекст:

1
2
3
4
5
6
7
8
9
10
11
12
13
public function init()
{
    $this->_helper->contextSwitch
        ->addContext(
            'ajah',
            array(
                'suffix' => 'ajah',
                'headers' => array('Content-type' => 'text/html')
            )
        )
        ->addActionContext('get-nodes', 'ajah')
       ->initContext();
}

Если вам непонятно, что делает этот код, вам следует прежде изучить первую часть руководства.
Таким нехитрым способом мы добавляем контекст с именем “ajah”, который будет запрашивать скрипт вида с именем “%actionname%.ajah.phtml”. В нашем случае мы добавляем этот конекст к действию getNodexAction(), поэтому скрипт вида должен носить имя get-nodes.ajah.phtml.
Остаётся только добавить, что Zend_Layout будет отключен автоматически, и метод выведет только содержимое скрипта вида.
Вопросы задавайте в комментариях.
Спасибо за внимание, всего доброго.

Leave a Reply