CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
blagoy_vip

Топ новостей в RSS ленте

Recommended Posts

Есть модуль (код ниже), который формирует RSS ленту топ новостей за каждый день и за неделю

https://xn--80ady2a0c.xn--p1ai/external_modules/rss_top/week

https://xn--80ady2a0c.xn--p1ai/external_modules/rss_top/day 

 

Надо поправить, чтобы он брал картинку сначала из дополнительного поля youtube, а потом уже все остальное. Сейчас он из этого поля картинку берет, но в последнюю очередь.

 

Если кто-то сможет помочь, буду благодарен. Также готов оплатить услуги. 

 

Модуль https://drive.google.com/open?id=1O851htihrsgmR9nUsPbot7XrQ1UpDDoz

 

или код модуля ниже:

 

<?php
define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', __DIR__ . '/../..' );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );

@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

include ENGINE_DIR . '/data/config.php';
date_default_timezone_set ( $config['date_adjust'] );

require_once (ENGINE_DIR . '/classes/plugins.class.php');
require_once ENGINE_DIR . '/classes/mysql.php';
include_once ENGINE_DIR . '/data/dbconfig.php';
include_once ENGINE_DIR . '/modules/functions.php';
include_once ROOT_DIR . '/language/' . $config['langs'] . '/website.lng';


$p = isset($_GET['p']) ? totranslit($_GET['p']) : '';

$areas = [
	'day' => [
		'limit' => 5,
		'join'  => "<br>\n",
	],
	'week' => [
		'limit' => 10,
		'join'  => "<br>\n<br>\n",
	],
];

if (!$p || !isset($areas[$p])) {
	die('Area param not set');
}


$file_path = __DIR__ . '/rss_' . $p . '.xml';

// Через запятую ID категорий которые не использовать
$skip_cat = [40,44,63,77,117];

// ID категории с видео
$video_cat = 57;

$count_limits = [
	'min'  => 8,	// Если новостей меньше данного числа
	'show' => 3,	// То показывать топ из N новостей
];

$start_date = date('Y-m-d 00:00:00');
$wd = date('N') - 1;
if ($p == 'week' && $wd) {
	$time = time() - $wd*86400;
	$start_date = date('Y-m-d 00:00:00', $time);
}

$where = [];
$where[] = 'approve';
$where[] = "category NOT REGEXP '[[:<:]]" . join('|', $skip_cat) . "[[:>:]]'";
$where[] = "category != '0'";
$where[] = "date > '$start_date'";
$where = join(' AND ', $where);

