Перейти к содержанию
Официальный форум поддержки Simpla

Фото товара в RSS ленте


Перейти к решению Решено yr4ik,

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

Подскажите как вывести фото товара в 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();
  }  
}

 

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

чет код странный какой то... Например многочисленные вставки 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];
	}
}
Ссылка на сообщение
Поделиться на другие сайты

Можете подробней разжевать? Этот цикл вызывает ошибку 500

foreach($items as &$product){
        if(isset($product->images[0]))
            $product->image = $product->images[0];
Ссылка на сообщение
Поделиться на другие сайты

Я не программист, посмотрите правильно вставил? Не работает, пустой экран .

<?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();
  }  
}
Ссылка на сообщение
Поделиться на другие сайты

нужно $p->image->filename а не $p->image

 

И в симпле закрыт доступ к изображениям оригиналам

 

Правильней изображения товара выводить так:

$this->design->resize_modifier($p->image->filename, 400)

Без никаких $image_url

Ссылка на сообщение
Поделиться на другие сайты
$this->design->resize_modifier($p->image->filename, 400, 400) 

 

Все работает, спасибо за помощь

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

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

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

Гость
Ответить в этой теме...

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

  Разрешено использовать не более 75 эмодзи.

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

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

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

Загрузка...
×
×
  • Создать...