Перейти к содержимому


- - - - -

Вывод RSS


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Only

Only

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений

Отправлено 21.01.2010, 18:13

Я так понимаю в списке Rss ленты посте названия статьи пишется содержимое @@description=. А можно как нибудь выводить то, что написано до <--more-->

#2 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 22.01.2010, 08:39

Сейчас это сделать не так просто, но в следующих релизах мы подумаем над упрощением этой процедуры.

Ниже представлен плагин, который выводит 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 Only

Only

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений

Отправлено 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


#4 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 23.01.2010, 06:36

Просмотр сообщенияOnly (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
Изменил код в первом сообщении.




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей