Я так понимаю в списке Rss ленты посте названия статьи пишется содержимое @@description=. А можно как нибудь выводить то, что написано до <--more-->
0
Вывод RSS
Автор
Only
, 21.01.2010, 18:13
Сообщений в теме: 3
#1
Отправлено 21.01.2010, 18:13
#2
Отправлено 22.01.2010, 08:39
Сейчас это сделать не так просто, но в следующих релизах мы подумаем над упрощением этой процедуры.
Ниже представлен плагин, который выводит RSS с описанием до <!--more-->, но там нет замены ~/ на путь и ссылка на more выводится без абсолютного пути - это нужно будет править.
Без изменений его, конечно, использовать не получится, но как отправная точка можно использовать. Код я не тестировал, поэтому если надумаете использовать и появятся какие-то вопросы, пишите.
Создаем файл zcontent/extensions/myrss.php:
В настройках вместо zplugin_rss указываем myrss (опция engine.plugins).
Ниже представлен плагин, который выводит RSS с описанием до <!--more-->, но там нет замены ~/ на путь и ссылка на more выводится без абсолютного пути - это нужно будет править.
Без изменений его, конечно, использовать не получится, но как отправная точка можно использовать. Код я не тестировал, поэтому если надумаете использовать и появятся какие-то вопросы, пишите.
Создаем файл zcontent/extensions/myrss.php:
<?php class myrss extends zplugin_rss { /** * Генерирует RSS * * @return boolean */ public function createRss ($uri) { $feed_url = trim(zengine::config()->get('rss.feed_url', '/rss.xml')); if ($uri != $feed_url) { return true; } $feedburner_url = trim(zengine::config()->get('rss.feedburner_url')); if (!empty($feedburner_url)) { if (!preg_match('%feedburner|feedvalidator%i', $_SERVER['HTTP_USER_AGENT'])) { header('Location: ' . $feedburner_url); header($_SERVER['SERVER_PROTOCOL'] . ' 302 Temporary Redirect'); return false; } } @header('Content-Type: text/xml; charset=' . zengine::config()->get('engine.charset')); /** * @todo реализовать формирование RSS с использованием XMLWriter */ $xml = $this->getRss(); echo $xml; return false; } /** * Создает карту сайта без XMLWriter, основываясь на меню, и возвращает ее. * * @return string */ protected function getRss () { ob_start(); /** * @todo возможность выбора языка */ echo '<?xml version="1.0" encoding="' . zengine::config()->get('engine.charset') . '"?> <rss version="2.0"> <channel> <title><![CDATA[' . zengine::config()->get('rss.title', 'My site') . ']]></title> <description><![CDATA[' . zengine::config()->get('rss.description', 'Description') . ']]></description> <language>' . zengine::config()->get('rss.language', 'ru') . '</language> <link>http://' . $_SERVER['HTTP_HOST'] . '/</link> <pubDate>' . date('r', zdate::time()) . '</pubDate> <ttl>60</ttl>'; /** * Выводим описание страниц */ $feed = zengine::repository()->getEntryInfo('feed', 'pages'); if ($feed) { $limit = zengine::config()->get('rss.limit', 10); foreach ($feed as $page) { /* @var $page zpage */ echo '<item>'; $link = 'http://' . $_SERVER['HTTP_HOST'] . $page->getLink(); echo '<title><![CDATA[' . $page->getTitle() . ']]></title>'; echo '<description><![CDATA[' . $page->getTeaser("Читать полностью") . ']]></description>'; echo '<link>' . $link . '</link>'; echo '<pubDate>' . date('Y-m-d\TH:i:s+00:00', $page->getTime()) . '</pubDate>'; echo '</item>'; if (!--$limit) { break; } } } echo '</channel> </rss>'; $rss = ob_get_contents(); ob_end_clean(); return $rss; } }
В настройках вместо zplugin_rss указываем myrss (опция engine.plugins).
#3
Отправлено 22.01.2010, 19:15
Сделал как вы написали, не работет.
Fatal error: Call to protected myrss::myRss() from context 'zengine' in Z:\home\zebrum-1251\www\zengine\classes\zengine.php on line 181
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 скрытых пользователей