Наши скрипты > Модификации

RSS

(1/4) > >>

Magi:
Всем привет!
Расскажите, как реализована функция RSS в санитариуме? В конфиге она включена, а что дальше, как предоставить пользователям возможность читать новости в этом виде?

Green Kakadu:
тут возможно несколько вариантов (смотря что вам нужно)
1. вывод ленты новостей с помощью javascript
2. вывод в отдельный текстовый файл, который можно инклудить.
по умолчанию js. все ленты кидаются в папку  /your/public/sanitarium/news

настраивается в шаблоне news.txt

3 RSS настоящий, т.е. нечто типа такого формата:


--- Код: ---
sub print_news  строка 1019




  RSS2 Sanitarium
  [url]http://site.ru/index.html[/url]
  Мой RSS 2.0 feed
  ru
  Copyright 2004, Vasya Pupkin Ink.



    Моя статейка...
    [url]http://site.ru/article.html[/url]
    Это моя супер статья
    My articles
Nonfiction/Business/O\'Reilly_and_Associates/
    Green Kakadu
    Sun, 02 Jan 2002 0:00:01 GMT
 

и т.д.

--- Конец кода ---

к сожалению такую фичу надо прикрутить самому. Т.к. можно настроить все содержимое , но все это надо еще запихнуть во внешнй клнтейнер - т.е. нужен доп. шаблон.
Как добавить такую штуку?
Sanitarium_WL.pm
находим sub print_news  (строка 1019) и переписываем ее - надо добавить всего лишь несколько строк, чтоб паралельно генерился RSS feed. Если нужно, я на днях кину сюда "видоизмененный вариант"

Magi:
Нужно!

Green Kakadu:
В общем ловите. Только следуйте инструкциям:
1 сделайте копию своего модуля Sanitarium_WL.pm
2. в папку шаблонов tmp-main киньте два файла rss.txt
rss_item.txt
Вот их примерное содержимое
news_rss.txt
----------------------------------------------

--- Код: ---



 
 
  ru
  Copyright 2004, ???? ??????.
  vasyapupkin@site.ru
 



--- Конец кода ---


--------------------------------------------------------------
rss_item.txt
--------------------------------------------------------------

--- Код: ---






--- Конец кода ---

---------------------------------------------------------------

3 В Sanitarium_WL.pm заменить подпрограмму sub print_news (1019) на такую:
-------------------------------------------------------------------

--- Код: ---
sub print_news {
#--------------------------------------------------
my ($cat, $how_news, $news_js, $html, $news_txt, $use_txt, %news);
my $self=shift;
$cat=shift;
$how_news=shift;
$use_txt=$self->{\'txt_news\'};
$self->{DB_File}="$self->{\'data\'}/$cat";
$self->{DB_Field}=\'index\';
unless($self->{\'tmp_news\'}){$self->{\'tmp_news\'}=$self->load_tempfile("$self->{\'tmpl_dir\'}/tmp-main/news.txt");}

#RSS ADDON: Load RSS Templates
unless($self->{\'tmp_rss\'}){$self->{\'tmp_rss\'}=$self->load_tempfile("$self->{\'tmpl_dir\'}/tmp-main/news_rss.txt");}
unless($self->{\'tmp_rss_item\'}){$self->{\'tmp_rss_item\'}=$self->load_tempfile("$self->{\'tmpl_dir\'}/tmp-main/rss_item.txt");}

%news=$self->get_nn_recs($how_news);
foreach my $key(sort {$b $a} keys %news){
$self->unpack_rec($news{$key});
$self->get_author_info();
if ($self->{\'static_pages\'}){$self->{\'article_url\'}="$self->{\'public_url\'}/$self->{\'cat_id\'}/$key"."_1.$self->{\'ext\'}";}
else {$self->{\'article_url\'}=$self->{\'view_cgi_url\'}."?id=$key&cat_id=$self->{\'cat_id\'}&page=1";}
$html=$self->small_parsing($self->{\'tmp_news\'});
#RSS ADDON
$self->{\'rss\'} .= $self->small_parsing($self->{\'tmp_rss_item\'});
        if ($use_txt){
$news_txt .= "$html\\n" ;
}
else {
$html=~ s/"/\\\\"/g;
$html=~ s/[\\n\\r]//g;
$html=~ s/\'/\\\'/g;
$news_js .= qq~document.write("$html");\\n~;
}
}
#CHECK DIRS:
if (!(-e "$self->{\'public_dir\'}/news")){
mkdir("$self->{\'public_dir\'}/news", 0777) or croak("Can\'t mkdir $self->{\'public_dir\'}/news, reason: $!");
chmod(0777, "$self->{\'public_dir\'}/news") or croak("Can\'t chmod $self->{\'public_dir\'}/news, reason: $!");
}
#RSS PRINT
open (RSS, ">$self->{\'public_dir\'}/news/$cat.xml") or croak("Can\'t open RSS, reason: $!");
if ($USE_FLOCK){flock(RSS, 2);}
print RSS $self->small_parsing($self->{\'tmp_news_rss\'});
close RSS;

#PRINT in *.js
if ($news_js){
open (NEWS, ">$self->{\'public_dir\'}/news/$cat.js") or croak("Can\'t open NEWS, reason: $!");
if ($USE_FLOCK){flock(NEWS, 2);}
print NEWS $news_js;
close NEWS;
}
#Print in *.txt
if ($news_txt){
open (NEWSTXT, ">$self->{\'public_dir\'}/news/$cat.txt") or croak("Can\'t open NEWSTXT, reason: $!");
print NEWSTXT $news_txt;
close NEWSTXT;
}
}

--- Конец кода ---


все.
Для каждой категории будут созданы rss ленты + общая на всех
все они будут лежать там же где и обычные новости
http://site.ru/public_sanitar/news
index.xml - общая лента
1.xml - лента категории с id=1 и т.д.
Кол-во новостей столько сколько вы указали в конфиге
Я не пробовал, но должно работать, если я опечаток не сделал. Если что не так -кидайте сюда, поправим.

Green Kakadu:
вот еще. в RSS 0.91 и выше есть в заголовках поля времен, типа
08 Oct 02 2004 GMT
 08 Oct 02 2004 GMT
не знаю, обязательные они или нет.
 Если обязательные, то надо будет доп. тег с временем генерить

:) теперь можно и в Яндекс.новости суваться

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии