Форум русской поддержки Joomla!® CMS
10.12.2016, 09:05:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 23   Вниз
  Добавить закладку  |  Печать  
Автор

Выгрузка товаров в Яндекс.Маркет для VirtueMart 2.x, VirtueMart 3.x

 (Прочитано 70414 раз)
0 Пользователей и 1 Гость смотрят эту тему.
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« : 27.01.2012, 05:29:31 »

Скачать

Распакуйте архив, скопируйте папку market на сервер в корень сайта (там где configuration.php), в настройках якдеса укажите ссылку http://ваш_сайт/market/vm2_market.php

Скрипт работает на VirtueMart 2.x и VirtueMart 3.x

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


Donate:
  R192256315354 Webmoney
  410011118020069 Яндекс деньги
  +380988414221 киви
  4149625804107173 карта приватбанка
« Последнее редактирование: 16.09.2016, 15:27:20 от icom » Записан
 
sm_ph
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #1 : 27.01.2012, 13:04:28 »

Работает, но в самом конце выдает:
</offer>

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

В чём может быть причина?
« Последнее редактирование: 27.01.2012, 13:09:40 от sm_ph » Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #2 : 27.01.2012, 15:19:51 »

покажите список таблиц в бд (virtuemart)
virtuemart последней версии?
Записан
sm_ph
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #3 : 27.01.2012, 15:27:51 »

В строке 71 изменил соответственно $lang = 'en_gb'; на $lang = 'ru_ru';
Показать текстовый блок
« Последнее редактирование: 22.03.2012, 18:32:46 от flyingspook » Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #4 : 27.01.2012, 18:50:36 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #5 : 27.01.2012, 19:11:32 »

Спасибо!
Теперь всё работает.
Единственное у меня ссылка на страницу товара другая, заменил

$sef_menu_item = 'component/virtuemart/';
на
$sef_menu_item = 'index.php/component/virtuemart/';
« Последнее редактирование: 27.01.2012, 19:33:18 от sm_ph » Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #6 : 27.01.2012, 19:58:07 »

Цитировать
$sef_menu_item = 'component/virtuemart/';
на
$sef_menu_item = 'index.php/component/virtuemart/';
это да, нужно вручную вводить, так как у каждого по разному может быть, если присвоить какому нибудь пункту меню тип "VirtueMart Default Layout", то вместо "component/virtuemart/", нужно вставить алиас этого пункта меню

но так 'index.php/component/virtuemart/' не должно быть, вы не включили "Use URL rewriting" в настройках наверное
Записан
Plitka
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 3


« Ответ #7 : 01.02.2012, 15:18:41 »

И не забыть учесть кодировку, если везде используется юникод:

mysql_query('set names utf8');
echo"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #8 : 01.02.2012, 16:48:51 »

И не забыть учесть кодировку, если везде используется юникод:

mysql_query('set names utf8');
echo"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
изначально Яндекс принимал только в кодировке windows-1251, так что конструкция
Код:
echo"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
не прошла бы, сейчас точно не знаю, много поменялось, если так тоже можно то скрипт доработаю или сделаю кодировку на выбор
Записан
azar
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Сообщений: 20


« Ответ #9 : 05.02.2012, 13:46:04 »

Добрый день.
Определена кодировка: ibm866 (строка 0, столбец 0)
Дата из файла: 2012-02-05 12:28 (строка 3, столбец 38)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Element 'vendor' 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*)' (строка 556, столбец 9)
Что-то не пошло
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #10 : 05.02.2012, 23:54:47 »

что-то ничего не понятно, дайте в личку адрес сайта
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #11 : 08.02.2012, 17:42:58 »

исправил, добавил тип vendor.model к товарам у которых есть производитель, без этого Яндекс почему-то не принимает, хотя сказано что элемент <vendor> можно использовать в двух типах описания товарного предложения — упрощенном и vendor.model
Записан
sm_ph
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 16


« Ответ #12 : 09.02.2012, 16:03:51 »

Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

<categories>
Table 'cp621610_shopj17vm2.ddfs8_virtuemart_categories_' doesn't exist

Магазин при этом функционирует нормально.
Записан
savenko
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 83


« Ответ #13 : 09.02.2012, 17:52:52 »

Здравствуйте!
Надеюсь icom не будет возрожать что я немного допилил его работу:
Пофиксино и добавлено:
1) Автоматическое изменение вида ссылок с  алиасов в виде Unicode на простые не SEF
2) Учитываются скидки в выгрузке.
3) Автоматически подставляются значения из Joomla в поле "описание организации" и "название организации"
4) По мелочи добавлены новые поля для вывода.

