blagoy_vip 7 Опубликовано: 14 октября 2019 Рассказать Опубликовано: 14 октября 2019 (изменено) Есть модуль (код ниже), который формирует 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('&', '&', $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; Изменено 14 октября 2019 пользователем blagoy_vip Цитата Ссылка на сообщение Поделиться на других сайтах
germanydletest 443 Опубликовано: 14 октября 2019 Рассказать Опубликовано: 14 октября 2019 if ($xfields['foto']) { preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto); list($img,) = explode('|', $foto[1]); } else { $img = $xfields['youtube']; } вот кусок кода который определяет откуда брать картинку, меняйте Цитата Ссылка на сообщение Поделиться на других сайтах
blagoy_vip 7 Опубликовано: 14 октября 2019 Рассказать Опубликовано: 14 октября 2019 Автор 6 часов назад, germanydletest сказал: if ($xfields['foto']) { preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto); list($img,) = explode('|', $foto[1]); } else { $img = $xfields['youtube']; } вот кусок кода который определяет откуда брать картинку, меняйте Можете помочь? Цитата Ссылка на сообщение Поделиться на других сайтах
Colonizator 9 Опубликовано: 16 октября 2019 Рассказать Опубликовано: 16 октября 2019 (изменено) Поменять местами условия и по идее будет как нужно, попробуйте: if ($xfields['youtube']) { $img = $xfields['youtube']; } else { preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto); list($img,) = explode('|', $foto[1]); } Изменено 16 октября 2019 пользователем Colonizator Цитата Ссылка на сообщение Поделиться на других сайтах
blagoy_vip 7 Опубликовано: 16 октября 2019 Рассказать Опубликовано: 16 октября 2019 Автор 17 минут назад, Colonizator сказал: Поменять местами условия и по идее будет как нужно, попробуйте: if ($xfields['youtube']) { $img = $xfields['youtube']; } else { preg_match('#<!--dle_image_begin:(.+?)-->#i', $xfields['foto'], $foto); list($img,) = explode('|', $foto[1]); } Спасибо, работает. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.