Не могу понять где ошибка

Maximke

Постоялец
Регистрация
22 Июл 2015
Сообщения
117
Реакции
7
Opencart 1.5.6.4
Модуль експорта хмл товаров, не могу понять почему не показывает название категории, а ссылку на категорию вставляет без $path
index.php?route=product/category&path=&currency=EUR

Этот же модуль на opencart 1.5.4 работает нормально

Код:
<?php
class ControllerFeedShopXML extends Controller {
    private $currencies = array();

    public function index() {
        if ($this->config->get('shopxml_status')) {

$xmlstr = '<?xml version="1.0" encoding="utf-8" ?>

<root></root>';

$xml = new SimpleXMLElement($xmlstr);

if(isset($_GET["lang_export"])){
    $languages = array();
    $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "language` WHERE status = '1'");
    foreach($query->rows as $result){
        $languages[$result['code']] = $result;
    }
    if(isset($languages[$_GET["lang_export"]]["language_id"])){
        $this->config->set("config_language", $_GET["lang_export"]);
        $this->config->set("config_language_id", $languages[$_GET["lang_export"]]["language_id"]);
    }
}

$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('tool/image');
$products = $this->model_catalog_product->getProducts();
foreach($products as $product){
    $item = $xml->addChild('item');
    $item->name = $product['name'];
    if(isset($product["description"]) && isset($_GET["desc_export"])){
        $item->description =  html_entity_decode($product['description'], ENT_QUOTES, 'UTF-8') ;
    }

    if($product['image']){
        $item->image = $this->model_tool_image->resize($product['image'], 500, 500);
    } else{
        $item->image = $this->model_tool_image->resize('no_image.jpg', 500, 500);
    }
    $categories = $this->model_catalog_product->getCategories($product['product_id']);
    $string = '';
    $lastCat = '';
    $caturl = '';
    foreach($categories as $category){
        $path = $this->getPath($category['category_id']);
        $caturl = HTTP_SERVER . $this->config->get("config_language").'/'.'index.php?route=product/category&path=' . $path;
        if($path){
            foreach(explode('_', $path) as $path_id){
                $category_info = $this->model_catalog_category->getCategory($path_id);
                $lastCat = $category_info['name'];
                if($category_info){
                    if(!$string){
                        $string = $category_info['name'];
                    } else{
                        $string .= ' >> ' . $category_info['name'];
                    }
                }
            }
        }
        break;
    }

    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency");

       foreach ($query->rows as $result) {
           if($result['status'] == 1){
                 $this->currencies[$result['code']] = array(
                       'currency_id'   => $result['currency_id'],
                       'title'         => $result['title'],
                       'symbol_left'   => $result['symbol_left'],
                       'symbol_right'  => $result['symbol_right'],
                       'decimal_place' => $result['decimal_place'],
                       'value'         => $result['value']
                 );
           }
       }

    if(isset($this->request->get['cur_export']) && (array_key_exists($this->request->get['cur_export'], $this->currencies))){
        $this->currency->set($this->request->get['cur_export']);
    } else{
        $this->currency->set($this->config->get('config_currency'));
    }

    $currency_code = $this->currency->getCode();
    $currency_value = $this->currency->getValue();

    $item->link = HTTP_SERVER .'?route=product/product&product_id=' . $product['product_id'].'&currency='.$currency_code;
    $caturl .= '&currency='.$currency_code;



    if((float)$product['special']){
        $item->price = $this->currency->format($this->tax->calculate($product['special'],
            $product['tax_class_id']),
            $currency_code,
            $currency_value,
            false);
    } else{
        $item->price = $this->currency->format($this->tax->calculate($product['price'],
            $product['tax_class_id']),
            $currency_code,
            $currency_value,
            false);
    }
    $item->category = $lastCat;
    $item->category_full = $string;
    $item->category_link = $caturl;
    $item->manufacturer = $product['manufacturer'];
    $item->model = $product['model'];
    $item->in_stock = $product['quantity'];
    $item->upc = $product['quantity'];
    $item->weight = $product['weight'];
}
$this->response->addHeader('Content-Type: application/xml');
$this->response->setOutput($xml->asXML());





        }







    }

    protected function getPath($parent_id, $current_path = '') {
        $category_info = $this->model_catalog_category->getCategory($parent_id);
        if ($category_info) {
            if (!$current_path) {
                $new_path = $category_info['category_id'];
            } else {
                $new_path = $category_info['category_id'] . '_' . $current_path;
            }

            $path = $this->getPath($category_info['parent_id'], $new_path);
            if ($path) {
                return $path;
            } else {
                return $new_path;
            }
        }
    }
}
?>


Не пойму почему не работает

