VM 2.x CSV Improved для Virtuemart 2.x

dvd_xaker

Постоялец
Регистрация
27 Сен 2011
Сообщения
133
Реакции
14
Если есть поделитесь((( Нигде нет а так охота задействовать именно J2.5

Новые версии ТОЛЬКО в теме CSVI Pro
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:
Для просмотра ссылки Войди или Зарегистрируйся Спасибо!
Ребят возник еще вопрос по CSV Improved.
Как правильно подгрузить характеристики к существующим товарам!
Пр: 00001|Монитор| 20 у.е|----характеристики (догрузить)

Вот так будет работать? Какие настройки нужны для CSV Improved?
product_sku|product_desc

Что-то похожее,
Сделай ручками пару тестовых товаров с характеристиками, и сделай их экспорт, получишь наглядный пример. (При экспорте выбери все поля)
 
Для просмотра ссылки Войди или Зарегистрируйся Спасибо!
Как правильно подгрузить характеристики к существующим товарам!
Если ты имеешь ввиду кастомные поля - то вот так. Для просмотра ссылки Войди или Зарегистрируйся. И только в про версии
 
Вот вам скрипт который обновляет цены по артикулу.
Просто формируете .csv файлик с новыми ценами и запускаете скрипт.

артикул|новая цена

PHP:
<?php

$start_time = microtime(true);

$handle = fopen("katalog/ceny.csv", "r");  // Измените katalog/ceny.csv на ваш Путь и Имя файла с артикулами и новыми ценами
/*
ВНИМАНИЕ! разделитель полей |

ПРИМЕР .CSV
артикул|новая цена

00001|12
00015|35
00034|52

*/
  $dblocation = "localhost";  //замените localhost на свой адрес сервера БД
  $dbname = "bdname";  // измените bdname на ваше Название БД
  $dbuser = "bduser";  // bduser замените на ваш Логин пользователя БД
  $dbpasswd = "bdpasswd";  // Пароль пользователя БД

  // ДАЛЬШЕ НЕ СТОИТ ЧТО НИБУТЬ МЕНЯТЬ !!!


  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
  if (!$dbcnx)
  {
    echo "<p>К сожалению, не доступен сервер mySQL</p>";
    exit();
  }
  if (!mysql_select_db($dbname,$dbcnx) )
  {
    echo "<p>К сожалению, не доступна база данных</p>";
    exit();
  }
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8'");


while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {

    $select = mysql_query("SELECT  `virtuemart_product_id` FROM  `st_virtuemart_products` WHERE  `product_sku` = '$data[0]' ");
  if(!$select)
  {
    echo '<p>Ошибка в запросе получения ID товара. Товар с артикулом $data[0] в магазине не обнаружен. Пожалуйста, сначала добавьте товар (или удалите его со списка csv файла), потом пытайтесь обновить для него цену. Работа програмы была прервана.</p> ';
    exit();
  }

  $product_id = mysql_result($select,0);

  $update = mysql_query("UPDATE `st_virtuemart_product_prices` SET `product_price` = '$data[1]' WHERE  `virtuemart_product_id` ='$product_id'");
  if(!$update)
  {
    echo '<p>Ошибка в обновлении цены для товара с артикулом $data[0] </p>';
    exit();
  }
}

echo 'О, чудо. Всё прошло успешно!';

$exec_time = microtime(true) - $start_time;// выполнение действий
echo '<p>время исполнения'.$exec_time.'</p>';

?>

в комментариях описал которые поля нужно скорректировать.

Передавать что нибудь крону нет смысла, так как вы всё равно будете вручную формировать свежий .csv

Выдает ошибку: Ошибка в запросе получения ID товара. Товар с артикулом $data[0] в магазине не обнаружен. Пожалуйста, сначала добавьте товар (или удалите его со списка csv файла), потом пытайтесь обновить для него цену. Работа програмы была прервана.

Пример csv:
 

Вложения

  • error.jpg
    error.jpg
    27,7 KB · Просмотры: 14
Да, действительно, прошу прощения недосмотрел.

Проблема была в том что в строках 43 и 52 к названиям таблиц идет мой префикс st_.Я внес изменения в скрипт, теперь вы можете указывать свой префикс в строке 23.

Удачи.

PHP:
<?php

$start_time = microtime(true);

$handle = fopen("katalog/ceny.csv", "r");  // Измените katalog/ceny.csv на ваш Путь и Имя файла с артикулами и новыми ценами
/*
ВНИМАНИЕ! разделитель полей |

ПРИМЕР .CSV

артикул|новая цена

00001|12
00015|35
00034|52

*/
  $dblocation = "localhost";  //замените localhost на свой адрес сервера БД
  $dbname = "name";  // измените bdname на ваше Название БД
  $dbuser = "user";  // bduser замените на ваш Логин пользователя БД
  $dbpasswd = "pass";  // Пароль пользователя БД
  $pref = "st_"; //Префикс для названия таблиц в БД

  // ДАЛЬШЕ НЕ СТОИТ ЧТО НИБУТЬ МЕНЯТЬ !!!

  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd); 
  if (!$dbcnx) 
  { 
    echo "<p>К сожалению, не доступен сервер mySQL</p>"; 
    exit(); 
  } 
  if (!mysql_select_db($dbname,$dbcnx) ) 
  { 
    echo "<p>К сожалению, не доступна база данных</p>"; 
    exit(); 
  } 
mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'"); 
mysql_query ("set collation_connection='utf8'");


while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {

    $select = mysql_query("SELECT  `virtuemart_product_id` FROM  `".$pref."virtuemart_products` WHERE  `product_sku` = '$data[0]' ");
  if(!$select) 
  { 
    echo '<p>Ошибка в запросе получения ID товара. Товар с артикулом '.$data[0].' в магазине не обнаружен. Пожалуйста, сначала добавьте товар (или удалите его со списка csv файла), потом пытайтесь обновить для него цену. Работа програмы была прервана.</p> '; 
    exit(); 
  } 
  $product_id = mysql_result($select,0);
  $update = mysql_query("UPDATE `".$pref."virtuemart_product_prices` SET `product_price` = '$data[1]' WHERE  `virtuemart_product_id` ='$product_id'");
  if(!$update) 
  { 
    echo '<p>Ошибка в обновлении цены для товара с артикулом '.$data[0].' </p>'; 
    exit(); 
  } 
}

echo 'О, чудо. Всё прошло успешно!';
$exec_time = microtime(true) - $start_time;// выполнение действий
echo '<p>время исполнения'.$exec_time.'</p>';


?>
 
Вот вам скрипт который обновляет цены по артикулу.
Просто формируете .csv файлик с новыми ценами и запускаете скрипт.

артикул|новая цена

PHP:
<?php

$start_time = microtime(true);

$handle = fopen("katalog/ceny.csv", "r");  // Измените katalog/ceny.csv на ваш Путь и Имя файла с артикулами и новыми ценами
/*
ВНИМАНИЕ! разделитель полей |

ПРИМЕР .CSV
артикул|новая цена

00001|12
00015|35
00034|52

*/
  $dblocation = "localhost";  //замените localhost на свой адрес сервера БД
  $dbname = "bdname";  // измените bdname на ваше Название БД
  $dbuser = "bduser";  // bduser замените на ваш Логин пользователя БД
  $dbpasswd = "bdpasswd";  // Пароль пользователя БД

  // ДАЛЬШЕ НЕ СТОИТ ЧТО НИБУТЬ МЕНЯТЬ !!!


  $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
  if (!$dbcnx)
  {
    echo "<p>К сожалению, не доступен сервер mySQL</p>";
    exit();
  }
  if (!mysql_select_db($dbname,$dbcnx) )
  {
    echo "<p>К сожалению, не доступна база данных</p>";
    exit();
  }
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8'");


while (($data = fgetcsv($handle, 0, "|")) !== FALSE) {

    $select = mysql_query("SELECT  `virtuemart_product_id` FROM  `st_virtuemart_products` WHERE  `product_sku` = '$data[0]' ");
  if(!$select)
  {
    echo '<p>Ошибка в запросе получения ID товара. Товар с артикулом $data[0] в магазине не обнаружен. Пожалуйста, сначала добавьте товар (или удалите его со списка csv файла), потом пытайтесь обновить для него цену. Работа програмы была прервана.</p> ';
    exit();
  }

  $product_id = mysql_result($select,0);

  $update = mysql_query("UPDATE `st_virtuemart_product_prices` SET `product_price` = '$data[1]' WHERE  `virtuemart_product_id` ='$product_id'");
  if(!$update)
  {
    echo '<p>Ошибка в обновлении цены для товара с артикулом $data[0] </p>';
    exit();
  }
}

echo 'О, чудо. Всё прошло успешно!';

$exec_time = microtime(true) - $start_time;// выполнение действий
echo '<p>время исполнения'.$exec_time.'</p>';

?>

в комментариях описал которые поля нужно скорректировать.

Передавать что нибудь крону нет смысла, так как вы всё равно будете вручную формировать свежий .csv
Автор, почему ты не используешь ::getDBO()? К чему городить огород с вводом сервера, данных подключения, выбора префикса, который будет выглядеть #__?
 
Другими словами, шаблоны проектирования - классная вещь) Нужно использовать их, раз они уже реализованы. Например, как замечено - для работы с базой данных :)
 
Для просмотра ссылки Войди или Зарегистрируйся
О, чудо. Всё прошло успешно!
время исполнения0.0025269985199
Цена не меняется!

В чем может быть проблема?

* можно дописать такую возможность
если товара нет с таким артикулем, он снимается с публикации?
Спасибо!
______________________________________________
Вопрос №2
Попробовал загрузить через CSVI Pro 5.9.6
product_sku|product_price
Процесс проходит успешно!
Но product_price не обновляется (цен нет не в админке не в карточке товара) кто сталкивался, в чем может быть проблема?
Но есть в базе:
virtuemart_product_prices ---> product_prices ---> 3820.00000

Вот решение, и скрипт заработал!
Мы с вами внезапно сталкиваемся со странной проблемой: цена товара отображается в нашем с вами магазине только для авторизованных покупателей; все остальные пользователи интернет-магазина получают вместо цен лишь кнопку со словами "Запросить прайс".

Пояснения на сей предмет от jenkinhill, Модератор форума VirtueMart.net, выглядят следующим образом: Проверьте Shopper группы, созданной, чтобы показать, что цены. Если цены следует показывать все то группа следует оставить в Выберите Все верно, если мы не будем обозначать группу покупателей в редактор продукта -. Все получится. Да, но ... у вас ведь с вами могут быть импортированы сотни или даже тысячи товаров; как же быть? Не заходить же на страничку каждого товара, чтобы сменить опции; а иного выхода VirtueMart т.2, похоже, не предусматривает.

Решение несложно. Откройте phpMyAdmin и примените к вашей базе данных следующий запрос:
UPDATE wuwot_virtuemart_shoppergroups SET `default` = 0 WHERE `default` = 1

Сразу после этого необходимо снова реимпортировать товары, после чего с ценами в нашем интернет-магазине - полный порядок.

+ к этому нужно добавить поля product_price_publish_up и product_price_publish_down (пример во вложении) в таблице xxxxx_virtuemart_product_prices, или просто обновиться VM!

PS: VM 2.0.10

Возник еще такой вопрос:
Как осуществить в CSV Improved Pro:
Обновление цены (product_sku|product_price) + если нет артикуля в списке, товар снимается с публикации.
Спасибо!
 

Вложения

  • virtuemart_mods.jpg
    virtuemart_mods.jpg
    20,2 KB · Просмотры: 9
Последнее редактирование:
Возник еще такой вопрос:
Как осуществить в CSV Improved Pro:
Обновление цены (product_sku|product_price) + если нет артикуля в списке, товар снимается с публикации.
Спасибо!
Обновление - просто выгружаешь поле артикула, имени и цены товара с помощью шаблона импорта - меняешь - загружаешь обратно. Снятие товара с публикации, если в списке нет артикула - это неправильная логика и она никогда реализована не будет =) Просто используй поле publishing для каждого товара.
 
Доброго времени суток.
Использую бесплатную версию 4.3, и есть проблема.
Есть в файле поле Published. И оно работает, почти.
Если ставим значение поля для строки - 0 (не опубликовано), товар загружается не опубликованным, но при этом ВСЕ остальные товары в каталоге переходят в состояние анпаблишед. Если ставим значение - 1, получаем новые товары в состоянии паблишед, а все остальное - анпаблишед. Как так?) Сталкивался кто-нибудь с такой ерундой? Как лечить, и лечится ли вообще?
 
Доброго времени суток.
Использую бесплатную версию 4.3, и есть проблема.
Есть в файле поле Published. И оно работает, почти.
Если ставим значение поля для строки - 0 (не опубликовано), товар загружается не опубликованным, но при этом ВСЕ остальные товары в каталоге переходят в состояние анпаблишед. Если ставим значение - 1, получаем новые товары в состоянии паблишед, а все остальное - анпаблишед. Как так?) Сталкивался кто-нибудь с такой ерундой? Как лечить, и лечится ли вообще?
Настройки смотреть не пробовали?! Там есть такая опция - снимать товары с публикации перед загрузкой
 
Назад
Сверху