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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
Скачать

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

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

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


Donate:
  R192256315354 Webmoney
  410011118020069 Яндекс деньги
  +380988414221 киви
  4149605466032349 карта приватбанка
*

sm_ph

  • Захожу иногда
  • 16
  • 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 »
*

sm_ph

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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
скрипт тянул с базы товары без категории, потому была ошибка
исправил, архив обновил...
язык теперь определяется автоматически
*

sm_ph

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

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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
Цитировать
$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
И не забыть учесть кодировку, если везде используется юникод:

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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
И не забыть учесть кодировку, если везде используется юникод:

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
Добрый день.
Определена кодировка: 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

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
исправил, добавил тип vendor.model к товарам у которых есть производитель, без этого Яндекс почему-то не принимает, хотя сказано что элемент <vendor> можно использовать в двух типах описания товарного предложения — упрощенном и vendor.model
*

sm_ph

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

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

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

savenko

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

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

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


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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
Цитировать
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" - нечего тут вести, скрипт маленький, задача не сложная, могу просто в первом посте вписать тех, кто что-то добавил)
*

savenko

  • Осваиваюсь на форуме
  • 83
  • 8
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

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
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

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
Когда восстанавливаешь данные в 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

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
Когда восстанавливаешь данные в VM с помощью "Восстановить таблицы и установить демо данные" выдает

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

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

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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
добавил возможность "статической" выгрузки, если значение переменной $file равно 1, то создается файл vm2_market.xml, т. е. в настройках яндекса нужно указать http://ваш_сайт/market/vm2_market.xml, данные будут генерироваться только тогда когда вбить в адресную строку http://ваш_сайт/market/vm2_market.php и запустить

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

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

  • Осваиваюсь на форуме
  • 195
  • 2
Предлагаю админам прикрепить тему.
Разработчикам большое спасибо.
*

slutsker

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

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
можно заполнить какой-то ненужный атрибут у тех товаров в которых есть гарантия, например 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
спасибо, попробую
*

Alex Revo

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

icom

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

slutsker

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

Alex Revo

  • Практически профи
  • 1972
  • 108
На мой взгляд можно делать так:
либо менять статус available c true на false, тогда на Маркете товар будет под заказ, либо вообще не выгружать этот товаров в xml
проверку наличия делаем соотв. по полу остаток на складе
Аудит сайта - Бесплатно! 10 советов по улучшению своего сайта за 1 день. Писать в личку.
*

icom

  • Живу я здесь
  • 804
  • 182
  • Разработчик расширений Joomla. Этот статус присваивается, если пользователь разработал не менее 5 расширений для Joomla. Опытный верстальщик, который может качественно выполнить работы по верстки шаблона сайта Комплексное оказание услуг по разработке сайтов на Joomla
подскажите, как лучше сделать в случае временного отсутствия товара в магазине?
сейчас - когда на складе нет товара - в 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";
*

slutsker

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

API Заказ на Яндекс Маркете - насколько трудно подключить?

Автор vovchikku

Ответов: 1
Просмотров: 532
Последний ответ 19.07.2017, 16:46:05
от SolopoV
RetailCRM + VirtueMart

Автор Adam Bazaroff

Ответов: 3
Просмотров: 457
Последний ответ 05.04.2017, 17:50:46
от P_B
Какая версия csvi будет работать на joomla3.6.4 VirtueMart 3?

Автор ElenGalaxy

Ответов: 4
Просмотров: 342
Последний ответ 29.01.2017, 15:22:25
от ElenGalaxy
CSVI импорт товаров - Ну никак.(РЕШЕНО!)

Автор vtrcmert

Ответов: 126
Просмотров: 33935
Последний ответ 21.12.2016, 10:50:20
от Yevgeniii
Импорт 1 000 000 товаров трансляция в ЮТУБЕ в живу

Автор gartes

Ответов: 4
Просмотров: 367
Последний ответ 15.11.2016, 19:05:48
от gartes