$count_all = $db->super_query("SELECT count(*) as count
	FROM ".PREFIX."_post
	WHERE $where
");
if ($count_all['count'] < $count_limits['min']) {
	die('Мало новостей для обновления');
	$areas[$p]['limit'] = $count_limits['show'];
}
if ($count_all['count'] < $areas[$p]['limit']) {
	die('Not enough posts');
}

if ($config['cache_count']) {
	$sql = $db->query( "SELECT COUNT(*) as count, news_id FROM " . PREFIX . "_views GROUP BY news_id" );
	while ($row = $db->get_array($sql)) {
		$db->query( "UPDATE " . PREFIX . "_post_extras SET news_read = news_read + {$row['count']} WHERE news_id = {$row['news_id']}" );
	}
	$db->free($sql);
	$db->query("TRUNCATE TABLE " . PREFIX . "_views");
	clear_cache(['news_', 'full_', 'rss']);
}

$sql = $db->query("SELECT id, title, alt_name, category, xfields
	FROM ".PREFIX."_post p 
	LEFT JOIN ".PREFIX."_post_extras e ON p.id = e.news_id
	WHERE $where
	ORDER BY e.news_read DESC
	LIMIT {$areas[$p]['limit']}
");

$data = [];
$i = 0;
$home_host = parse_url($config['http_home_url']);
$home_host['host'] = idn_to_utf8($home_host['host']);
$home_host['scheme'] .= '://';
$home_host = join($home_host);

while ($row = $db->get_row($sql)) {
	$i++;
	$xfields = xfieldsdataload($row['xfields']);
	$row['category'] = explode(',', $row['category']);
	$row['title'] = stripslashes($row['title']);

	if (preg_match('#[\?!]$#', $row['title']) == false && $xfields['podzagolovok']) {
		$row['title'] .= '.';
	}
	$title = [
		$i . '.',
		$row['title'],
	];
	if ($xfields['podzagolovok']) {
		$title[] = $xfields['podzagolovok'];
	}
	if (in_array($video_cat, $row['category'])) {
		$title[] = '(видео)';
	}
	$full_link = $home_host . $row['id'] . '-' . $row['alt_name'] . '.html';
	$title[] = $full_link;
	$title = join(' ', $title);
	if ($xfields['foto']) {
		preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
		list($img,) = explode('|', $foto[1]);
	} else {
		$img = $xfields['youtube'];
	}

	$row['title'] = htmlspecialchars($row['title'], ENT_QUOTES, $config['charset']);
	$row['title'] = str_replace('&amp;', '&', $row['title']);
	$row['title'] = trim($row['title'], '.');

	$data['title'][] = $title;
	$data['image'][] = "<img src=\"$img\" alt=\"{$row['title']}\" />";
}

$_TIME = time();

$publDate = date('d.m.Y');
$linkDate = date('Y/m/d');

$titles = join($areas[$p]['join'], $data['title']);
$photos = join("\n", $data['image']);

$rss_title = sprintf(
	"Друзья, подводим итоги %s. Предлагаем вашему вниманию ТОП-%d новостей по количеству просмотров%s:",
	($p == 'day') ? 'вчерашнего дня' : 'уходящей недели',
	count($data['title']),
	($p == 'day') ? ' за ' . langdate('j F', time()) : ''
);


$rss_content = <<<XML
<?xml version="1.0" encoding="{$config['charset']}"?>
<rss version="2.0">
<channel>
<title>{$config['home_title']}</title>
<link>{$config['http_home_url']}</link>
<language>ru</language>
<item>
<pubDate>$publDate</pubDate>

XML;
if ($p == 'day') {
	$rss_content .= "<link>https://xn--80ady2a0c.xn--p1ai/$linkDate/</link>\n";
}
$rss_content .= <<<XML
<description>
<![CDATA[
$rss_title
<br><br>
$titles
<br>
$photos
]]>
</description>
</item>
</channel></rss>
XML;

file_put_contents($file_path, $rss_content, LOCK_EX);

header( "Content-type: application/xml; charset=".$config['charset'] );
echo $rss_content;

 

Edited by blagoy_vip

Share this post


Link to post
Share on other sites
if ($xfields['foto']) {
  preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
  list($img,) = explode('|', $foto[1]);
} else {
  $img = $xfields['youtube'];
}

вот кусок кода который определяет откуда брать картинку, меняйте

Share this post


Link to post
Share on other sites
6 часов назад, germanydletest сказал:

if ($xfields['foto']) {
  preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
  list($img,) = explode('|', $foto[1]);
} else {
  $img = $xfields['youtube'];
}

вот кусок кода который определяет откуда брать картинку, меняйте

Можете помочь?

Share this post


Link to post
Share on other sites

Поменять местами условия и по идее будет как нужно, попробуйте:

if ($xfields['youtube']) {
  $img = $xfields['youtube'];
} else {
  preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
  list($img,) = explode('|', $foto[1]);
}

 

Edited by Colonizator

Share this post


Link to post
Share on other sites
17 минут назад, Colonizator сказал:

Поменять местами условия и по идее будет как нужно, попробуйте:


if ($xfields['youtube']) {
  $img = $xfields['youtube'];
} else {
  preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
  list($img,) = explode('|', $foto[1]);
}

 

Спасибо, работает.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this