Перейти к контенту
  • 0

Наличие rss в версии 1.3


Basist

Вопрос

Рекомендуемые сообщения

  • 0

У меня сделаны дополнения этого мода, чтобы не вводить с руки список форумов для исключения из потока, а чтобы считывал настройки доступов сам; при этом введенные с руки тоже продолжают скрываться:

<?php

/*
 RSS For Yandex и не только

 Выдает последние сообщения, опубликованны в форуме, в rss
 Шаблон выдачи зашит внутри функции do_lastposts
 Там же определяются количество элементов для выдачи и "служебные форумы", в которых
 сообщения трогать не надо.

 Сделано было мною для добавления форума в яндексовский поиск по форумам и блогам.
 Сделано на основе мода
 "Блок последних сообщений из форума IBF для PHP-Nuke"
 (http://www.ibresource.ru/db/index.php?pg=show&id=97)

 Инструкция: Переименовать файл в yandex.php, положить в корень форума.
 Скормить Яндексу url
 [url="http://yourdomain.ru/forum/yandex.php"]http://yourdomain.ru/forum/yandex.php[/url]

 Проверялось только на версии форума 1.3.1. Вполне возможно, что будет работать 
 на 1.1 и 1.2.

 Прошу прощения за неаккуратность кода - php не знаю )

 Замечания приветствуются.

 Георгий (Юра) Киселев
 [url="http://www.helpix.ru/feedback/george.html"]http://www.helpix.ru/feedback/george.html[/url]
*/


//-----------------------------------------------
// USER CONFIGURABLE ELEMENTS
//-----------------------------------------------

// Root path

$root_path = "../../";

//-----------------------------------------------
// NO USER EDITABLE SECTIONS BELOW
//-----------------------------------------------

error_reporting  (E_ERROR | E_WARNING | E_PARSE);
set_magic_quotes_runtime(0);

class info {

var $input      = array();
var $base_url   = "";
var $vars       = "";
function info() {
	global $sess, $std, $DB, $root_path, $INFO;

	$this->vars = &$INFO;

}
}

//--------------------------------
// Import $INFO, now!
//--------------------------------

require $root_path."conf_global.php";

//--------------------------------
// Require our global functions
//--------------------------------

require $root_path."sources/functions.php";

$std   = new FUNC;

//--------------------------------
// Load the DB driver and such
//--------------------------------

$INFO['sql_driver'] = !$INFO['sql_driver'] ? 'mySQL' : $INFO['sql_driver'];

$to_require = $root_path."sources/Drivers/".$INFO['sql_driver'].".php";
require ($to_require);

$DB = new db_driver;

$DB->obj['sql_database']     = $INFO['sql_database'];
$DB->obj['sql_user']         = $INFO['sql_user'];
$DB->obj['sql_pass']         = $INFO['sql_pass'];
$DB->obj['sql_host']         = $INFO['sql_host'];
$DB->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];

// Get a DB connection

$DB->connect();

//--------------------------------
// Wrap it all up in a nice easy to
// transport super class
//--------------------------------

$ibforums             = new info();

//--------------------------------
//  Set up our vars
//--------------------------------

$ibforums->input      = $std->parse_incoming();
$ibforums->base_url   = $ibforums->vars['board_url'];

//--------------------------------
// What to do?
//--------------------------------


do_lastposts();



