Импорт товаров (Толко 2 поля)

  • 18 Ответов
  • 8974 Просмотров

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

*

Оффлайн kichik

Доброе утро... Уже недельку хотел поделиться своей наработкой, но никак руки не доходили.

В общем идея была такой...
Сидел раньше на VM, поначалу нравился, но потом, из-за того что он слишком большой и весит много и БД у них не красява + код написан через опу, решил спрыгнуть... Поставил ЖШ, все отлично, магазин супер, мне нравится, но вот как в VM импорт настоить довольно тяжело... А именно надо чтобы товары не импортировались, а просто обновляли цену, а если потребность только в 2=х полях, зачем лепить 6-7 или скок там их в стандартном импорте? В общем я перековырял файл импорта simpleimportutf8 и сделал импорт только по 2-м полям, ean (он же артикул) и price (цена).
Структура импортируемого файла должна быть такой:
ean;price
000 001;500
000 002;700
...

И кстати... после импорта отображаются все артикулы не обновленных товаров или не добавленных, в самом низу списка выводится кол-во обновленных товаров.

Вот так вот, ну и сам файл:
http://joomshopping-accordion-menu.googlecode.com/files/simpleimportutf8.zip

*

Оффлайн st.al

Re: Импорт товаров (Толко 2 поля)
« Ответ #1 : 15.03.2012, 20:39:57 »
В общем я перековырял файл импорта simpleimportutf8 и сделал импорт только по 2-м полям, ean (он же артикул) и price (цена).
перековырял Ваш файл на обновление остатков (берутся из файла по ссылке). Как сделать чтобы он автоматически запускался каждый день и ничего не спрашивал?

*

Оффлайн kurandin

Re: Импорт товаров (Толко 2 поля)
« Ответ #2 : 01.04.2012, 01:54:02 »
кто подскажет как сделать обновление цен товара из прайса поставщика товара в базе данных #_jshopping_products_attr
по полям price и ean

это необходимо именно там, потому что товар размерный и размеры в атрибутах (иногда даже цены отличаются по размерам)

и чтобы в конце было сообщение какие позиции не были найдены в базе данных (новый товар) или в прайсе (отсутствующий товар)

*

Оффлайн Linfuby

  • ******
  • 1239
  • [+]174 / [-]0
  • Всё просто...
    • Просмотр профиля
    • Разработка дополнений для JoomShopping
Re: Импорт товаров (Толко 2 поля)
« Ответ #3 : 01.04.2012, 13:14:28 »
кто подскажет как сделать обновление цен товара из прайса поставщика товара в базе данных #_jshopping_products_attr
по полям price и ean

это необходимо именно там, потому что товар размерный и размеры в атрибутах (иногда даже цены отличаются по размерам)

и чтобы в конце было сообщение какие позиции не были найдены в базе данных (новый товар) или в прайсе (отсутствующий товар)
Поддерживаю
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054

*

Оффлайн kichik

Re: Импорт товаров (Толко 2 поля)
« Ответ #4 : 16.04.2012, 10:45:38 »
перековырял Ваш файл на обновление остатков (берутся из файла по ссылке). Как сделать чтобы он автоматически запускался каждый день и ничего не спрашивал?

Я думаю надо воспользоваться кроном. Как то делал что то похожее, правда та была разработка под drupal и тамышний магазин.

*

Оффлайн st.al

Re: Импорт товаров (Толко 2 поля)
« Ответ #5 : 16.04.2012, 15:28:18 »
Я думаю надо воспользоваться кроном. Как то делал что то похожее, правда та была разработка под drupal и тамышний магазин.

Допустим с кроном разберусь... но скрипт же действует при нажатии кнопки "импорт"... как от этого избавиться?
ЗЫ наверно глупый вопрос, но для меня жумла и PHP это темный лес с полянками местами...

*

Оффлайн st.al

Re: Импорт товаров (Толко 2 поля)
« Ответ #6 : 21.04.2012, 00:04:36 »
Вот если кому надо... полностью код моего файлика...

<?php
defined
'_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.filesystem.folder');

function 
getQuantity($product_id)
{
//&#1090;&#1091;&#1090; &#1090;&#1080;&#1087;&#1072; API &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1097;&#1080;&#1082;&#1072;
$a=file_get_contents("http://&#1090;&#1080;&#1087;&#1072;_&#1089;&#1089;&#1099;&#1083;&#1082;&#1072;"); //&#1074; &#1086;&#1090;&#1074;&#1077;&#1090;&#1077; &#1076;&#1086;&#1083;&#1078;&#1085;&#1086; &#1073;&#1099;&#1090;&#1100; &#1095;&#1080;&#1089;&#1083;&#1086; &#1089; &#1086;&#1089;&#1090;&#1072;&#1090;&#1082;&#1086;&#1084;
if (is_numeric($a))
{
return $a;
} else
{
return 0;
echo $a;
}
}
function 
getPrice($product_id)
{
//&#1090;&#1091;&#1090; &#1090;&#1080;&#1087;&#1072; API &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1097;&#1080;&#1082;&#1072;
$a=file_get_contents("http://&#1090;&#1080;&#1087;&#1072;_&#1089;&#1089;&#1099;&#1083;&#1082;&#1072;"); //&#1074; &#1086;&#1090;&#1074;&#1077;&#1090;&#1077; &#1076;&#1086;&#1083;&#1078;&#1085;&#1086; &#1073;&#1099;&#1090;&#1100; &#1095;&#1080;&#1089;&#1083;&#1086; &#1089; &#1085;&#1086;&#1074;&#1086;&#1081; &#1094;&#1077;&#1085;&#1086;&#1081;
if (is_numeric($a))
{
return $a;
} else
{
return 0;
echo $a;
}
}

