1. Создайте в папке seophp/include новый файл с именем r s s _ f a c t o r y . i n c . p h p .
Этот файл будет содержать класс генератора RSS. Поместите в него следующий
код:
<?php
class RSSFactory
{
var $_title;
var $_link;
var $_description;
var $_language;
var $_iterns;
// литерализация символов строги для включения в структуру XML
function _escapeXML($str)
<
$translation = get_html_translation_table (HTMLJENTITIES, ENT_QUOTES)
foreach ($translation as $key => $ value)
{
$translation[$key] = '6#' . ord($key) . ';';
}
$translation[chr(38)] = ' S ' ;
return preg_replace("/& (?![A-Za-zA-Яа-я]{0,4}\w{2,3};|#[0-9]{2,3};)/",
"&", strtr($str, $translation));
}
// конструктор класса - выполняется при создании экземпляра этого класса
function RSSFactory($title, $link, $description,
$language = 'ru', $items = array())
{
// сохранение данных канала в локальных членах класса
$this->_title = $title;
$this->_link = $link;
$this->_description = $description;
$this->_language = $language;
$this->_items = $items;
}
// добавление в канал нового элемента
function addltem( $ title, $link, $description, $additional_f ields = array ())
{
// добавление элемента канала
$thi3->_iterns[] =
array_merge(array('title' => $title,
'link' => $link,
'description' => $description),
$additional_fields);
}
// генерация канала
function get()
// подготовка
ob_start();
header('Content-type: text/xml');
// создание заголовка канала
echo '' .
'' .
'' . RSSFactory::_escapeXMX($this->_titie) . ''
'' . RSSFactory::_escapeXML($this->_link) . '' .
1' .
RSSFactory::_escapeXML($this->_description) .
'';
// добавление элементов канала
foreach ($this->_iterns as $feed_item)
{
// добавление элемента канала и его содержимого
echo '' ;
foreach ($feed item as $item name => $item value)
{
// вывод элемента канала
echo "<$item_name>" .
RSSFactory::_escapeXML($item_value)
"";
}
echo '';
}
// закрытие канала и элементов RSS
echo '' ;
// возврат данных канала
return ob_get_clean();
}
}
?>
2. Создайте в папке seophp новый файл с именем feed.php и поместите в него
следующий код:
<?php
// загрузка библиотеки генератора UKL
require_once 'include/rss_factory.inc.php1;
// создание канала
$rss_feed = new RSSFactory('Канал новых продуктов SEOEgghead.com' ,
'http://www.seoegghead.com/seo-with-php-updates.html',
'Замечательные новые продукты, ежедневное обновление') ;
// добавление элемента канала
$rss_feed->addltem('Новый сок из ссылок с ароматом апельсинов! ' ,
'http://seophp.example.com/Products/SE0-Toolbox-C6/Link-Juice-P31.
html
'Новый продукт - сок из ссылок от SEOEgghead.com - преобразит ваш Web-сайт!');
// добавление элемента канала
$rss_f eed->addltem ('Усовершенствуйте свои РНР - приложения с помощью AJAX!' ,
'http://seophp.example.com/Products/Friends-Shed-C2/AJAX-PHP-Book-P4 2.html',
' Прочтите это руководство no AJAX для PHP-разработчиков! ') ;
// вывод канала
echo $rss_feed->get('2.0');
?>
3. Загрузите страницу http: //seophp. example. com/feed. php. Современный Web-
браузер должен спросить, хотите ли вы подписаться на этот канал (рис. 7.2).
4. Щелчок на ссылке Подписаться на этот веб-канал открывает диалоговое окно, в
котором можно выбрать параметры подписки. В Mozilla Firefox этот диалог выглядит так, как показано на рис. 7.3, но его вид зависит от применяемого браузера.
5. После оформления подписки на канал у вас будет быстрый доступ к последним
новостям с помощью вашего приложения чтения каналов.
Вы только что создали класс RSSFactory и быстренько проверили его, для чего
объект RSSFactory ($rss_feed) сгенерировал простой канал в формате RSS
___________________________________________________
Термин кдйссвзят из лексикона объектно-ориентированного программирования (ООП).
На случай, если вы не слишком знакомы с ООП, мы приводим краткое введение, которое поможет разобраться в RSSFactory, а также в других примерах этой книги, в которых используется эта возможность.
Как можно догадаться из названия, в модели ООП все основано на объектах. Объект — наиболее важная концепция в мире ООП — представляет собой изолированную сущность, у которой есть состояние и поведение, как и у объектов реального мира.
Класс выступает в качестве "шаблона" объекта, а объект является экземпляром класса, определенным его состоянием. Можно иметь много объектов, к примеру, для класса Автомобиль и создать столько объектов Автомобиль, сколько требуется — с именами $мойАвтомобиль, $васинАвтомобиль, $петинАвтомобиль и т.д. Но $васинАвтомобиль может проходить техосмотр, в то время как $петинАвтомобиль будет уходить от погони по скоростной трассе, выжимая 180 км/ч.
Ну, вы поняли: класс определяет функциональность, предоставляемую объектами. Все объекты типа Автомобиль буцут иметь одни и те же основные возможности — например, возможность изменять скорость движения. Но каждый отдельный объект Автомобиль в любой конкретный момент времени может иметь на спидометре отличную от других скорость.
Состояние объекта описывается различными его полями, называемыми также "свойствами".
А его возможности описываются его "методами". Эти методы представляют собой
функции внутри класса, но только они вызываются через (->) объект и существуют
в контексте состояния, определяемого средствами объекта.
В нашем упражнении класс называется RSSFactory, а создаваемый объект — $rss_f eed.
Если нужно вызвать метод addltem объекта $rss_f eed, то это выполняется с помощью записи $rss_feed->addltem. В упражнении такое действие выполняется дважды для добавления двух элементов канала. И, наконец, для вывода канала используется оператор echo $rss_feed->get ( ) , который отображает канал в соответствии с добавленными в него элементами.
___________________________________________________
Использовать этот класс совсем не трудно. Вначале необходимо указать файл
rss_factory. inc.php (в котором описан класс) и создать объект rss_feed:
<?php
// загрузка библиотеки генератора URL
require_once 'include/rss_factory.inc.php';
// создание канала
$rss_feed = new RSSFactory('Канал новых продуктов SEOEgghead.com',
'http://www.seoegghead.com/seo-with-php-updates.html',
'Замечательные новые продукты, ежедневное обновление');
Ваш класс называется RSSFactory, а объект — rss_feed. Объект создается с помощью
операции new и, как вы видите, в скобках после имени класса передаются параметры.
Эти параметры, указываемые при создании объекта, передаются конструктору класса.
Конструктор — это специальный метод класса, который автоматически вызывается
при создании объекта. Он позволяет выполнить начальные настройки на основе переданных
параметров. В нашем случае при создании объекта RSSFactory конструктору
передается название канала, ссылка и описание. Эти атрибуты характеризуют
сам канал вообще, а не его отдельные элементы. Определение конструктора в классе
RSSFactory выглядит так:
// конструктор класса - выполняется при создании экземпляра этого класса
function RSSFactory($title, $link, $description,
$language = 'ru', $items = array.() )
{
// сохранение данных канала в локальных членах класса
$this->_title = $tit.le;
$this->_link = $link;
$this->_description = $description;
$this->_language = $language;
$this->_items = $items;
}
Так что конструктор сохраняет значения параметров в свойствах объекта и таким
образом задает его состояние. Обратите внимание на использование $this, что внутри класса означает "данный экземпляр класса". (При создании нескольких объектов типа RSSFactory ссылка $this будет различной в каждом из этих объектов.)
После создания объекта $rss_feed в сценарии feed.php два раза вызывается метод addltem, чтобы добавить в канал два элемента:
// создание канала
$rss_feed = new RSSFactory('Канал новых продуктов SE0Egghead.com',
'http://www.seoegghead.com/seo-with-php-updates.html',
'Замечательные новые продукты, ежедневное обновление');
// добавление элемента канала
$rss_feed->addltem('Новый сок из ссылок с ароматом апельсинов^1,
'http://seophp.example.com/Products/SE0-Toalbox-C6/Link-Juice-P31.html',
'Новый продукт - сок из ссылок от SEOEgghead.com - преобразит ваш Web-сайт!');
// добавление элемента канала
$rss_feed->addltem('Усовершенствуйте свои PHP-приложения с помощью AJAX!',
'http://seophp.example.com/Products/Friends-Shed-C2/AJAX-PHP-Book-P42.html',
'Прочтите это руководство по AJAX для PHP-разработчиков!');
И, наконец, вызывается метод g e t ( ) , чтобы вывести структуру RSS-канала. Выходные данные этого упражнения будут следующими:
< ^ ^ е > К а н а л новых продуктов SEOEgghead.com
http://www.seoegghead.com/blog/seo-with-php-updates/
3aMe4aTenbHBie новые продукты, ежедневное обновление
HoBwu сок из ссылок с ароматом апельсинов!
http://seophp.example.com/Products/SEO-Toolbox-C6/Link-Juice-P31.html
Новый продукт - сок из ссылок от SEOEgghead.com - преобразит ваш Web-сайт!
ycoBepmeHCTByHTe свои PHP-приложения с помощью AJAX!
http://seophp.example.com/Product s/Friends-Shed-C2/
4>PHP-E-Commerce-Book-P42. html
Прочтите это руководство no AJAX для PHP-разработчиков!
Чтобы раскрутить свой Web-канал, вы должны сделать его хорошо заметным на
вашем сайте. В главе 18 вы также узнаете, как поместить в блог WordPress "чиклеты" (chicklet), которые облегчают добавление вашего Web-сайта в отдельные средства чтения каналов на базе Web-приложений.