0 Пользователей и 1 Гость просматривают эту тему.
  • 784 Ответов
  • 109847 Просмотров
*

icom

  • Давно я тут
  • 822
  • 199 / 4
Скачать

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

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

Для начала работы, откройте vm2_market.php и отредактируйте значения первых семи констант под свой магазин.
« Последнее редактирование: 05.09.2020, 15:34:51 от icom »
*

sm_ph

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Работает, но в самом конце выдает:
</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

  • Давно я тут
  • 822
  • 199 / 4
покажите список таблиц в бд (virtuemart)
virtuemart последней версии?
*

sm_ph

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
В строке 71 изменил соответственно $lang = 'en_gb'; на $lang = 'ru_ru';
Спойлер
[свернуть]
« Последнее редактирование: 22.03.2012, 18:32:46 от flyingspook »
*

icom

  • Давно я тут
  • 822
  • 199 / 4
скрипт тянул с базы товары без категории, потому была ошибка
исправил, архив обновил...
язык теперь определяется автоматически
*

sm_ph

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

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

icom

  • Давно я тут
  • 822
  • 199 / 4
Цитировать
$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

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

mysql_query('set names utf8');
echo"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
*

icom

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

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

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Добрый день.
Определена кодировка: 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

  • Давно я тут
  • 822
  • 199 / 4
что-то ничего не понятно, дайте в личку адрес сайта
*

icom

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

sm_ph

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

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

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

savenko

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

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

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


[вложение удалено Администратором]
*

icom

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

1) это не понял, объясните подробнее как настройка Joomla "Unicode Aliases", влияет на ссылки Virtuemart
2) это добавлю
3) "название сайта" и "название организации" это разные вещи, и "название организации" не тоже что и "описание организации" :), у вас почему-то там и там стоит $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

  • Захожу иногда
  • 83
  • 8 / 0
1) это не понял, объясните подробнее как настройка Joomla "Unicode Aliases", влияет на ссылки Virtuemart
2) это добавлю
3) "название сайта" и "название организации" это разные вещи, и "название организации" не тоже что и "описание организации" :), у вас почему-то там и там стоит $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

  • Давно я тут
  • 822
  • 199 / 4
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 одно и то же, но выводит разные результаты :), так что еще нужно проверять тип данных
*

icom

  • Давно я тут
  • 822
  • 199 / 4
Когда восстанавливаешь данные в 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

  • Давно я тут
  • 822
  • 199 / 4
Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

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

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

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

icom

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

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

злобный ламер

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

slutsker

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
Joomla 2.5.2 Vertuemart 2.0.2
вот такой вопрос по выгрузке в маркет:
как сделать, чтобы можно было некоторым позициям прописывать "гарантия производителя", а некоторым нет?
*

icom

  • Давно я тут
  • 822
  • 199 / 4
можно заполнить какой-то ненужный атрибут у тех товаров в которых есть гарантия, например 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

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
спасибо, попробую
*

Alex Revo

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

icom

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

slutsker

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
подскажите, как лучше сделать в случае временного отсутствия товара в магазине?
сейчас - когда на складе нет товара - в XML просто не выводится его цена
*

Alex Revo

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

icom

  • Давно я тут
  • 822
  • 199 / 4
подскажите, как лучше сделать в случае временного отсутствия товара в магазине?
сейчас - когда на складе нет товара - в 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

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
большое спасибо за помощь!
у меня ещё такие вопросы

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 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT VirtueMart Bitrix24, плагин интеграции с CRM Битрикс24

Автор musstudent

Ответов: 0
Просмотров: 75
Последний ответ 31.07.2020, 13:13:31
от musstudent
csvi Pro 7.3.0. Игнорирование существующих полей пи импорте товаров

Автор Viktor

Ответов: 2
Просмотров: 226
Последний ответ 13.12.2019, 22:44:43
от AlexB
CSVI импорт товаров - Ну никак.(РЕШЕНО!)

Автор vtrcmert

Ответов: 129
Просмотров: 42891
Последний ответ 13.09.2019, 16:05:21
от forlan
Выгрузка товаров с VirtueMart в olx?

Автор Stasweb

Ответов: 1
Просмотров: 480
Последний ответ 03.03.2019, 16:00:47
от gartes
RetailCRM + VirtueMart

Автор Adam Bazaroff

Ответов: 4
Просмотров: 1241
Последний ответ 31.01.2019, 11:14:33
от MichailPickStyle