Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Яндекс маркет... неправлеьное отображение


Fakamaz

Recommended Posts

помогите пожалуйста... Как я понял должен отображатся код в формате xml.

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

Вот исходник yml.php

<?php

class ControllerExportYml extends Controller {

public function index() {

if ($this->config->get('yandex_market_status')) {

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

$output .= '<!DOCTYPE yml_catalog SYSTEM "shops.dtd">';

$output .= '<yml_catalog date="' . date("Y-m-d H:m") . '">';

$output .= '<shop>' . "\n";

$output .= '<name>' . $this->config->get('config_store') . '</name>';

$output .= '<company>' . $this->config->get('config_meta_description') . '</company>';

$output .= '<url>' . HTTP_SERVER . '</url>'. "\n";

// Перечесляем валюту магазина

// TODO: Добавить возможность настраивать проценты.

$output .= '<currencies>';

$output .= '<currency id="RUR" rate="1"/>';

$output .= '</currencies>';

// Категории товаров

$this->load->model('catalog/category');

$output .= '<categories>';

$output .= $this->getCat();

$output .= '</categories>';

// Товарные позиции

$this->load->model('catalog/product');

$this->load->model('tool/image');

$output .= '<offers>';

$products = $this->model_catalog_product->getProducts();

foreach ($products as $product) {

$output .= '<offer id="'.$product['product_id'].'" available="true" bid="13">';

$output .= '<url>'.(HTTP_SERVER . 'index.php?token=' . $this->session->data['token'] . '&route=product/product&product_id=' . $product['product_id']).'</url>';

$output .= '<price>' . $this->tax->calculate($product['price'], $product['tax_class_id']) . '</price>';

$output .= '<currencyId>RUR</currencyId>';

// Определяем категорию для товара

$categories = $this->model_catalog_product->getCategories($product['product_id']);

$output .= '<categoryId>'.$categories[0]['category_id'].'</categoryId>';

// Определеяме изображение

if ($product['image']) {

$output .= '<picture>' . $this->model_tool_image->resize($product['image'], 500, 500) . '</picture>';

} else {

$output .= '<picture>' . $this->model_tool_image->resize('no_image.jpg', 500, 500) . '</picture>';

}

$output .= '<delivery> true </delivery>';

$output .= '<local_delivery_cost>300</local_delivery_cost>';

// $output .= '<typePrefix> </typePrefix>';

$output .= '<vendor>' . $product['manufacturer'] . '</vendor>';

// $output .= '<vendorCode> </vendorCode>';

$output .= '<model>'.$product['model'].'</model>';

$output .= '<description>'.htmlspecialchars(strip_tags(html_entity_decode($product['description']))) .' </description>';

$output .= '<manufacturer_warranty>true</manufacturer_warranty>';

$output .= '</offer>';

}

$output .= '</offers>';

$output .= '</shop>';

$output .= '</yml_catalog>';

$this->response->addHeader('Content-Type: application/xml');

$this->response->setOutput($output);

}

}

// Возвращает массив категорий

protected function getCat($pi=0) {

$categories = $this->model_catalog_category->getCategories($pi);

$out = '';

foreach ($categories as $category) {

$out .= '<category id="'.$category['category_id'].'"';

if($pi != 0) $out .= ' parentId="'.$pi.'"';

$out .='>'.$category['name'].'</category>';

if($e = $this->getCat($category['category_id'])) $out .= $e;

}

return $out;

}

}

?>

И ещё вопрос как исправить ссылку http://***/index.php?route=export/yml На http://***/ya.yml

Надіслати
Поділитися на інших сайтах


помогите пожалуйста... Как я понял должен отображатся код в формате xml.

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

Править еще не закончил, но этот вариант гораздо лучше текущего

Архив распаковать в корень, в админке прописать валюту и компанию.

И ещё вопрос как исправить ссылку http://***/index.php?route=export/yml На http://***/ya.yml

В .htaccess после

RewriteBase /

добавить

RewriteRule ^ya.yml$ index.php?route=export/yml [L]

yml.zip

  • +1 1
Надіслати
Поділитися на інших сайтах

Что-то с валютой не то...

Когда ставлю баксы - пишет:

Фатальная ошибка: Валюту USD нельзя использовать в качестве основной (строка 10, столбец 30)
Это, в принципе, понятно, т.к. по правилам ЯМ баксы, евро и т.д. нельзя использовать в качестве основной валюты.

Когда ставлю UAH:

Фатальная ошибка: Wrong rate value - too strong difference with CBRF rate: feed value: 0.09, national bank value: 11.2829 (строка 13, столбец 14)
Фатальная ошибка: Фид отклонен
Я так понимаю, это из-за того, что в сформированном файле валюты отображаютя так:

