В продолжении темы про вывод картинок… Меня попросили сделать для RSS вывод картинки в блогах. Ну так что давайте сделаем.
Главная особенность rss2.0 что картинка должна быть в теге <enclosure, указывать вес картинки и формат картинки.
поэтому тут одной строчкой нам не обойтись.
открываем файл components/blogs/prss.php (именно файл prss.php в каждом компоненте отвечает за формирование RSS.)
и видим что там нет такого тега.
Поэтому берем и меняем ваше содержание файла на этот:
<?php function rss_blogs($item_id, $cfg){ $inDB = cmsDatabase::getInstance(); global $_LANG; cmsCore::loadModel('blogs'); $model = new cms_model_blogs(); if(!$model->config['component_enabled']) { return false; } cmsCore::loadClass('blog'); $inBlog = cmsBlogs::getInstance(); $inBlog->owner = 'user'; // Формируем канал if ($item_id){ $blog = $inBlog->getBlog($item_id); if (!$blog) { return false; } //Если доступа к блогу нет, возвращаемся if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])){ return false; } $inBlog->whereBlogIs($blog['id']); $channel['title'] = $blog['title']; $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['link'] = HOST . $model->getBlogURL($blog['seolink']); } else { $channel['title'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS']; $channel['link'] = HOST . '/blogs'; } // В RSS всегда только публичные посты $inBlog->whereOnlyPublic(); $inDB->orderBy('p.pubdate', 'DESC'); $inDB->limit($cfg['maxitems']); $posts = $inBlog->getPosts(false, $model, true); if($posts){ $i=0; foreach($posts as $post){ //print_r($posts); preg_match_all("/\[IMG\](.*?)\[\/IMG\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0] if($imagefirst[1][0]==''){ preg_match_all("/\[img\](.*?)\[\/img\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0] } //print_r($imagefirst); $post['link'] = HOST . $post['url']; $post['comments'] = $post['link'].'#c'; $post['category'] = $post['blog_title']; $post['image'] = HOST . ''.$imagefirst[1][0]; $items[] = $post; $i++; } } 'items' => $items); } ?>
Мы проверяем переменную $posts[$i]['content'], где $i это элемент массива content.
в данной переменной мы ищем теги IMG, если не находим то наша переменная $imagefirst[1][0] получается пустая, значит сделаем проверку на тег в нижнем регистре img.
в итоге получаем код
preg_match_all("/\[IMG\](.*?)\[\/IMG\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0] if($imagefirst[1][0]==''){ preg_match_all("/\[img\](.*?)\[\/img\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0] }
Если есть вопросы, пожелания то прошу коментить=)
тестировалось на 1.10.1 и 1.10.2
а так для любой версии адаптировать можно.
Реклама #
Def 11 лет назад #
Ruchechnik 11 лет назад #
Таня 10 лет назад #
Helg 10 лет назад #
kirkr 10 лет назад #
Helg 10 лет назад #
В какое место условие вставить? А если вообще без заглушки, т.е. есть картинка выводим, нет - не выводим..
ValeraK 10 лет назад #
ValeraK 10 лет назад #