P.S. Файл из архива просто кладем в корень и проверяем выгрузку в Яндекс маркете.
Если автор возвражает против доделок то пусть пишет мне.

P.S.S Можно вести совместную разработку используя SVN если автор не против.


[вложение удалено Администратором]
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #14 : 10.02.2012, 02:16:40 »

Цитировать
1) Автоматическое изменение вида ссылок с  алиасов в виде Unicode на простые не SEF
2) Учитываются скидки в выгрузке.
3) Автоматически подставляются значения из Joomla в поле "описание организации" и "название организации"
4) По мелочи добавлены новые поля для вывода.

1) это не понял, объясните подробнее как настройка Joomla "Unicode Aliases", влияет на ссылки Virtuemart
2) это добавлю
3) "название сайта" и "название организации" это разные вещи, и "название организации" не тоже что и "описание организации" Azn, у вас почему-то там и там стоит $conf->sitename, пока оставлю как есть
4) это уже каждый сам пусть решает что нужно, если чего-то не хватает то для того и форум, спросил - сказали как добавить, а добавлять, например <manufacturer_warranty> (гарантия производителя), пока не буду, так как в большинстве своем мало у кого есть эта гарантия, а лишний раз добавлять в код if - else не стоит, кажется ничего страшного, но сколько товаров в магазине столько и будет лишняя проверка
if ((bool)trim($manufacturer_warranty)){
      echo "<manufacturer_warranty>".htmlspecialchars(strip_tags($manufacturer_warranty))."</manufacturer_warranty>\n";
}
тем более вы немного неправильно написали, (bool) и trim() не надо, можно просто if ($manufacturer_warranty){, и "htmlspecialchars(strip_tags($manufacturer_warranty))" тоже лишнее, в переменной $manufacturer_warranty стоит "true", там нечего экранировать или удалять HTML теги, и в XML файле между тегами <manufacturer_warranty> и </manufacturer_warranty> должно стоять только слово "true" и ничего больше, из всего этого выплывает что правильнее будет так
if ($manufacturer_warranty) {
    echo "<manufacturer_warranty>true</manufacturer_warranty>\n";
}

Против доделок не возражаю, если они целесообразны

"вести совместную разработку используя SVN" - нечего тут вести, скрипт маленький, задача не сложная, могу просто в первом посте вписать тех, кто что-то добавил)
« Последнее редактирование: 10.02.2012, 02:19:59 от icom » Записан
savenko
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 83


« Ответ #15 : 10.02.2012, 02:54:20 »

1) это не понял, объясните подробнее как настройка Joomla "Unicode Aliases", влияет на ссылки Virtuemart
2) это добавлю
3) "название сайта" и "название организации" это разные вещи, и "название организации" не тоже что и "описание организации" Azn, у вас почему-то там и там стоит $conf->sitename, пока оставлю как есть
4) это уже каждый сам пусть решает что нужно, если чего-то не хватает то для того и форум, спросил - сказали как добавить, а добавлять, например <manufacturer_warranty> (гарантия производителя), пока не буду, так как в большинстве своем мало у кого есть эта гарантия, а лишний раз добавлять в код if - else не стоит, кажется ничего страшного, но сколько товаров в магазине столько и будет лишняя проверка
if ((bool)trim($manufacturer_warranty)){
      echo "<manufacturer_warranty>".htmlspecialchars(strip_tags($manufacturer_warranty))."</manufacturer_warranty>\n";
}
тем более вы немного неправильно написали, (bool) и trim() не надо, можно просто if ($manufacturer_warranty){, и "htmlspecialchars(strip_tags($manufacturer_warranty))" тоже лишнее, в переменной $manufacturer_warranty стоит "true", там нечего экранировать или удалять HTML теги, и в XML файле между тегами <manufacturer_warranty> и </manufacturer_warranty> должно стоять только слово "true" и ничего больше, из всего этого выплывает что правильнее будет так
if ($manufacturer_warranty) {
    echo "<manufacturer_warranty>true</manufacturer_warranty>\n";
}

Против доделок не возражаю, если они целесообразны

"вести совместную разработку используя SVN" - нечего тут вести, скрипт маленький, задача не сложная, могу просто в первом посте вписать тех, кто что-то добавил)


