Перейти к содержанию
torz

[Решено] Лента блога xml

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

Помогите решить вопрос!

нашел некий xml файл еа форуме он реализует RSS ленту товаров

я решил сделать ленту блога

и в общем уже несколько дней не могу решить пару вопросов

вот код который был взят за основу

<modification>
  <id>latest, pavbloglatest, and special products rss feed</id>
  <version>0.2.2</version>
  <vqmver>2.1.7</vqmver>
  <author>Tri Le trile7 at gmail dot com</author>

  <file name="catalog/view/theme/*/template/module/pavbloglatest.tpl">
    <operation>
      <search position="replace"><![CDATA[<?php echo $heading_title; ?>]]></search>
      <add><![CDATA[<?php echo "$heading_title <a href='".HTTP_SERVER."?rss=pavbloglatest' title='Subscribe to pavbloglatest Products'><img src='http://cdn1.iconfinder.com/data/icons/socialnetworking/16/rss.png' alt='Subscribe' /></a>"; ?>]]></add>
    </operation>
  </file>

 
  <file name="catalog/controller/common/header.php">
    <operation>
      <search position="after">protected function index</search>
      <add><![CDATA[
        $rss = isset($this->request->get["rss"]) ? $this->request->get["rss"] : "";
        if ($rss=="latest" || $rss=="pavbloglatest" || $rss=="special" || $rss=="bestseller") {
          $this->load->model("pavblog/blog");
          $this->load->model("catalog/product");
          $this->load->model("localisation/currency");
          $this->load->model("tool/image");
          $this->data["products"] = array();

          $limit = 10;
          $image_width = 100;
          $image_height = 100;
          $currency = $this->currency->getCode();

          if ($rss == "latest") {
            $data = array("sort"  => "p.date_added", "order" => "DESC", "start" => 0, "limit" => $limit);
            $products = $this->model_catalog_product->getProducts($data);
          }
          elseif ($rss == "pavbloglatest") {
            $blogs = $this->model_pavblog_blog->getListBlogs( $data );
            $this->data['heading_title'] = $this->language->get('text_latest');
          }
          elseif ($rss == "special") {
            $data = array("sort"  => "pd.name", "order" => "ASC", "start" => 0, "limit" => $limit);
            $products = $this->model_catalog_product->getProductSpecials($data);
          }
          elseif ($rss == "bestseller") {
            $data = array("sort"  => "pd.name", "order" => "ASC", "start" => 0, "limit" => $limit);
            $products = $this->model_catalog_product->getBestSellerProducts($limit);
          }

          $output = "<?xml version='1.0' encoding='UTF-8' ?>";
          $output .= "<rss version='2.0'>";
          $output .= "<channel>";
          $output .= "<title><![CDATA[" . $this->config->get("config_name") . " - Новостная лента]]]]><![CDATA[></title>";
          $output .= "<description><![CDATA[" . $this->config->get("config_meta_description") . "]]]]><![CDATA[></description>";
          $output .= "<link><![CDATA[" . HTTP_SERVER . "]]]]><![CDATA[></link>";
          $output .= "<pubDate>" . date('D, j F Y H:i:s e', strtotime($blog['created'])) . "</pubDate>";
          foreach ($blogs as $key => $blog) {
            $title = $blog['meta_title'] ? $blog['meta_title']:$blog['title'];
            $link = $this->url->link('pavblog/blog','blog_id='.$blog['blog_id']);                 

            $description = $blog[''] = html_entity_decode( $blog['description'] );
            
            $date = $blog['created'] = html_entity_decode( $blog['created'] );
            
            $image_url = $this->model_tool_image->resize($blog['image'], $setting['width'], $setting['height'] );
                    
            if ($image_url) $description .= "<p><a href='$link'><img src='$image_url' alt=''></a></p>";
          

            if ($rss != "special" || $special) {
              $output .= "<item>";
              $output .= "<title><![CDATA[" . html_entity_decode($title, ENT_QUOTES, "UTF-8") . "]]]]><![CDATA[></title>";
              $output .= "<link><![CDATA[" . html_entity_decode($link, ENT_QUOTES, "UTF-8") . "]]]]><![CDATA[></link>";
              $output .= "<description><![CDATA[" . html_entity_decode($description, ENT_QUOTES, "UTF-8") . "]]]]><![CDATA[></description>";
              $output .= "<guid><![CDATA[" . html_entity_decode($link, ENT_QUOTES, "UTF-8") . "]]]]><![CDATA[></guid>";
              $output .= "<pubDate>" . date('D, j F Y H:i:s e', strtotime($blog['created'])) . "</pubDate>";
              $output .= "</item>";
            }
          }
          $output .= "</channel>";
          $output .= "</rss>";

          header("Content-Type: application/rss+xml");
          echo "$output";
          die();
        }
      ]]></add>
    </operation>
  </file>

