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

icom

  • Давно я тут
  • 830
  • 202 / 4
Скачать

Cкопируйте файл vm4_market.php в корень сайта, в настройках маркета укажите ссылку https://ваш_сайт/vm4_market.php

Старая версия

« Последнее редактирование: 11.01.2023, 15:00:23 от 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

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

sm_ph

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

icom

  • Давно я тут
  • 830
  • 202 / 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

  • Давно я тут
  • 830
  • 202 / 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

  • Давно я тут
  • 830
  • 202 / 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

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

icom

  • Давно я тут
  • 830
  • 202 / 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

  • Давно я тут
  • 830
  • 202 / 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

  • Давно я тут
  • 830
  • 202 / 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

  • Давно я тут
  • 830
  • 202 / 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

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

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

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

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

icom

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

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

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

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

slutsker

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

icom

  • Давно я тут
  • 830
  • 202 / 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

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

icom

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

slutsker

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

Alex Revo

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

icom

  • Давно я тут
  • 830
  • 202 / 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

Автор sergeytolkachyov

Ответов: 1
Просмотров: 1747
Последний ответ 17.11.2023, 10:27:16
от sergeytolkachyov
Ошибка после перехода в корзину VirtueMart

Автор max_max

Ответов: 4
Просмотров: 1367
Последний ответ 07.09.2021, 18:50:25
от max_max
Кнопки операций в VirtueMart не реагируют на клик

Автор max_max

Ответов: 0
Просмотров: 1289
Последний ответ 30.08.2021, 09:43:21
от max_max
Привязка товаров к категориям при импорте из csv

Автор max_max

Ответов: 8
Просмотров: 1616
Последний ответ 16.08.2021, 18:45:19
от max_max
csvi Pro 7.3.0. Игнорирование существующих полей пи импорте товаров

Автор Viktor

Ответов: 2
Просмотров: 1711
Последний ответ 13.12.2019, 22:44:43
от AlexB