class 
IeUpdateBalancesUtf8 extends IeController
{//&#1080;&#1084;&#1103; &#1082;&#1083;&#1072;&#1089;&#1089;&#1072; &#1087;&#1086;&#1084;&#1077;&#1085;&#1103;&#1083; (&#1082;&#1072;&#1082; &#1080; &#1092;&#1072;&#1081;&#1083;&#1072; &#1080; &#1074;&#1089;&#1077;&#1075;&#1086; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086;)
function view()
{
$jshopConfig = &JSFactory::getConfig();
$ie_id JRequest::getInt("ie_id");
$_importexport = &JTable::getInstance('ImportExport''jshop'); 
$_importexport->load($ie_id);
$name $_importexport->get('name');
JToolBarHelper::title(_JSHOP_IMPORT' "'.$name.'"''generic.png' );
JToolBarHelper::custom("backtolistie""back"'browser.png'_JSHOP_BACK_TO.' "'._JSHOP_PANEL_IMPORT_EXPORT.'"'false );
JToolBarHelper::spacer();
JToolBarHelper::save("save"_JSHOP_IMPORT);
include(dirname(__FILE__)."/form.php");  
}

function save()
{
$mainframe =& JFactory::getApplication();
$jshopConfig = &JSFactory::getConfig();
$ie_id JRequest::getInt("ie_id");
if (!$ie_id$ie_id $this->get('ie_id');
$lang = &JSFactory::getLang();
$db = &JFactory::getDBO();
$_importexport = &JTable::getInstance('ImportExport''jshop');
$_importexport->load($ie_id);
$alias $_importexport->get('alias');
$_importexport->set('endstart'time());
$_importexport->store();
//&#1089;&#1087;&#1080;&#1089;&#1086;&#1082; &#1090;&#1086;&#1074;&#1072;&#1088;&#1086;&#1074;
$query "SELECT product_id as id, product_ean as ean, product_price as price FROM `#__jshopping_products` ORDER BY product_id";
$db->setQuery($query);
$rows $db->loadObjectList();
//=======================================&#1090;&#1072;&#1082;&#1086;&#1081; &#1079;&#1072;&#1084;&#1091;&#1090; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1080;&#1079;-&#1079;&#1072; &#1086;&#1075;&#1088;&#1072;&#1085;&#1080;&#1095;&#1077;&#1085;&#1080;&#1103; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1103; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&#1072; &#1074; 30&#1089;&#1077;&#1082;&#1091;&#1085;&#1076;
$filename JPATH_COMPONENT_SITE."/rests";
if (!is_file($filename))
{
$rests fopen($filename"w");
fclose ($rests);
}
$rests fopen($filename"r");
$last_id fgets($rests);
fclose($rests);
//=======================================
foreach($rows as $row)
{
if ($row->id >= $last_id)
{
$price getPrice($row->id);//&#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1102; &#1094;&#1077;&#1085;&#1091;
if ($price)
{//&#1087;&#1091;&#1073;&#1083;&#1080;&#1082;&#1091;&#1102; &#1090;&#1086;&#1074;&#1072;&#1088; &#1077;&#1089;&#1083;&#1080; &#1094;&#1077;&#1085;&#1072; &#1077;&#1089;&#1090;&#1100; (&#1080; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1085;&#1091;&#1083;&#1103;)
$publish 1;
} else
{
$publish 0;
}
$quantity getQuantity($row->ean);//&#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1102; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072;
$db->setQuery(' UPDATE `#__jshopping_products` '.
  ' SET product_quantity = "'$quantity .
  '", product_price = "'$price .
  '", product_publish = "'$publish .
  '" WHERE product_ean = "'$row->ean .'"');
$db->query();
$db->stderr();
$rests fopen($filename"w");
$success fwrite($rests$row->id);//&#1079;&#1072;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1084; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1085;&#1085;&#1099;&#1081; &#1090;&#1086;&#1074;&#1072;&#1088;
fclose($rests);
echo "&#1054;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085; &#1090;&#1086;&#1074;&#1072;&#1088; id=".$row->id."; &#1082;&#1086;&#1076; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072; ean=".$row->ean."; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1090;&#1086;&#1074;&#1072;&#1088;&#1072; quantity=".$quantity."; &#1094;&#1077;&#1085;&#1072; price=".$price.";<br>";//&#1085;&#1091; &#1080; &#1087;&#1080;&#1096;&#1077;&#1084; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1102; &#1089;&#1086;&#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1074;&#1089;&#1103;&#1082;&#1080;&#1081;
}
}
$rests fopen($filename"w");
$success fwrite($rests0);//&#1077;&#1089;&#1083;&#1080; &#1094;&#1080;&#1082;&#1083; &#1082;&#1086;&#1085;&#1095;&#1080;&#1083;&#1089;&#1103; - &#1086;&#1073;&#1085;&#1086;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1074;&#1089;&#1077; &#1090;&#1086;&#1074;&#1072;&#1088;&#1099;, &#1079;&#1085;&#1072;&#1095;&#1080;&#1090; &#1074; &#1089;&#1083;&#1077;&#1076;&#1091;&#1097;&#1080;&#1081; &#1088;&#1072;&#1079; &#1085;&#1072;&#1076;&#1086; &#1085;&#1072;&#1095;&#1072;&#1090;&#1100; &#1079;&#1072;&#1085;&#1086;&#1074;&#1086;
fclose($rests);
if (!JRequest::getInt("noredirect"))
{
$mainframe->redirect("index.php?option=com_jshopping&controller=importexport&task=view&ie_id=".$ie_id_JSHOP_COMPLETED);
}
}
}
?>

*

Оффлайн Solli_86

Re: Импорт товаров (Толко 2 поля)
« Ответ #7 : 25.05.2012, 15:23:13 »
А как добавить еще один столбец - наименование? Очень нужна помощь!

*

Оффлайн Linfuby

  • ******
  • 1239
  • [+]174 / [-]0
  • Всё просто...
    • Просмотр профиля
    • Разработка дополнений для JoomShopping
Re: Импорт товаров (Толко 2 поля)
« Ответ #8 : 25.05.2012, 16:54:24 »
Не пробовали использовать этот импорт?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054

*

Оффлайн Solli_86

Re: Импорт товаров (Толко 2 поля)
« Ответ #9 : 28.05.2012, 22:47:11 »
Нет, не пробовал - впервые в жизни работаю с импортом/экспортом.

*

Оффлайн hudoy

Re: Импорт товаров (Толко 2 поля)
« Ответ #10 : 08.06.2012, 11:32:26 »
Кто нибудь разобрался с cron? Как запустить импорт?

*

Оффлайн nevigen

  • *****
  • 8831
  • [+]771 / [-]17
  • http://n*****n.com
    • Просмотр профиля
    • Nevigen.com -разработки для Joomla
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !

*

Оффлайн Solli_86

Re: Импорт товаров (Толко 2 поля)
« Ответ #12 : 10.06.2012, 23:31:22 »
Не пробовали использовать этот импорт?
Насколько понял я: там далеко не три поля участвует (там нужно заполнять все поля кроме некторорых), то есть не подходит.
Мне нужно три конкретных поля:

  • Артикул(EAN)
  • Наименование(название)
  • Цена(price)
« Последнее редактирование: 10.06.2012, 23:41:57 от Solli_86 »

*

Оффлайн nevigen

  • *****
  • 8831
  • [+]771 / [-]17
  • http://n*****n.com
    • Просмотр профиля
    • Nevigen.com -разработки для Joomla
Re: Импорт товаров (Толко 2 поля)
« Ответ #13 : 11.06.2012, 18:48:26 »
а добавить кусочек по аналогии для "Название"  ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !

*

Оффлайн Solli_86

Re: Импорт товаров (Толко 2 поля)
« Ответ #14 : 13.06.2012, 01:31:25 »
куда и как добавить. Пока что с php на "вы".

*

Оффлайн st.al

Re: Импорт товаров (Толко 2 поля)
« Ответ #15 : 25.06.2012, 12:15:28 »
куда и как добавить. Пока что с php на "вы".

По сути нужно добавить это поле в sql запрос. Соответственно нужно использовать еще одну переменную. Формировать ее значение естественно нужно до этого кода. Жирным выделено, что добавить. Что убрать сами догадайтесь)
                                ...
            $db->setQuery(' UPDATE `#__jshopping_products` '.
                       ' SET product_quantity = "'. $quantity .
                       '", product_price = "'. $price .
                       '", product_publish = "'. $publish .
                       '", name_ru-RU = "'. $name .
                       '" WHERE product_ean = "'. $row->ean .'"');
            $db->query();
            $db->stderr();
                                ...

Тут все просто, смотрите в базе как называется поле которое надо заполнить и в с помощью sql запроса в скрипте заполняете это поле.

Другое дело, что этот запрос обновляет таблицу... раз Вам нужно поле имя, то вероятнее всего хотите не обновить таблицу а заполнить, а раз всего 3 поля, то скорее всего это не жумшопинг вообще. Или часто названия товаров меняются?
« Последнее редактирование: 25.06.2012, 12:19:58 от st.al »

*

Оффлайн Solli_86

Re: Импорт товаров (Толко 2 поля)
« Ответ #16 : 26.06.2012, 20:04:26 »
нет - не часто. Так сказать для чайников

Re: Импорт товаров (Толко 2 поля)
« Ответ #17 : 21.10.2016, 14:54:05 »
У кого-нибудь есть данный файл (обновление по 2 полям)? А то ссылка не работает. Можете поделиться?

*

Оффлайн Raven23