<currencies>
<currency id="UAH" rate="1"/>
<currency id="EUR" rate="0.09"/>
<currency id="USD" rate="0.1250"/>
</currencies>
А должны отображаться, примерно, так (как это настроено в моём магазине):

<currencies>
<currency id="UAH" rate="1"/>
<currency id="EUR" rate="11.11"/>
<currency id="USD" rate="8"/>
</currencies>
Т.е., переводит валюты "не в ту сторону". Хотя, если посмотреть цену товара, сформированную в файле, выдаваемом yml - то она правильно переводится. Например, если у меня что-то стоит 1 бакс, то при указании в модуле yml основной валюты - "ГРН", модуль выводит цену - 8 грн. (т.е., всё правильно).

Может эти приколы происходят из-за того, что у меня в магазине основаной валютой стоит бакс (цены на товары ввожу в долларах)? Надо бы как-то сие исправить.

ЗЫ. Кстати, так и не понял, при чём там в отлупе "CBRF" и "national bank"? Если "national bank" ещё как-то понять можно (магазин работает в Украине), то российский Центробанк здесь каким боком? Да и вообще, зачем с банками сравнивать валюту? У меня стоит внутренный курс, который я выставляю сам. При чём тут банки? Это мулька ЯМ? Т.е., он, в любом случае, будет сравнивать с банками? Или это косяк модуля yml?

ЗЗЫ. Yesvik, в любом случае, спасибо, что взялся переделывать. Там остальное гораздо лучше выглядит, чем в оригинальном, криво сделанном, модуле. :)

Надіслати
Поділитися на інших сайтах


Что-то с валютой не то...

Когда ставлю баксы - пишет:

Фатальная ошибка: Валюту USD нельзя использовать в качестве основной (строка 10, столбец 30)
Это, в принципе, понятно, т.к. по правилам ЯМ баксы, евро и т.д. нельзя использовать в качестве основной валюты.
Я упустил этот момент, исправлю так что-бы нельзя было выбрать USD и EUR.

Когда ставлю UAH:

Фатальная ошибка: Wrong rate value - too strong difference with CBRF rate: feed value: 0.09, national bank value: 11.2829 (строка 13, столбец 14)
Фатальная ошибка: Фид отклонен
Я так понимаю, это из-за того, что в сформированном файле валюты отображаютя так:

<currencies>
<currency id="UAH" rate="1"/>
<currency id="EUR" rate="0.09"/>
<currency id="USD" rate="0.1250"/>
</currencies>
Какая валюта указана в Система->Настройка->Размещение->Валюта?

Какая валюта указана по умолчанию в Система->Локализация->Валюты?

ЗЫ. Кстати, так и не понял, при чём там в отлупе "CBRF" и "national bank"? Если "national bank" ещё как-то понять можно (магазин работает в Украине), то российский Центробанк здесь каким боком? Да и вообще, зачем с банками сравнивать валюту? У меня стоит внутренный курс, который я выставляю сам. При чём тут банки? Это мулька ЯМ? Т.е., он, в любом случае, будет сравнивать с банками? Или это косяк модуля yml?

Это мулька ЯМ. При слишком значительном (больше 30%) отличии значения курса валюты от курса ЦБ РФ или НБУ информационные материалы считаются невалидными.
Надіслати
Поділитися на інших сайтах

Какая валюта указана в Система->Настройка->Размещение->Валюта?

USD

Какая валюта указана по умолчанию в Система->Локализация->Валюты?

USD

Цены ввожу в долларах (так мне гораздо удобнее). Продаю, согласно законодательства, в гривнах. :)

UPD

Резюмирую проблему:

В отображении товаров валюту конвертирует правильно. Т.е., там всё нормально.

А в отображении курсов валют, в теге <currencies>, отображает курс неправильно (не в ту сторону переводит). :)

Змінено користувачем monax
Надіслати
Поділитися на інших сайтах


А в отображении курсов валют, в теге <currencies>, отображает курс неправильно (не в ту сторону переводит). :)

Действительно, я с курсами начудил... выводил обратную величину.

В файле catalog/controller/export/yml.php найди строку (у меня это строка № 31)

$output .= '<currency id="' . $currency['code'] . '" rate="' . number_format ($this->currency->convert($currency['value'], $offers_currency, $shop_currency), 4, '.', '') . '"/>' . $eof;
и измени её вот так

$output .= '<currency id="' . $currency['code'] . '" rate="' . number_format (1/$this->currency->convert($currency['value'], $offers_currency, $shop_currency), 4, '.', '') . '"/>' . $eof;
  • +1 2
Надіслати
Поділитися на інших сайтах