</modification>

а вот сам адрес ленты http://светля4ок.com.ua/?rss=pavbloglatest

что не получается:

не могу выводить последние добавленные блоги

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

я думал изменить ID блогов так как первый 24 а второй 25 но может есть другой выход

не могу установить лимит выводимых новостей

не могу все фотки резать чтоб одинаковые были

не могу вывести дату

и может есть возможность каждую новость как кто выделить, тобишь отсоединить друг от друга, чтобы не сливалось все, как вариант Дату отображать )))

использую блог Pav Blog

спасибо всем откликнувшимся!

Поделиться сообщением


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

Да вьетнамские  павлики идиоты полные :) :ugeek:

Они для RSS сделали отдельный vqmod (Карл, vqmod!)  код, хотя он отличается от вывода списка записей или продуктов всего то шаблоном

Поделиться сообщением


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

Проблема здесь

 

if ($rss == "latest") {
            $data = array("sort"  => "p.date_added", "order" => "DESC", "start" => 0, "limit" => $limit);
            $products = $this->model_catalog_product->getProducts($data);
          }

 

Скорее всего (99%) в вызове самого метода павликов - там если нет этого параметра то берется по умолчанию opencart

 

$blogs = $this->model_pavblog_blog->getListBlogs( $data );

 

Здесь нет $limit

 

Сделайте так

$data = array("sort"  => "p.date_added", "order" => "DESC", "start" => 0, "limit" => '111111');
$blogs = $this->model_pavblog_blog->getListBlogs( $data );

Поделиться сообщением


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

Спасибо большое только я чуток изменил может куму пригодится

$data = array("sort"  => "b.created", "order" => "DESC", "start" => 0, "limit" => '10');
$blogs = $this->model_pavblog_blog->getListBlogs( $data );
а как же дату вывести? Изменено пользователем afwollis

Поделиться сообщением


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

Дату вывел кому интересно

заменил

<pubDate>" . date('D, j F Y H:i:s e', strtotime($blog['created'])) . "</pubDate>";

на

$output .= "<pubDate>" . date("Y, n d ",strtotime($blog['created'])) . "</pubDate>";

только одно смущает что время показывает на всех блогах 0:00

Так остался еще вопрос по размеру фотки как бы это решить чтоб она обрезалась под нужный размер?

Поделиться сообщением


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

Дату вывел кому интересно

заменил

<pubDate>" . date('D, j F Y H:i:s e', strtotime($blog['created'])) . "</pubDate>";

на

$output .= "<pubDate>" . date("Y, n d ",strtotime($blog['created'])) . "</pubDate>";

только одно смущает что время показывает на всех блогах 0:00

Так остался еще вопрос по размеру фотки как бы это решить чтоб она обрезалась под нужный размер?

не это все фигня не проходит так валидацию

так что оставляем вот так

$output .= "<pubDate>" . date("D, d M Y H:i:s O",strtotime($blog['created'])) . "</pubDate>";

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.