1) Яндекс маркет не принимает ссылки с кирилицей. Например если пользователь поставит Unicode Aliases и у него SEF сылка стала www.shop.ru/машина/ford то такая ссылка не пройдет в яндексе.
3) Сделано, что бы пользователь положил в корень сайта файл и не чего ручками делать не нужно было бы ему.
4) trim нужен, все таки предпологается что файл будут править люди для которых программирование это что-то далекое и поэтому для них "true ", " true" это одно и то же.
Согласен перемутил, копировал строчку. Только нужно поставить еще сравнение if ($manufacturer_warranty=="true")  так как если пользователь прировняет значени к строке "false" это будет true как и любая другая строка типа "trues", "trye" и т.д
« Последнее редактирование: 10.02.2012, 12:23:20 от savenko » Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #16 : 10.02.2012, 13:18:48 »

1) Понял, добавлю
3) Ручками нужно все равно делать что-то, у некоторых $conf->sitename выглядит вот так:
"Моторезина I Мотошины I Кофры для мотоцикла в интернет-магазине НАЗВАНИЕ МАГАЗИНА"
а имя организации не должно превышать 20 символов, я сделал чтоб название резало до 20, но все же
4) if ($manufacturer_warranty == "true") верно, но если уже так, то лучше
if ($manufacturer_warranty === "true")

вот пример

$manufacturer_warranty = "true";
if ($manufacturer_warranty == "true") {
   echo $manufacturer_warranty;
}
выведет true

$manufacturer_warranty = true;
if ($manufacturer_warranty == "true") {
   echo $manufacturer_warranty;
}
выведет 1

т.е. true и "true" для PHP одно и то же, но выводит разные результаты Azn, так что еще нужно проверять тип данных
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #17 : 10.02.2012, 15:30:32 »

Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

<categories>
Table 'cp621610_shopj17vm2.ddfs8_virtuemart_categories_' doesn't exist

Магазин при этом функционирует нормально.
это потому что скрипт не смог найти в настройках VirtueMart переменную vmlang, не знаю почему так, или версия VirtueMart не та, или после восстановления нужно пересохранить настройки из админки, но на всякий случай я в скрипте предусмотрел такую ситуацию, если переменной vmlang нет, то подставляется 'ru_ru'.

Также добавил следующие:
1) Автоматическое изменение вида ссылок с  алиасов в виде Unicode на простые не SEF (от пользователя savenko)
2) Учитываются скидки (от пользователя savenko)
3) Добавил возможность исключать из выгрузки ненужные товары и категории
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #18 : 10.02.2012, 15:38:40 »

Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

<categories>
Table 'cp621610_shopj17vm2.ddfs8_virtuemart_categories_' doesn't exist

Магазин при этом функционирует нормально.

проверил, нужно просто пересохранить настройки VirtueMart из админки
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #19 : 10.02.2012, 16:43:23 »

добавил возможность "статической" выгрузки, если значение переменной $file равно 1, то создается файл vm2_market.xml, т. е. в настройках яндекса нужно указать http://ваш_сайт/market/vm2_market.xml, данные будут генерироваться только тогда когда вбить в адресную строку http://ваш_сайт/market/vm2_market.php и запустить

если  $file равно 0, то в настройках яндекса указать http://ваш_сайт/market/vm2_market.php и данные будут генерироваться при каждом обращении бота
Записан
злобный ламер
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 195



« Ответ #20 : 15.02.2012, 06:37:57 »

Предлагаю админам прикрепить тему.
Разработчикам большое спасибо.
Записан
slutsker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #21 : 12.03.2012, 11:04:05 »

Joomla 2.5.2 Vertuemart 2.0.2
вот такой вопрос по выгрузке в маркет:
как сделать, чтобы можно было некоторым позициям прописывать "гарантия производителя", а некоторым нет?
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #22 : 13.03.2012, 00:22:06 »

можно заполнить какой-то ненужный атрибут у тех товаров в которых есть гарантия, например Product Height, а в файле экспорта проверять это значение, например чтоб такое реализовать, нужно добавить в строке 151 а.product_height    
Код:
$query = "SELECT a.virtuemart_product_id, а.product_height, b.product_name, b.slug, c.file_url, b.product_desc, d.product_price, d.product_override_price, e.mf_name, f.virtuemart_manufacturer_id, g.virtuemart_category_id FROM ($tab_product_categories g LEFT JOIN ($tab_product_prices d RIGHT JOIN (($tab_product_manufacturers f RIGHT JOIN $tab_products a ON f.virtuemart_product_id = a.virtuemart_product_id) LEFT JOIN $tab_manufacturer_lang e ON f.virtuemart_manufacturer_id = e.virtuemart_manufacturer_id LEFT JOIN $tab_products_lang b ON b.virtuemart_product_id = a.virtuemart_product_id LEFT JOIN $tab_product_medias h ON h.virtuemart_product_id = a.virtuemart_product_id LEFT JOIN $tab_medias c ON c.virtuemart_media_id = h.virtuemart_media_id) ON d.virtuemart_product_id = a.virtuemart_product_id) ON g.virtuemart_product_id = a.virtuemart_product_id) WHERE a.published = '1' AND d.product_price > '0' AND b.product_name <> '' AND g.virtuemart_category_id NOT IN ($exclude_cat) AND a.virtuemart_product_id NOT IN ($exclude_prod)";