C валютой теперь нормально. Но опять полезла ошибка:

Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Element 'model' is not valid for content model: '(url?,buyurl?,price,wprice?,currencyId,xCategory?,categoryId+,picture?,store?,pickup?,delivery?,deliveryIncluded?,local_delivery_cost?,orderingTime?,((typePrefix?,vendor,vendorCode?,model,((provider,tarifplan?))?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,binding?,page_extent?,table_of_contents?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,table_of_contents?,performed_by?,performance_type?,storage?,format?,recording_length?)|(artist?,title,year?,media?,starring?,director?,originalName?,country?)|(worldRegion?,country?,region?,days,dataTour*,name,hotel_stars?,room?,meal?,included,transport,price_min?,price_max?,options?)|(name,place,hall?,hall_part?,date,is_premiere?,is_kids?)|(name,vendor?,vendorCode?)),aliases?,additional*,description?,sales_notes?,promo?,manufacturer_warranty?,country_of_origin?,downloadable?,adult?,barcode*,param*)' (строка 71, столбец 9)
Как эту 71 строку найти, а в ней 9 столбец? Если открываю в Опере - там по-своему строки выдаёт, если в IE - там по-другому. А в Хроме ваще всё одной строкой...
Надіслати
Поділитися на інших сайтах


C валютой теперь нормально. Но опять полезла ошибка:

Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Element 'model' is not valid for content model: '(url?,buyurl?,price,wprice?,currencyId,xCategory?,categoryId+,picture?,store?,pickup?,delivery?,deliveryIncluded?,local_delivery_cost?,orderingTime?,((typePrefix?,vendor,vendorCode?,model,((provider,tarifplan?))?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,binding?,page_extent?,table_of_contents?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,table_of_contents?,performed_by?,performance_type?,storage?,format?,recording_length?)|(artist?,title,year?,media?,starring?,director?,originalName?,country?)|(worldRegion?,country?,region?,days,dataTour*,name,hotel_stars?,room?,meal?,included,transport,price_min?,price_max?,options?)|(name,place,hall?,hall_part?,date,is_premiere?,is_kids?)|(name,vendor?,vendorCode?)),aliases?,additional*,description?,sales_notes?,promo?,manufacturer_warranty?,country_of_origin?,downloadable?,adult?,barcode*,param*)' (строка 71, столбец 9)
Как эту 71 строку найти, а в ней 9 столбец? Если открываю в Опере - там по-своему строки выдаёт, если в IE - там по-другому. А в Хроме ваще всё одной строкой...
В 9 столбце строки 71 заканчивается элемент offer... но дело не в этом.

Дело в том что схема позволяет или vendor,vendorCode?,model или name,vendor?,vendorCode?

Другими словами name и model вместе не живут.

Для твоих товаров, мне кажется, больше подходит name,vendor?,vendorCode

Измени <model></model> на <vendorCode></vendorCode>

И ещё... В name элемента shop должно быть не более 20 символов, а у тебя в name 37 символов. Думаю надо в админке сделать ввод для поля name, как для company.

  • +1 1
Надіслати
Поділитися на інших сайтах

Yesvik, спасибо большое! Получилось. Даже не верится, что проверка прошла... :) Я уж думал, что ЯМ никогда не захавает мой файл! :)

ЗЫ. Дорисовал в админке ввод поля name, всё работает.

ЗЗЫ. Есть ещё пожелание по доработке. :rolleyes: Модуль выводит все введённые товары. А надо бы выводить только те товары, которые есть в наличии. Можешь прикрутить такое условие?

Надіслати
Поділитися на інших сайтах


ЗЗЫ. Есть ещё пожелание по доработке. :rolleyes: Модуль выводит все введённые товары. А надо бы выводить только те товары, которые есть в наличии. Можешь прикрутить такое условие?

Готового метода получения списка товаров имеющихся в наличии в OpenCart я не нашёл.

По хорошему надо написать запрос с проверкой количества, но самый простой метод решения этой задачи - проверять количество при формировании элементов offer

В файле catalog/controller/export/yml.php найди строку

