Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    Глава 77. Zend_View

    Содержание

    77.1. Введение
    77.1.1. Скрипт контроллера
    77.1.2. Скрипт вида
    77.1.3. Опции
    77.1.4. Короткие теги в скриптах вида
    77.1.5. Вспомогательные аксессоры
    77.2. Скрипты контроллеров
    77.2.1. Установка переменных
    77.2.2. Выполнение скрипта вида
    77.2.3. Пути к скриптам вида
    77.3. Скрипты видов
    77.3.1. Экранирование вывода
    77.3.2. Использование других шаблонизаторов
    77.3.2.1. Шаблонизаторы c использованием скриптов видов
    77.3.2.2. Шаблонизаторы с использованием Zend_View_Interface
    77.4. Помощники видов
    77.4.1. Начальный набор помощников
    77.4.1.1. Помощник Action
    77.4.1.2. Cycle Helper
    77.4.1.3. Partial Helper
    77.4.1.4. Placeholder Helper
    77.4.1.4.1. Concrete Placeholder Implementations
    77.4.1.5. Помощник Doctype
    77.4.1.6. Помощник HeadLink
    77.4.1.7. Помощник HeadMeta
    77.4.1.8. Помощник HeadScript Helper
    77.4.1.9. HeadStyle Helper
    77.4.1.10. HeadTitle Helper
    77.4.1.11. HTML Object Helpers
    77.4.1.12. InlineScript Helper
    77.4.1.13. JSON Helper
    77.4.1.14. Navigation Helpers
    77.4.1.14.1. Translation of labels and titles
    77.4.1.14.2. Integration with ACL
    77.4.1.14.3. Navigation setup used in examples
    77.4.1.14.4. Breadcrumbs Helper
    77.4.1.14.5. Links Helper
    77.4.1.14.6. Menu Helper
    77.4.1.14.7. Sitemap Helper
    77.4.1.14.8. Navigation Helper
    77.4.1.15. Translate Helper
    77.4.2. Пути к классам помощников
    77.4.3. Написание собственных помощников
    77.5. Zend_View_Abstract

    77.1. Введение

    Zend_View является классом для работы с частью вид (view) паттерна модель-вид-контроллер (model-view-controller). То есть он предназначен для того, чтобы помочь отделить скрипты видов от скриптов моделей и контроллеров. Он предоставляет систему помощников, фильтрации вывода и экранирования переменных.

    Zend_View не зависит от выбранной вами системы шаблонов - вы можете использовать PHP в качестве языка шаблонов или создавать экземпляры других систем шаблонов и работать с ними в ваших скриптах вида.

    По существу применение Zend_View состоит из двух шагов: 1. Ваш скрипт контроллера создает экземпляр Zend_View и объявляет переменные этого экземпляра. 2. Контроллер приказывает Zend_View воспроизвести данный вид, посредством этого производится контроль за скриптом вида, который генерирует выходные данные вида.

    77.1.1. Скрипт контроллера

    В качестве простого примера предположим, что ваш контроллер имеет список данных по книгам, который нужно воспроизвести через вид. Скрипт контроллера может выглядеть наподобие этого:

    // использование модели для получения данных о заголовках и авторах книг
    $data = array(
        array(
            
    'author' => 'Hernando de Soto',
            
    'title' => 'The Mystery of Capitalism'
        
    ),
        array(
            
    'author' => 'Henry Hazlitt',
            
    'title' => 'Economics in One Lesson'
        
    ),
        array(
            
    'author' => 'Milton Friedman',
            
    'title' => 'Free to Choose'
        
    )
    );

    // теперь присваиваем данные по книгам экземпляру Zend_View
    Zend_Loader::loadClass('Zend_View');
    $view = new Zend_View();
    $view->books $data;

    // и выполняем скрипт вида "booklist.php"
    echo $view->render('booklist.php');

    77.1.2. Скрипт вида

    Теперь нам нужен сопутствующий скрипт вида "booklist.php". Это такой же скрипт PHP, как и остальные, за одним исключением: он выполняется в области видимости экземпляра Zend_View, это означает, что $this ссылается на экземпляр Zend_View. Переменные, присваиваемые в контроллере для скрипта вида, являются открытыми свойствами экземпляра Zend_View. Таким образом, базовый скрипт вида может выглядеть следующим образом:

    <?php if ($this->books): ?>

        <!-- Таблица из нескольких книг. -->
        <table>
            <tr>
                <th>Author</th>
                <th>Title</th>
            </tr>

            <?php foreach ($this->books as $key => $val): ?>
            <tr>
                <td><?php echo $this->escape($val['author']) ?></td>
                <td><?php echo $this->escape($val['title']) ?></td>
            </tr>
            <?php endforeach; ?>

        </table>

    <?php else: ?>

        <p>Нет книг для отображения.</p>

    <?php endif; ?>

    Обратите внимание, что мы используем метод escape() для экранирования переменных.

    77.1.3. Опции

    Zend_View имеет несколько опций, которые могут использоваться для управления поведением ваших скриптов вида:

    • basePath - базовый путь, начиная от которого устанавливаются пути скриптов, помощников и фильтров. Предполагается, что используется следующая структура директорий:

      base/path/
          
      helpers/
          
      filters/
          
      scripts/

      Эта опция может быть установлена через методы setBasePath(), addBasePath() или опцию basePath для конструктора.

    • encoding - кодировка, которую следует использовать при вызове функций htmlentities(), htmlspecialchars() и др. По умолчанию используется ISO-8859-1 (latin1). Может быть установлена через метод setEncoding() или опцию encoding для конструктора.

    • escape - обратный вызов, который следует использовать для метода escape(). Может быть установлен через метод setEscape() или опцию escape для конструктора.

    • filter - фильтр, который следует использовать после рендеринга скрипта вида. Может быть установлен через методы setFilter(), addFilter(), или опцию filter для конструктора.

    • strictVars - если опция установлена, то Zend_View генерирует уведомления (notices) и предупреждения (warnings), когда производится обращение к неинициализированной переменной. Опция может быть установлена посредством вызова strictVars(true) или передачи опции strictVars конструктору.

    77.1.4. Короткие теги в скриптах вида

    В нашей документации и примерах мы применяем короткие теги PHP: <? and <?=. Кроме того, мы обычно используем альтернативный синтаксис для управляющих структур. Их удобно использовать при написании скриптов вида, они делают конструкции более лаконичными и позволяют размещать операторы без лишних переходов на другую строку.

    Несмотря на это, многие разработчики предпочитают использовать длинную форму записи для обеспечения валидности или переносимости кода. Например, в рекомендуемой конфигурации PHP (файл php.ini.recommended) опция short_open_tag отключена. Также, если вы используете XML в своих скриптах вида, то с короткими открывающими тегами PHP они не будут проходить валидацию.

    Кроме того, если вы используете короткие теги, и опция short_open_tag отключена, то скрипты вида будут либо приводить к ошибкам выполнения, либо просто выводить пользователю код, включенный в эти теги.

    В последнем случае, если вы хотите использовать короткие теги, но они отключены, у вас есть два возможных решения:

    • Включить короткие теги в своем файле .htaccess:

      php_value "short_open_tag" "on"

      Это будет действовать только в том случае, если у вас есть права на создание и использование файлов .htaccess. Эта директива также может быть добавлена в конфигурационный файл httpd.conf.

    • Включить обертку потока (stream wrapper), которая будет на лету преобразовывать короткие теги в полные:

      $view->setUseStreamWrapper(true);

      В этом вызове Zend_View_Stream регистрируется в качестве обертки потока к скриптам вида, благодаря этому код будет работать так же, как если бы короткие теги были были включены.

    [Замечание] Обертка потока для скриптов вида снижает производительность

    Использование обертки потока снижает производительность вашего приложения. Мы рекомендуем включать короткие теги, переписывать свои скрипты вида с тем, чтобы использовалась полная форма записи тегов, либо использовать продуманную стратегию частичного или полного кэширования содержимого страниц.

    77.1.5. Вспомогательные аксессоры

    Скорее всего, вам никогда не понадобится вызывать assign(), render() и другие перечисленные ниже методы для установки/добавления фильтров, помощников, путей к скриптам вида. Тем не менее, если требуется расширить класс Zend_View или нужен доступ к его внутреннему коду, то можно использовать следующие аксессоры:

    • getVars() возвращает все установленные переменные.

    • clearVars() удаляет все присвоенные переменные, полезен, если вы хотите повторно использовать объект вида, но хотите контролировать доступность переменных.

    • getScriptPath($script) возвращает вычисленный путь к данному скрипту вида.

    • getScriptPaths() возвращает все зарегистрированные пути к скриптам вида.

    • getHelperPath($helper) возвращает вычисленный путь к классу помощника, имя которого передается в качестве параметра.

    • getHelperPaths() возвращает все зарегистрированные пути к классам помощников.

    • getFilterPath($filter) возвращает вычисленный путь к классу фильтра, имя которого передается в качестве параметра.

    • getFilterPaths() возвращает все зарегистрированные пути к классам фильтров.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...