Gandalf Опубликовано 29 марта, 2016 Жалоба Поделиться Опубликовано 29 марта, 2016 Подскажите как вывести фото товара в RSS ленте, пробовал по аналогии с блогом и статьями, не работает <?PHP require_once('View.php'); class RssView extends View { public function fetch() { // Количество постов на 1 странице $items_per_page = 20; $params = array(); $params['visible'] = 1; $params['limit'] = $items_per_page; switch($this->request->get('type', 'string')) { default: $items = $this->blog->get_posts($filter); $category = 'Блог'; $cat_url = $this->config->root_url.'/'; $base_url = $this->config->root_url.'/blog/'; $logo_url = $this->config->root_url.'/files/logo.png'; $image_url = $this->config->root_url.'/files/originals/'; } header("Content-Type: application/rss+xml; charset=UTF-8"); $p = $items[0]; $rssfeed = '<?xml version="1.0" encoding="UTF-8"?>'; $rssfeed .= '<rss version="2.0">'; $rssfeed .= '<channel>'; $rssfeed .= '<title><![CDATA['.$this->settings->site_name.']]></title>'; $rssfeed .= '<link><![CDATA['.$cat_url.']]></link>'; $rssfeed .= '<description><![CDATA['.$this->settings->company_name.']]></description>'; $rssfeed .= '<language>ru-ru</language>'; $rssfeed .= '<image>'; $rssfeed .= '<url><![CDATA['.$logo_url.']]></url>'; $rssfeed .= '<link><![CDATA['.$cat_url.']]></link>'; $rssfeed .= '<title><![CDATA['.$this->settings->site_name.']]></title>'; $rssfeed .= '</image>'; $rssfeed .= '<copyright><![CDATA[Copyright '.date('Y').' '.$this->settings->company_name.']]></copyright>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '<lastBuildDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></lastBuildDate>'; // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[<img src="'. $image_url . $p->image . '" width="400"></a>' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '</item>'; } switch($this->request->get('type', 'string')) { default: $items = $this->articles->get_articles($filter); $category = 'Статьи'; $base_url = $this->config->root_url.'/article/'; $image_url = $this->config->root_url.'/files/originals/'; } // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[<img src="'. $image_url . $p->image . '" width="400"></a>' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '</item>'; } switch($this->request->get('type', 'string')) { default: $items = $this->products->get_products($filter); $category = 'Каталог'; $base_url = $this->config->root_url.'/products/'; } // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->created)) . ']]></pubDate>'; $rssfeed .= '</item>'; } $rssfeed .= '</channel>'; $rssfeed .= '</rss>'; print($rssfeed); exit(); } } Цитата Ссылка на сообщение Поделиться на другие сайты
Решение yr4ik Опубликовано 29 марта, 2016 Решение Жалоба Поделиться Опубликовано 29 марта, 2016 чет код странный какой то... Например многочисленные вставки switch: switch($this->request->get('type', 'string')) { default: $items = $this->products->get_products($filter); $category = 'Каталог'; $base_url = $this->config->root_url.'/products/'; } Зачем? Ведь данный код выполнится при любых обстоятельствах... Это равноценно что так написать: $items = $this->products->get_products($filter); $category = 'Каталог'; $base_url = $this->config->root_url.'/products/'; По картинкам вместо строки : $items = $this->products->get_products($filter); Пишем: $items = array(); foreach($this->products->get_products($filter) as $p){ $p->images = array(); $items[$p->id] = $p; } if(!empty($items)){ foreach($this->products->get_images(array('product_id'=>array_keys($items))) as $image) $items[$image->product_id]->images[] = $image; foreach($items as &$product){ if(isset($product->images[0])) $product->image = $product->images[0]; } } Цитата Ссылка на сообщение Поделиться на другие сайты
Gandalf Опубликовано 29 марта, 2016 Автор Жалоба Поделиться Опубликовано 29 марта, 2016 Можете подробней разжевать? Этот цикл вызывает ошибку 500 foreach($items as &$product){ if(isset($product->images[0])) $product->image = $product->images[0]; Цитата Ссылка на сообщение Поделиться на другие сайты
Gandalf Опубликовано 29 марта, 2016 Автор Жалоба Поделиться Опубликовано 29 марта, 2016 Я не программист, посмотрите правильно вставил? Не работает, пустой экран . <?PHP require_once('View.php'); class RssView extends View { public function fetch() { // Количество постов на 1 странице $items_per_page = 20; $params = array(); $params['visible'] = 1; $params['limit'] = $items_per_page; $items = $this->blog->get_posts($filter); $category = 'Блог'; $cat_url = $this->config->root_url.'/'; $base_url = $this->config->root_url.'/blog/'; $logo_url = $this->config->root_url.'/files/logo.png'; $image_url = $this->config->root_url.'/files/originals/'; header("Content-Type: application/rss+xml; charset=UTF-8"); $p = $items[0]; $rssfeed = '<?xml version="1.0" encoding="UTF-8"?>'; $rssfeed .= '<rss version="2.0">'; $rssfeed .= '<channel>'; $rssfeed .= '<title><![CDATA['.$this->settings->site_name.']]></title>'; $rssfeed .= '<link><![CDATA['.$cat_url.']]></link>'; $rssfeed .= '<description><![CDATA['.$this->settings->company_name.']]></description>'; $rssfeed .= '<language>ru-ru</language>'; $rssfeed .= '<image>'; $rssfeed .= '<url><![CDATA['.$logo_url.']]></url>'; $rssfeed .= '<link><![CDATA['.$cat_url.']]></link>'; $rssfeed .= '<title><![CDATA['.$this->settings->site_name.']]></title>'; $rssfeed .= '</image>'; $rssfeed .= '<copyright><![CDATA[Copyright '.date('Y').' '.$this->settings->company_name.']]></copyright>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '<lastBuildDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></lastBuildDate>'; // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[<img src="'. $image_url . $p->image . '" width="400"></a>' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '</item>'; } $items = $this->articles->get_articles($filter); $category = 'Статьи'; $base_url = $this->config->root_url.'/article/'; $image_url = $this->config->root_url.'/files/originals/'; // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[<img src="'. $image_url . $p->image . '" width="400"></a>' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->date)) . ']]></pubDate>'; $rssfeed .= '</item>'; } $items = array(); foreach($this->products->get_products($filter) as $p){ $p->images = array(); $items[$p->id] = $p; } if(!empty($items)){ foreach($this->products->get_images(array('product_id'=>array_keys($items))) as $image) $items[$image->product_id]->images[] = $image; foreach($items as &$product){ if(isset($product->images[0])) $product->image = $product->images[0]; } } $category = 'Каталог'; $base_url = $this->config->root_url.'/products/'; $image_url = $this->config->root_url.'/files/originals/'; // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true"><![CDATA['. $base_url . $p->url . ']]></guid>'; $rssfeed .= '<link><![CDATA['. $base_url . $p->url . ']]></link>'; $rssfeed .= '<title><![CDATA[' . $p->name . ']]></title>'; $rssfeed .= '<description><![CDATA[<img src="'. $image_url . $p->image . '" width="400"></a>' . ($p->annotation) . ']]></description>'; $rssfeed .= '<category><![CDATA[' . $category . ']]></category>'; $rssfeed .= '<comments><![CDATA['. $base_url . $p->url . '#comments]]></comments>'; $rssfeed .= '<pubDate><![CDATA[' . date("D, d M Y H:i:s O", strtotime($p->created)) . ']]></pubDate>'; $rssfeed .= '</item>'; } $rssfeed .= '</channel>'; $rssfeed .= '</rss>'; print($rssfeed); exit(); } } Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 29 марта, 2016 Жалоба Поделиться Опубликовано 29 марта, 2016 нужно $p->image->filename а не $p->image И в симпле закрыт доступ к изображениям оригиналам Правильней изображения товара выводить так: $this->design->resize_modifier($p->image->filename, 400) Без никаких $image_url Цитата Ссылка на сообщение Поделиться на другие сайты
Gandalf Опубликовано 29 марта, 2016 Автор Жалоба Поделиться Опубликовано 29 марта, 2016 (изменено) $this->design->resize_modifier($p->image->filename, 400, 400) Все работает, спасибо за помощь Изменено 29 марта, 2016 пользователем Gandalf Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.