Введение в 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

    32.2. Импортирование лент с помощью Zend_Feed

    Zend_Feed позволяет легко получать ленты. Если вам известен URI ленты, то просто используйте метод Zend_Feed::import():

    $feed Zend_Feed::import('http://feeds.example.com/feedName');

    Еще вы можете использовать Zend_Feed для извлечения содержимого ленты из файла или строки:

    // импортирование ленты из текстового файла
    $feedFromFile Zend_Feed::importFile('feed.xml');

    // импортирование ленты из строки
    $feedFromPHP Zend_Feed::importString($feedString);

    В примерах выше в случае успеха возвращается объект одного из классов, расширяющих Zend_Feed_Abstract, в зависимости от типа ленты. Если посредством одного из вышеприведенных методов для импортирования была извлечена лента RSS, то будет возвращен объект Zend_Feed_Rss. Если же импортируется лента Atom, то будет возвращен объект Zend_Feed_Atom. Эти методы для импортирования будут бросать исключение Zend_Feed_Exception в случае ошибки, такой, как недоступная для чтения или плохо сформированная лента.

    32.2.1. Создание собственных лент

    Zend_Feed позволяет разработчикам легко создавать собственные ленты. Вам нужно просто создать массив и импортировать его в Zend_Feed. Импорт из массива может быть выполнен с помощью методов Zend_Feed::importArray() или Zend_Feed::importBuilder(). В последнем методе массив будет сформирован на лету с помощью специального источника данных, реализующего интерфейс Zend_Feed_Builder_Interface.

    32.2.1.1. Импортирование массива

    // Импортирование ленты из массива
    $atomFeedFromArray Zend_Feed::importArray($array);

    // Следующая строка эквивалентна предыдущей
    // По умолчанию возвращается экземпляр Zend_Feed_Atom
    $atomFeedFromArray Zend_Feed::importArray($array'atom');

    // Импортирование ленты RSS из массива
    $rssFeedFromArray Zend_Feed::importArray($array'rss');

    Формат массива должен соответствовать следующей структуре:

    array(
          
    'title'       => 'заголовок ленты'// обязательный
          
    'link'        => 'канонический URL ленты'// обязательный
          
    'lastUpdate'  => 'время обновления'// опциональный
          
    'published'   => 'время публикации'// опциональный
          
    'charset'     => 'кодировка для текстовых данных'// обязательный
          
    'description' => 'краткое описание ленты'// опциональный
          
    'author'      => 'автор/издатель ленты'// опциональный
          
    'email'       => 'e-mail автора'// опциональный
          
    'webmaster'   =>     // опциональный, игнорируется, если используется Atom
                           
    'e-mail лица, отвечающего за технические вопросы'
          'copyright'   
    => 'авторские права'// опциональный
          
    'image'       => 'URL к изображению'// опциональный
          
    'generator'   => 'генератор'// опциональный
          
    'language'    => 'язык, на котором выпускается лента'// опциональный
          
    'ttl'         =>     // опциональный, игнорируется, если используется Atom
                           
    'сколько минут лента может храниться в кэше ' .
                           
    'до обновления',
          
    'rating'      =>     // опциональный, игнорируется, если используется Atom
                           
    'рейтинг PICS',
          
    'cloud'       => array(
                                 
    'domain'            => 'домен, пример: rpc.sys.com'// обязательный
                                 
    'port'              => 'порт'// опциональный, по умолчанию 80
                                 
    'path'              => 'путь, пример: /RPC2'// обязательный
                                 
    'registerProcedure' => 'процедура для вызова, пример: myCloud.rssPleaseNotify'// обязательный
                                 
    'protocol'          => 'используемый протокол, например, soap или xml-rpc' // обязательный
                                 
    ), // веб-сервис, поддерживающий интерфейс
                                    // rssCloud, отвечающий за уведомления об изменениях в канале
                                    // опциональный, игнорируется, если используется Atom
          
    'textInput'   => array(
                                 
    'title'       => 'надпись для кнопки отправки'// обязательный
                                 
    'description' => 'пояснение к текстовому полю'// обязательный
                                 
    'name'        => 'атрибут name для текстового поля'// обязательный
                                 
    'link'        => 'URL скрипта, которому будет отправлены данные' // обязательный
                                 
    ), // текстовое поле для ввода, которое может отображаться в ленте
                                    // опциональный, игнорируется, если используется Atom
          
    'skipHours'   => array(
                                 
    'часы в формате 24'
                                 
    // может содержать до 24 элементов, значения которых должны
                                 // находиться в диапазоне 0..23
                                 
    ), // Указывает аггрегатору, в какие часы он может не обновлять канал
                                    // опциональный, игнорируется, если используется Atom
          
    'skipDays '   => array(
                                 
    'пропускаемые дни недели'
                                 
    // может содержать до 7 элементов, значениями которых должны быть
                                 // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday или Sunday
                                 
    ), // Указывает аггрегатору, в какие дни недели он может не обновлять канал
                                    // опциональный, игнорируется, если используется Atom
          
    'itunes'      => array(
                                 
    'author'       => 'автор'// опциональный, по умолчанию используется элемент из channel
                                 
    'owner'        => array(
                                                         
    'name' => 'имя владельца'// опциональный, по умолчанию используется элемент из channel
                                                         
    'email' => 'e-mail владельца' // опциональный, по умолчанию используется элемент из channel
                                                         
    // владелец подкаста // опциональный
                                 
    'image'        => 'изображение для альбома/подкаста'// опциональный, по умолчанию используется элемент из channel
                                 
    'subtitle'     => 'краткое описание'// опциональный, по умолчанию используется элемент из channel
                                 
    'summary'      => 'полное описание'// опциональный, по умолчанию используется элемент из channel
                                 
    'block'        => 'блокирует показ (yes|no)'// опциональный
                                 
    'category'     => array(
                                                         array(
    'main' => 'основная категория'// обязательный
                                                               
    'sub'  => 'подкатегория' // опциональный
                                                               
    ),
                                                         
    // до 3-х элементов с парами категория/подкатегория
                                                         
    // 'категории для навигации' // обязательный
                                 
    'explicit'     => 'индикатор наличия материалов откровенного содержания (yes|no|clean)'// опциональный
                                 
    'keywords'     => 'список из ключевых слов, разделенных запятой (до 12 слов)'// опциональный
                                 
    'new-feed-url' => 'используется для того, чтобы сообщить iTunes о новом URL ленты' // опциональный
                                 
    // данные для iTunes // опциональный, игнорируется, если используется Atom
          
    'entries'     => array(
                                 array(
                                       
    'title'        => 'заголовок сообщения'// обязательный
                                       
    'link'         => 'URL сообщения'// обязательный
                                       
    'description'  => 'краткое описание'// только текст без HTML, обязательный
                                       
    'guid'         => 'идентификатор сообщения, если не передан, то используется URL сообщения'// опциональный
                                       
    'content'      => 'содержание сообщения'// может содержать HTML, опциональный
                                       
    'lastUpdate'   => 'дата публикации'// опциональный
                                       
    'comments'     => 'страница для комментариев к сообщению'// опциональный
                                       
    'commentRss'   => 'URL ленты для комментариев, относящихся к сообщению'// опциональный
                                       
    'source'       => array(
                                                               
    'title' => 'заголовок оригинального источника'// обязательный
                                                               
    'url' => 'URL оригинального источника'// обязательный
                                                               
    ), // оригинальный источник сообщения // опциональный
                                       
    'category'     => array(
                                                               array(
                                                                     
    'term' => 'имя категории'// обязательный
                                                                     
    'scheme' => 'URL ресурса с классификацией' // опциональный
                                                                     
    ),
                                                               array(
                                                                     
    // данные второй категории и т.д.
                                                                     
    )
                                                               ), 
    // список прикрепленных категорий // опциональный
                                       
    'enclosure'    => array(
                                                               array(
                                                                     
    'url' => 'URL вложения'// обязательный
                                                                     
    'type' => 'тип MIME вложения'// опциональный
                                                                     
    'length' => 'размер вложения в октетах' // опциональный
                                                                     
    ),
                                                               array(
                                                                     
    // данные для второго вложения и т.д.
                                                                     
    )
                                                               ) 
    // список вложений для сообщения // опциональный
                                       
    ),
                                 array(
                                       
    // данные второго сообщения и т.д.
                                       
    )
                                 )
           );

    Информационные ресурсы:

    32.2.1.2. Импортирование из специального источника данных

    Вы можете создать экземпляр Zeed_Feed из любого источника данных, реализующего интерфейс Zend_Feed_Builder_Interface. Вам нужно только реализовать методы getHeader() и getEntries() для того, чтобы можно было использовать свой объект с Zend_Feed::importBuilder(). Простой пример - вы можете использовать компоновщик Zend_Feed_Builder, который принимает массив в своем конструкторе, выполняет некоторую проверку и затем может использоваться в методе importBuilder(). getEntries() должен возвращать массив экземпляров Zend_Feed_Builder_Entry.

    [Замечание] Замечание

    Zend_Feed_Builder служит только в качестве конкретной реализации для демонстрации использования. Пользователи должны создавать свои классы, реализующие интерфейс Zend_Feed_Builder_Interface.

    Ниже приведен пример использования Zend_Feed::importBuilder():

    // Импортирование ленты из специального созданного ресурса-компоновщика
    $atomFeedFromArray =
        
    Zend_Feed::importBuilder(new Zend_Feed_Builder($array));

    // Следующая строка эквивалентна предыдущей.
    // По умолчанию возвращается экземпляр Zend_Feed_Atom
    $atomFeedFromArray =
        
    Zend_Feed::importArray(new Zend_Feed_Builder($array), 'atom');

    // Импортирование RSS-ленты из специально созданного ресурса-компоновщика
    $rssFeedFromArray =
        
    Zend_Feed::importArray(new Zend_Feed_Builder($array), 'rss');

    32.2.1.3. Дапм содержимого ленты

    Для того, чтобы произвести дамп экземпляра Zend_Feed_Abstract, вы можете использовать методы send() или saveXml().


    assert
    ($feed instanceof Zend_Feed_Abstract);

    // вывод дампа ленты
    print $feed->saveXML();

    // отправка HTTP-заголовков и вывод дампа ленты
    $feed->send();
    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...