Код:
$caturl = HTTP_SERVER . $this->config->get("config_language").'/'.'index.php?route=product/category&path=' . $path;
        if($path){
            foreach(explode('_', $path) as $path_id){
                $category_info = $this->model_catalog_category->getCategory($path_id);
                $lastCat = $category_info['name'];
                if($category_info){
                    if(!$string){
                        $string = $category_info['name'];
                    } else{
                        $string .= ' >> ' . $category_info['name'];

Генерирует ссылку но ID категории не пишет, точно так же как и название категории :(
 
Последнее редактирование:
1. Проверьте разные версии модулей - возможно глюк версий
2. Если не помогло - выложите сюда ваш сгенерированный файл
Подписывайте коды, которые вы публикуете - вам же быстрее помогут :)
 
1. Проверьте разные версии модулей - возможно глюк версий
2. Если не помогло - выложите сюда ваш сгенерированный файл
Подписывайте коды, которые вы публикуете - вам же быстрее помогут :)

К сожалению у меня нету модуля других версий :( В принципе подошел бы любой вывод товаров в xml формате. Мне нужно в выводе: название товара, сылка на товар, цена, ссылка на картинку, название категории, ссылка на категорию, производитеь, модеь и количество товара.
 
Последнее редактирование:
Код вывода:
Код:
<?php
class ControllerFeedShopXML extends Controller {
    private $currencies = array();

    public function index() {
        if ($this->config->get('shopxml_status')) {

$xmlstr = '<?xml version="1.0" encoding="utf-8" ?>

<root></root>';

$xml = new SimpleXMLElement($xmlstr);

if(isset($_GET["lang_export"])){
    $languages = array();
    $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "language` WHERE status = '1'");
    foreach($query->rows as $result){
        $languages[$result['code']] = $result;
    }
    if(isset($languages[$_GET["lang_export"]]["language_id"])){
        $this->config->set("config_language", $_GET["lang_export"]);
        $this->config->set("config_language_id", $languages[$_GET["lang_export"]]["language_id"]);
    }
}

$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('tool/image');
$products = $this->model_catalog_product->getProducts();
foreach($products as $product){
    $item = $xml->addChild('item');
    $item->name = $product['name'];
    if(isset($product["description"]) && isset($_GET["desc_export"])){
        $item->description =  html_entity_decode($product['description'], ENT_QUOTES, 'UTF-8') ;
    }

    if($product['image']){
        $item->image = $this->model_tool_image->resize($product['image'], 500, 500);
    } else{
        $item->image = $this->model_tool_image->resize('no_image.jpg', 500, 500);
    }
    $categories = $this->model_catalog_product->getCategories($product['product_id']);
   
    foreach($categories as $category){
        $path = $this->getPath($category['category_id']);
        $caturl = HTTP_SERVER .'index.php?route=product/category&path=' . $path;
        if($path){
            foreach(explode('_', $path) as $path_id){
                $category_info = $this->model_catalog_category->getCategory($path_id);
                $lastCat = $category_info['name'];
                if($category_info){
                    if(!$string){
                        $string = $category_info['name'];
                    } else{
                        $string .= ' >> ' . $category_info['name'];
                    }
                }
            }
        }
        break;
    }

    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency");

       foreach ($query->rows as $result) {
           if($result['status'] == 1){
                 $this->currencies[$result['code']] = array(
                       'currency_id'   => $result['currency_id'],
                       'title'         => $result['title'],
                       'symbol_left'   => $result['symbol_left'],
                       'symbol_right'  => $result['symbol_right'],
                       'decimal_place' => $result['decimal_place'],
                       'value'         => $result['value']
                 );
           }
       }

    if(isset($this->request->get['cur_export']) && (array_key_exists($this->request->get['cur_export'], $this->currencies))){
        $this->currency->set($this->request->get['cur_export']);
    } else{
        $this->currency->set($this->config->get('config_currency'));
    }

    $currency_code = $this->currency->getCode();
    $currency_value = $this->currency->getValue();

    $item->link = HTTP_SERVER .'?route=product/product&product_id=' . $product['product_id'].'&currency='.$currency_code;
   


    if((float)$product['special']){
        $item->price = $this->currency->format($this->tax->calculate($product['special'],
            $product['tax_class_id']),
            $currency_code,
            $currency_value,
            false);
    } else{
        $item->price = $this->currency->format($this->tax->calculate($product['price'],
            $product['tax_class_id']),
            $currency_code,
            $currency_value,
            false);
    }
    $item->category = $lastCat;
    $item->category_full = $string;
    $item->category_link = $caturl;
    $item->manufacturer = $product['manufacturer'];
    $item->model = $product['model'];
    $item->in_stock = $product['quantity'];
    $item->upc = $product['quantity'];
    $item->weight = $product['weight'];
}
$this->response->addHeader('Content-Type: application/xml');
$this->response->setOutput($xml->asXML());





        }







    }

    protected function getPath($parent_id, $current_path = '') {
        $category_info = $this->model_catalog_category->getCategory($parent_id);
        if ($category_info) {
            if (!$current_path) {
                $new_path = $category_info['category_id'];
            } else {
                $new_path = $category_info['category_id'] . '_' . $current_path;
            }

            $path = $this->getPath($category_info['parent_id'], $new_path);
            if ($path) {
                return $path;
            } else {
                return $new_path;
            }
        }
    }
}
?>


Ошибки в журнале:

Код:
2016-01-26 13:05:24 - PHP Notice:  Undefined variable: lastCat in /home/сайт/public_html/catalog/controller/feed/shopxml.php on line 104
2016-01-26 13:05:24 - PHP Notice:  Undefined variable: string in /home/сайт/public_html/catalog/controller/feed/shopxml.php on line 105

Проблема в том, что модуль не выводить название и номер категории в xml..

Что выводит в хмл:
Код:
<item>
<name>
название товара
</name>
<image>
http://сылка на картинку.jpg
</image>
<link>
http://сайт/?route=product/product&product_id=49&currency=EUR
</link>
<price>150.00</price>
<category/>
<category_full/>
<category_link>
http://сайт/index.php?route=product/category&path=
</category_link>
<manufacturer/>
<model>DL-ES-BW009-AC1</model>
<in_stock>2</in_stock>
<upc>2</upc>
<weight>0.00000000</weight>
</item>
 
Попробуйте Total Import PRO и Smart Export/Import, оба модуля для OpenCart, не вызывали проблем обычно.
 
Попробуйте Total Import PRO и Smart Export/Import, оба модуля для OpenCart, не вызывали проблем обычно.
Мне нужен модуль который генерирует хмл файл всех товаров, разве тотал импорт про делает подобное?
 
Назад
Сверху