Модуль для импорта Google News на Drupal 6
Написание модулей для Drupal не такая сложная задача, как может показаться на первый взгляд. Написать самостоятельно простенький модуль сможет даже новичок, лишь шапочно знакомый с азами PHP.
Для примера создадим модуль, который позволит добавить на страницы
сайта блок, содержащий колонку новостей Google News. Сервис
Google News позволяет импортировать новости используя RSS, причем
их можно фильтровать, задав в поиске запрос. Так мы и поступим
на первом шаге. Заходим по адресу: news.google.com, задаем запрос,
скажем: «создание сайтов». После того, как будет сформирована
страница выдачи, в левой части документа вы найдете ссылку на
RSS-поток отфильтрованных по нашему запросу новостей, скопируйте
его (http://news.google.com/news?hl=en&ned=us&
q=%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0
%B8%D0%B5+%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2&
ie=UTF-8&nolr=1&output=rss).
Итак, для создания модуля, нам потребуется создать в папке “modules” новый каталог, одноименный названию нашего модуля, например “googlenews”. В этом каталоге нам нужны два файла: “googlenews.info” и “googlenews.module”. С инфо-файлом все просто, вот его содержимое:
;$Id$
name = "Google News"
description = "Чтение новостей Google"
core = 6.x
php = 5.1
С редакцией собственно модуля будет посложнее:
<?php
function googlenews_block($op='list', $delta=0, $edit=array())
{
switch($op)
{
case 'list':
$blocks[0]["info"] = t("googlenews");
return $blocks;
case 'view':
$url='http://news.google.com/news?hl=en&ned=us&
q=%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0
%B8%D0%B5+%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2&
ie=UTF-8&nolr=1&output=rss';
$blocks['subject'] = 'googlenews';
$blocks['content'] = _googlenews_fetch_rss($url);
return $blocks;
}
}?>
В общем, начало стандартное для многих модулей. В конце фрагмента исходника вызывается функция _googlenews_fetch_rss($url), с помощью которой в блок выводится контент, полученный из новостей google. Вот сама функция:
<?php
function _googlenews_block_content($doc, $num_items=3)
{
$items=$doc->channel->item;
# print_r($items);
$count_items=count($items);
$len=($count_items < $num_items) ? $count_items : $num_items;
$default_link='http://www.delajsam.ru/';
$out='';
foreach($items as $item)
{
$title=strip_tags($item->title);
# $body=split("\.\.\.",$item->description);
if(empty($title)) $title='';
if((empty($link) )) $link=$default_link;
$out.=$title.' Опубликовано: '.$item->pubDate;
# $out.="<br />".$body[0];
$out.="<hr>";
}
$out.='<br /><div class="googlenews_more">'
.l( 'www.delajsam.ru','http://www.delajsam.ru/')
.'</div>';
return($out);
}
?>
Все.
$items=$doc->channel->item; Здесь массив $items уже содержит
нужные данные, осталось только вывести их. Откуда взялись [title],
[description], [pubDate]? Выведите содержимое массива $items,
раскомментировав строку с print_r – увидите сами.
Два оставшиеся комментария – это вывод части (перед ссылками на источники) описания новости.
Осталось только скопировать в папку с модулями Drupal ваш новый модуль, активировать его и добавить ввиде блока. Последнее,
кстати, можно сделать так:
<?php
, где 0 - идентификатор блока.
$block = module_invoke('googlenews', 'block', 'view', 0);
print $block['content'];
?>