потом после 200 строки добавить
Код:
if ($row[$i]['product_height'])
    $xml .= "<manufacturer_warranty>true</manufacturer_warranty>\n";
Записан
slutsker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #23 : 13.03.2012, 00:38:43 »

спасибо, попробую
Записан
Alex Revo
Практически профи
*******

Репутация: +108/-0
Offline Offline

Пол: Мужской
Сообщений: 1971


« Ответ #24 : 22.03.2012, 02:11:39 »

Вставлю свои 5 копеек в тестирование решения:
1. В коде лучше предусмотреть все варианты когда значения важных полей пустые - например, имя категории или товара (сам столкнулся с этим)
2. Путь к фото товара может содержать пробелы, решил так:
$xml .= "<picture>".$live_site.(str_replace(" ","%20", $row[$i]['file_url']))."</picture>\n";
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #25 : 22.03.2012, 18:02:36 »

Вставлю свои 5 копеек в тестирование решения:
1. В коде лучше предусмотреть все варианты когда значения важных полей пустые - например, имя категории или товара (сам столкнулся с этим)
2. Путь к фото товара может содержать пробелы, решил так:
$xml .= "<picture>".$live_site.(str_replace(" ","%20", $row[$i]['file_url']))."</picture>\n";
добавил
Записан
slutsker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #26 : 23.03.2012, 12:09:47 »

подскажите, как лучше сделать в случае временного отсутствия товара в магазине?
сейчас - когда на складе нет товара - в XML просто не выводится его цена
Записан
Alex Revo
Практически профи
*******

Репутация: +108/-0
Offline Offline

Пол: Мужской
Сообщений: 1971


« Ответ #27 : 23.03.2012, 12:15:16 »

На мой взгляд можно делать так:
либо менять статус available c true на false, тогда на Маркете товар будет под заказ, либо вообще не выгружать этот товаров в xml
проверку наличия делаем соотв. по полу остаток на складе
Записан
icom
Завсегдатай
*****

Репутация: +180/-4
Offline Offline

Пол: Мужской
Сообщений: 780


« Ответ #28 : 23.03.2012, 15:09:13 »

подскажите, как лучше сделать в случае временного отсутствия товара в магазине?
сейчас - когда на складе нет товара - в XML просто не выводится его цена
чтоб сделать как написано выше, нужно:
вытащить из базы количество на складе (дописать в запрос a.product_in_stock)
Код:
$query = "SELECT a.virtuemart_product_id, a.product_in_stock, b.product_name....

чтоб вообще не выгружать товары которых нет на складе (строка 170):
Код:
if (!in_array($row[$i]['virtuemart_product_id'], $product_log) && $row[$i]['product_price']) {
заменить на
Код:
if (!in_array($row[$i]['virtuemart_product_id'], $product_log) && $row[$i]['product_price'] && $row[$i]['product_in_stock']) {

или менять статус available (строка 189):
Код:
$xml .= "\n<offer".$type." id=\"$product_id\" available=\"true\">\n";
заменить на
Код:
$available = $row[$i]['product_in_stock'] ? 'true' : 'false';
$xml .= "\n<offer".$type." id=\"$product_id\" available=\"$available\">\n";
« Последнее редактирование: 23.03.2012, 15:19:29 от icom » Записан
slutsker
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 24


« Ответ #29 : 03.04.2012, 15:46:52 »

большое спасибо за помощь!
у меня ещё такие вопросы

1 - у меня есть 2 категории - пример - пылесосы (id=1) в ней подкатегория моющие пылесосы (id=2)
есть суперпылесос, который отнесен к обеим категориям
в XML к этому товару <categoryId>1</categoryId>,<categoryId>2</categoryId> или <categoryId>1,2</categoryId>

2 - ссылки, которые попадают в XML не открываются
в XML они имеют вид http://magazin.ru/component/virtuemart/pilesos/superpilesos
а не http://magazin.ru/index.php/pilesos/superpilesos
я сделал $sef_menu_item = 'index.php/'; и ссылки работают - надеюсь, что это верное решение
« Последнее редактирование: 03.04.2012, 16:22:57 от slutsker » Записан
Страниц: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 23   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet