Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


Fakamaz
 Поделиться

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

помогите пожалуйста... Как я понял должен отображатся код в формате 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 апреля, с каким вариантом возникала ошибка?
Ссылка на комментарий
Поделиться на других сайтах

Последний архив от 11 апреля. Можете сами попробовать у себя например удалить все валюты кроме рубля, думаю эта ошибка и появится

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

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

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


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

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

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

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

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

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

Спс помогло :)
Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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