Итак, сниппет выводит заголовок, содержимое поста (к сожалению еще не разобрался как делать cut`ы), имя автора, ссылку на его страницу, ссылку на страницу поста вместе с количеством комментариев, ссылку на добавление комментария.
Можно вставлять посты только с определенным тэгом, использовав вызов сниппета
[[LiveJournal? &addText=`тэг`]]
Чтобы вывести все посты пишется просто
[[LiveJournal]]
<?php
class RSSParser {
var $insideItem = false;
var $tag = "";
var $title = "";
var $description = "";
var $originalLink = "";
var $dt = "";
var $author = "";
var $authorid = "";
var $replies = "";
function startElement($parser, $tagName, $attrs)
{
if($this->insideItem)
{
$this->tag = $tagName;
}
elseif($tagName == "ITEM")
{
$this->insideItem = true;
}
}
function endElement($parser, $tagName)
{
if($tagName == "ITEM")
{
echo("<div id='post'>");
printf("<div id='post_title'><h2>%s</h2></div>", $this->title);
printf("<div id='post_content'><p>%s</p></div>", $this->description);
printf("<div id='post_links'>%s", $this->dt);
printf(" | Автор: <a href=\"http://%s.livejournal.com\" target=\"_blank\">%s</a> | ",
trim($this->authorid), trim($this->authorid));
printf("<a href=\"%s\" target=\"_blank\">%s",
trim($this->originalLink), "Коментарии ");
printf("( %s )</a> | ", $this->replies);
printf("<a href=\"%s?mode=reply\" target=\"_blank\">%s",
trim($this->originalLink), "Оставить комментарий ");
printf("</a></div>");
echo("</div>");
$this->title = "";
$this->originalLink = "";
$this->description = "";
$this->dt = "";
$this->authorid = "";
$this->replies = "";
$this->insideItem = false;
}
}
function characterData($parser, $data)
{
if($this->insideItem)
{
switch($this->tag)
{
case "TITLE":
$this->title .= $data;
break;
case "DESCRIPTION":
$this->description .= $data;
break;
case "LINK":
$this->originalLink .= $data;
break;
case "LJ:POSTER":
$this->authorid .= $data;
break;
case "LJ:REPLY-COUNT":
$this->replies .= $data;
break;
case "PUBDATE":
$this->dt .= $data;
break;
}
}
}
}
$xml_parser = xml_parser_create("UTF-8");
$rss_parser = new RSSParser();
xml_set_object($xml_parser, &$rss_parser);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if($addText != "") {
$source_url = "http://username_или_community.livejournal.com/data/rss?tag=$addText";
}
else {
$source_url = "http://username_или_community.livejournal.com/data/rss";
}
$fp = fopen($source_url, "r")
or die("Error reading RSS data!");
while($data = fread($fp, 4096))
{
xml_parse($xml_parser, $data, feof($fp))
or die("Error parsing RSS data!");
}
fclose($fp);
xml_parser_free($xml_parser);
?>
Буду признателен если найдутся люди, которые присоединятся к развитию этого простенького, но наверняка, многим полезного сниппета ))
Пользуйтесь на здоровье )