mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-31 21:56:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			142 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| /**
 | ||
|  * AVE.cms
 | ||
|  *
 | ||
|  * @package AVE.cms
 | ||
|  * @version 3.x
 | ||
|  * @filesource
 | ||
|  * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 | ||
|  *
 | ||
|  * @license GPL v.2
 | ||
|  */
 | ||
| 
 | ||
| define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));
 | ||
| 
 | ||
| require(BASE_DIR . '/inc/init.php');
 | ||
| 
 | ||
| if (!(isset($_GET['id']) && is_numeric($_GET['id']))) exit;
 | ||
| 
 | ||
| // Выполняем запрос к БД и выгребаем все параметры для данного канала
 | ||
| $rss_settings = $AVE_DB->Query("
 | ||
| 	SELECT
 | ||
| 		rss.*,
 | ||
| 		rubric_title
 | ||
| 	FROM
 | ||
| 		" . PREFIX . "_module_rss AS rss
 | ||
| 	LEFT JOIN
 | ||
| 		" . PREFIX . "_rubrics AS rub
 | ||
| 			ON rub.Id = rss.rss_rubric_id
 | ||
| 	WHERE
 | ||
| 		rss.id = '" . $_GET['id'] . "'
 | ||
| ")->FetchRow();
 | ||
| 
 | ||
| if ($rss_settings !== false)
 | ||
| {
 | ||
| 	$rss_settings->rss_site_name = htmlspecialchars($rss_settings->rss_site_name, ENT_QUOTES);
 | ||
| 	$rss_settings->rss_site_description = htmlspecialchars($rss_settings->rss_site_description, ENT_QUOTES);
 | ||
| 
 | ||
| 	$doctime = get_settings('use_doctime')
 | ||
| 		? ("AND document_published <= " . time() . " AND (document_expire = 0 OR document_expire >= " . time() . ")") : '';
 | ||
| 
 | ||
| 	// Получаем ID, URL и Дату публикации для документов, которые соответсвуют нашей рубрики
 | ||
| 	// Количество выборки ограничиваем значением установленным для канала
 | ||
| 	$sql_doc = $AVE_DB->Query("
 | ||
| 		SELECT
 | ||
| 			Id,
 | ||
| 			document_title,
 | ||
| 			document_alias,
 | ||
| 			document_published
 | ||
| 		FROM " . PREFIX . "_documents
 | ||
| 		WHERE Id != 1
 | ||
| 		AND Id != '" . PAGE_NOT_FOUND_ID . "'
 | ||
| 		AND rubric_id = '" . $rss_settings->rss_rubric_id . "'
 | ||
| 		AND document_status = '1'
 | ||
| 		AND document_deleted != '1'
 | ||
| 		" . $doctime . "
 | ||
| 		ORDER BY document_published DESC, Id DESC
 | ||
| 		LIMIT " . $rss_settings->rss_item_on_page
 | ||
| 	);
 | ||
| 
 | ||
| 	// Формируем массивы, которые будут хранить инфу
 | ||
| 	$rss_item  = array();
 | ||
| 	$rss_items = array();
 | ||
| 
 | ||
| 	// Выполянем обработку полученных из БД данных
 | ||
| 	while ($row_doc = $sql_doc->FetchRow())
 | ||
| 	{
 | ||
| 		$sql_fields = $AVE_DB->Query("
 | ||
| 			SELECT
 | ||
| 				rubric_field_id,
 | ||
| 				field_value
 | ||
| 			FROM " . PREFIX . "_document_fields
 | ||
| 			WHERE document_id = '" . $row_doc->Id . "'
 | ||
| 			AND (rubric_field_id = '" . $rss_settings->rss_title_id . "'
 | ||
| 				OR rubric_field_id = '" . $rss_settings->rss_description_id . "')
 | ||
| 	    ");
 | ||
| 		while ($row_fields = $sql_fields->FetchRow())
 | ||
| 		{
 | ||
| 			if ($row_fields->rubric_field_id == $rss_settings->rss_title_id)
 | ||
| 			{
 | ||
| 				$rss_item['Title'] = $row_fields->field_value;
 | ||
| 			}
 | ||
| 
 | ||
| 			if ($row_fields->rubric_field_id == $rss_settings->rss_description_id)
 | ||
| 			{
 | ||
| 				if ($rss_settings->rss_description_lenght == 0)
 | ||
| 				{
 | ||
| 					$teaser = explode('<a name="more"></a>', $row_fields->field_value);
 | ||
| 					$rss_item['description'] = $teaser[0];
 | ||
| 				}
 | ||
| 				else
 | ||
| 				{
 | ||
| 					if (mb_strlen($row_fields->field_value) > $rss_settings->rss_description_lenght)
 | ||
| 					{
 | ||
| 						$rss_item['description'] = mb_substr($row_fields->field_value, 0, $rss_settings->rss_description_lenght) . '…';
 | ||
| 					}
 | ||
| 					else
 | ||
| 					{
 | ||
| 						$rss_item['description'] = $row_fields->field_value;
 | ||
| 					}
 | ||
| 				}
 | ||
| 				$rss_item['description'] = parse_hide($rss_item['description']);
 | ||
| 			}
 | ||
| 		}
 | ||
| 
 | ||
| 		$link_doc = !empty($row_doc->document_alias) ? $row_doc->document_alias : prepare_url($row_doc->document_title);
 | ||
| 		$link = rewrite_link('index.php?id=' . $row_doc->Id . '&doc=' . $link_doc);
 | ||
| 		$rss_item['link'] = $rss_settings->rss_site_url . mb_substr($link, mb_strlen(ABS_PATH));
 | ||
| 
 | ||
| 		$rss_item['pubDate'] = $row_doc->document_published ? date('r', $row_doc->document_published) : date('r', time());
 | ||
| 
 | ||
| 		array_push($rss_items, $rss_item);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // Ну а тут собственно шлем заголовок, что у нас документ XML и в путь... выводим данные
 | ||
| header("Content-Type: application/xml");
 | ||
| header("Cache-Control: no-cache");
 | ||
| header("Pragma: no-cache");
 | ||
| echo '<?xml version="1.0" encoding="utf8"?>';
 | ||
| ?>
 | ||
| 
 | ||
| <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
 | ||
| <channel>
 | ||
| <title><?php echo $rss_settings->rss_site_name; ?></title>
 | ||
| <link><?php echo $rss_settings->rss_site_url; ?></link>
 | ||
| <language>ru-ru</language>
 | ||
| <description><?php echo $rss_settings->rss_site_description; ?></description>
 | ||
| <category><![CDATA[<?php echo $rss_settings->rubric_title; ?>]]></category>
 | ||
| <generator>AVE.cms</generator>
 | ||
| <?php foreach($rss_items as $rss_item):?>
 | ||
| <item>
 | ||
| 	<title><![CDATA[<?php echo $rss_item['Title']; ?>]]></title>
 | ||
| 	<guid isPermaLink="true"><?php echo $rss_item['link']; ?></guid>
 | ||
| 	<link><?php echo $rss_item['link']; ?></link>
 | ||
| 	<description><![CDATA[<?php echo $rss_item['description']; ?>]]></description>
 | ||
| 	<pubDate><?php echo $rss_item['pubDate']; ?></pubDate>
 | ||
| </item>
 | ||
| <?php endforeach; ?>
 | ||
| </channel>
 | ||
| </rss>
 |