foreach ($products as $product) {
и после этой строки добавь такую строку

if (!$product['quantity'] > 0) continue;

Если есть желание решить эту задачу на уровне SQL запроса - то в файле catalog/controller/export/yml.php вместо

$products = $this->model_catalog_product->getProducts();
надо написать

$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, wcd.unit AS weight_class FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' AND p.quantity > 0");
$products = $query->rows;
  • +1 1
Надіслати
Поділитися на інших сайтах

А какой вариант лучше? Т.е., какие плюсы и минусы у каждого варианта?

Первый вариант полностью полагается на стандартный метод получения списка товаров. Если в дальнейшем что-то изменится, например в структуре данных, тебя это не волнует - метод сформирует и вернёт тебе список. Минус этого варианта в том что если у тебя много товаров с нулевым количеством эти товары будут в списке. Т.е из базы будет извлекаться большой объём данных которые не будут использованы.

Второй вариант извлечёт из базы только те товары которые нужны для построения элементов offer, но если изменится структура данных надо будет вносить изменения в этот запрос.

Как по мне - второй вариант лучше. Я об этом намекал - "По хорошему надо написать запрос с проверкой количества"

И ещё... Времени не было и я к существующему запросу добавил условие на количество. Немного освобожусь и займусь допиливанием выгрузки на ЯМ, тогда и построю запрос полегче.

  • +1 1
Надіслати
Поділитися на інших сайтах

Определена кодировка: utf-8 (строка 0, столбец 0)

Дата из файла: 2011-04-09 02:07 (строка 3, столбец 127)

Предупреждение: Некорректный URL адрес картинки предложения: http://***/image/cache/data/clarion vma773-500x500.jpg (строка 1735, столбец 9)

Надо сделать чтобы яндекс видел эти изображения!

Пробывал так:

$img_v = $this->model_tool_image->resize($product['image'], 500, 500);

$output .= '<picture>' . str_replace(' ', '%20', $img_v . '</picture>' . $eof;

не получилось подскажите как сделать!

Надіслати
Поділитися на інших сайтах


Пробывал так:

$output .= '<picture>' . str_replace(' ', '%20', $img_v . '</picture>' . $eof;

Если пробывал именно так, то естественно не получится из-за синтаксической ошибки... пропущена закрывающая скобка.

Попробуй так:

$output .= '<picture>' . str_replace(' ', '%20', $img_v) . '</picture>' . $eof;
или так:

$output .= '<picture>' . str_replace(' ', '+', $img_v) . '</picture>' . $eof;

А лучше всего - никогда не использовать пробелы в именах файлов.

Змінено користувачем Yesvik
  • +1 1
Надіслати
Поділитися на інших сайтах

не помогает... Я бы правил бы картинки но их слишком много :( может кто нибудь ещё решение знает?

"слишком много" - это сколько?

Скопируй в корень сайта прикреплённый файл, и выполни его набрав в адресной строке браузера domain.tld/imgrename.php

после того как увидиш Ok! - удали файл imgrename.php, и желательно удалить или очистить директорию /image/cache/data/

Пробелы будут заменены на подчерк в именах файлов и в БД.

imgrename.php

Надіслати
Поділитися на інших сайтах

Спасибо! Давно искал поправленый модуль, думаю вам его стоит внедрить в основной модуль в основную сборку. Кстати есть небольшой глюк если например удалить все валюты кроме рублей то начинает ругатся на разницу валют :) но это мелочи

Надіслати
Поділитися на інших сайтах

Спасибо! Давно искал поправленый модуль, думаю вам его стоит внедрить в основной модуль в основную сборку. Кстати есть небольшой глюк если например удалить все валюты кроме рублей то начинает ругатся на разницу валют :) но это мелочи

А можно точный текст ругани почитать?
Надіслати
Поділитися на інших сайтах

А можно точный текст ругани почитать?

ошибка высвечивалась на английском при проверке яндекс маркета, точный текст не помню. но погуглев ошибку нашел ответ что проблема именно в разницах валют. поправил код на фиксированный как был в начальной поставке. после чего ошибка пропала.

Надіслати
Поділитися на інших сайтах

ошибка высвечивалась на английском при проверке яндекс маркета, точный текст не помню. но погуглев ошибку нашел ответ что проблема именно в разницах валют. поправил код на фиксированный как был в начальной поставке. после чего ошибка пропала.

Я выкладывал два варианта экспорта: 3 и 11 апреля, с каким вариантом возникала ошибка?
Надіслати
Поділитися на інших сайтах

А у меня выводит ошибку Ошибка HTTP 500 (Internal Server Error): и не знаю что делать, ни в браузере не могу открыть файл ни яндекс.маркет не видет! В чем может быть проблема?

Надіслати
Поділитися на інших сайтах


А у меня выводит ошибку Ошибка HTTP 500 (Internal Server Error): и не знаю что делать, ни в браузере не могу открыть файл ни яндекс.маркет не видет! В чем может быть проблема?

Попробуй в логи сервака заглянуть.
Надіслати
Поділитися на інших сайтах

"слишком много" - это сколько?

Скопируй в корень сайта прикреплённый файл, и выполни его набрав в адресной строке браузера domain.tld/imgrename.php

после того как увидиш Ok! - удали файл imgrename.php, и желательно удалить или очистить директорию /image/cache/data/

Пробелы будут заменены на подчерк в именах файлов и в БД.

Спс помогло :)
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.