Перейти к публикации

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

Есть модуль (код ниже), который формирует 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;

 

Изменено пользователем blagoy_vip
Ссылка на сообщение
Поделиться на других сайтах
if ($xfields['foto']) {
  preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto);
  list($img,) = explode('|', $foto[1]);
} else {
  $img = $xfields['youtube'];
}

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

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, germanydletest сказал:

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

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

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

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

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

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

 

Изменено пользователем Colonizator
Ссылка на сообщение
Поделиться на других сайтах
17 минут назад, Colonizator сказал:

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


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

 

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

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

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

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

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

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

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

×
×
  • Создать...