//-------------------------------------------------
//  Last Posts
//-------------------------------------------------
function do_lastposts() {
global $DB, $ibforums, $root_path, $std, $INFO;

$admin_forums = '(0)'; // ID разделов, которые вы хотите спрятать (через запятую)
		       // (если стоит 0 то будут показаны все разделы)
   $limit        = "7";   // Количество 'последних постов'
if(isSet($ibforums->input['n']))
{
	$n=intval($ibforums->input['n']);
	if($n<31 and $n>0)$limit = $n;
}
$n_days = $limit."";
$limit = time() - $limit*3600*24;
$prefix 	  =  $INFO['sql_tbl_prefix'];

//----------------------------------------
// Header parse...
//----------------------------------------

@header('Content-Type: text/xml');
@header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
@header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
@header('Pragma: public');

// Темплейт для постов
$template = "
     <item>
       <guid isPermaLink='true'>{post_url}</guid>
       <pubDate>{rfc_date}</pubDate>
       <title>{author} создал(а) тему: {thread_title}</title>
       <link>{post_url}</link>
       <description><![CDATA[{text}]]></description>
       <comments>{post_url}</comments>
     </item>
";

// Темплейт для каментов
$template_c = "
     <item>
       <guid isPermaLink='true'>{post_url}</guid>
       <pubDate>{rfc_date}</pubDate>
       <title>{author} ответил(а) тему: {thread_title} (автор темы {j_a_name})</title>
       <link>{post_url}</link>
       <description><![CDATA[{text}]]></description>
       <comments>{post_url}</comments>
     </item>
";

 	$to_echo = "<?xml version='1.0' encoding=\"windows-1251\"?>
     <rss version='2.0'>
     <channel>
     <title>Сообщения и комментарии в журналах Анонимных Алкоголиков за последние ".$n_days." дней</title>
     <link>http://vesvalo.net/</link>
     <description>Русскоязычная группа анонимных алкоголиков онлайн</description>
     <generator>Vesvalo.net</generator>
 	";

// Тянем посты
$DB->query("SELECT p.post_date, p.pid, p.author_name, p.title, p.post, me.j_public, me.id
			FROM ibf_jposts p
			LEFT JOIN ibf_member_extra me ON ( me.id = p.journal_id ) 
			WHERE p.post_date > '".$limit."'
			AND me.j_blocked <>1
			AND me.j_public =1
			ORDER BY p.post_date ASC");
if ( ! $DB->get_num_rows() ) {
	fatal_error("Could not get the information from the database");
}
while( $out = $DB->fetch_row($query) ) {
	$thread_title = $out['title'];
       $thread_title = preg_replace( "'&'si", "&" , $thread_title );
	$forum_name = $out['name'];
	$author	            = $out['author_name'];
       $rfcdate            = date( 'r', $out['post_date'] );
	$out['post_date']	= $std->get_date( $out['post_date'], 'LONG' );
	$date               = $out['post_date'];
	$text               = $out['post'];

	$to_echo  .= parse_template( $template,array (

	'thread_url' => $ibforums->base_url."/journal.php?user=".$out['id']."&comm=".$out['pid'],
	'thread_title' => $thread_title,
	'forum_url' => $ibforums->base_url."/journal.php?user=". $out['id'],
	'post_url' => $ibforums->base_url."/journal.php?user=".$out['id']."&comm=".$out['pid'],
	'forum_name' => $forum_name,
	'date'       => $date,
	'rfc_date'   => $rfcdate,
	'author'     => $author,
	'text'     => $text,
	'profile_link'   => $ibforums->base_url."?act=Profile&CODE=03&MID=".$out['id'],	) );
}




// Тянем каменты
$DB->query("SELECT c.cid, c.post_date, c.post, c.author_name, p.author_name as j_a_name, p.title, p.pid, me.j_public, me.id
			FROM ibf_jcomments c
			LEFT JOIN ibf_jposts p ON (p.pid=c.post_id)
			LEFT JOIN ibf_member_extra me ON (me.id=c.owner_id)
			WHERE p.post_date > '".$limit."'
			AND me.j_blocked <>1
			AND me.j_public =1
			ORDER BY p.post_date ASC");
if ( ! $DB->get_num_rows() ) {
	fatal_error("Could not get the information from the database");
}
while( $out = $DB->fetch_row($query) ) {
	$thread_title = $out['title'];
       $thread_title = preg_replace( "'&'si", "&" , $thread_title );
	$forum_name = $out['name'];
	$author	            = $out['author_name'];
       $rfcdate            = date( 'r', $out['post_date'] );
	$out['post_date']	= $std->get_date( $out['post_date'], 'LONG' );
	$date               = $out['post_date'];
	$text               = $out['post'];

	$to_echo  .= parse_template( $template_c,array (

	'thread_url' => $ibforums->base_url."/journal.php?user=".$out['id']."&comm=".$out['pid'],
	'thread_title' => $thread_title,
	'forum_url' => $ibforums->base_url."/journal.php?user=". $out['id'],
	'post_url' => $ibforums->base_url."/journal.php?user=".$out['id']."&comm=".$out['pid']."&c=".$out['cid']."#c".$out['cid'],
	'forum_name' => $forum_name,
	'date'       => $date,
	'rfc_date'   => $rfcdate,
	'author'     => $author,
	'j_a_name'     => $out['j_a_name'],
	'text'     => $text,
	'profile_link'   => $ibforums->base_url."/index.php?act=Profile&CODE=03&MID=".$out['id'],	) );
}


$to_echo  .= "
     </channel>
     </rss>
";

   echo $to_echo;
}



//+-------------------------------------------------
// GLOBAL ROUTINES
//+-------------------------------------------------


function parse_template( $template, $assigned=array() )
{

foreach( $assigned as $word => $replace)
{
	$template = preg_replace( "/\{$word\}/i", "$replace", $template );
}

return $template;
}



function fatal_error($message="") {
echo("An error occured whilst processing this directive");
if ($message)
{
	echo("<br>$message");
}
exit();
}
?>

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.