Перейти к содержимому


Обновление цен и наличия из Excel-евского файла


  • Вы не можете ответить в тему
Сообщений в теме: 26

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 02 February 2014 - 12:44 AM

Модуль XLS Sync предназначен для синхронизации товаров по наличию и цене с неким исходным экселевским файлом.
Задаются имена (буквы) трех колонок Эксель-файла - код товара, цена, доступность.
Задание колонки кода товара обязательно, цены и доступности - не обязательно.
Но очевидно, что одна из них таки должна быть задана :).
Работает с XLS и XLSX файлами.

Алгоритм прост:
1. находим товар с кодом из колонки кода
2. Если в колонке доступности стоит "Нет", то "отключаем" этот товар. Если стоит "Да", то "включаем" этот товар.
3. если в колонке цены цена отличная от сайта, то сайтовую цену переносим в поле "старая цена" и ставим новую цену.

Есть галка "тестовый режим", когда выводится только лог изменений, но сами изменения цены и доступности не делаются.


Установка:
----------
1. копируем файлы

modules_xls_sync.php -> core/includes/admin/sub/
modules_xls_sync.tpl.html -> core/tpl/admin/

2. в файле default.tpl.html перед строкой


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>


вставляем


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=xls_sync">XLS Sync</a></div>



3. в файле core/tpl/admin/menu.tpl.html перед строкой


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>


вставляем


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=xls_sync">XLS Sync</a></td></tr></table>



4. в файле core/includes/admin/modules.php перед строкой


array("id"=>"yandex", "name"=>"Яндекс.Маркет" )


вставляем


array("id"=>"xls_sync", "name"=>"XLS Sync"),



5. c http://phpexcel.codeplex.com/ скачиваем библиотеку PHPexcel.
В архиве есть подкаталог Сlasses, а в нем подкаталог PHPExcel и файл PHPExcel.php
Их копируем в корень сайта.

------------------

После всего этого в админке в разделе "Модули" появится новый модуль "XLS Sync".
Уровень доступа к этому модулю - "Каталог товаров" (это для тех, у кого кроме админов с полным доступом и клиентов есть еще пользователи с разными уровнями доступа в админке).

Прикрепленные файлы


  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 valeradr

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 49 сообщений
Репутация: 0
Начинающий

Отправлено 09 April 2015 - 01:35 AM

Добрый вечер, устанавливал на сайты ShopCMS 3.1.2 данный модуль все супер работает!!! Вопрос возник при установке на очередной сайт, модуль виден в админке, выбираю эксельник и выходит белый экран, в чем тут может быть? Версия
ShopCMS 3.1.3
  • 0

#3 valeradr

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 49 сообщений
Репутация: 0
Начинающий

Отправлено 09 April 2015 - 09:56 AM

Все решил, все дело было в хостинге))) надо было включить xsl
  • 0

#4 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 12 April 2015 - 02:24 PM

Спасибо, тоже очень пригодилось. Предложу несколько другой вариант, при котором в прайсе нет понятия "доступность", а все что в нем есть,подразумевает товар в наличии, товары же, которых в прайсе нет - подразумеваются, что в наличии нет, то есть, отключаются (легко переделать,чтобы не отключались, а становились "под заказ").
Также, если товар в базе не найден, выдается не ошибка, а заводится новый товар и кладется в соответствующую категорию. Для этого, чтобы это правильно работало, в прайсе категории не должны иметь цену (в большинстве случаях это именно так), все категории должны иметь уникальные имена, и существовать уже в базе данных (последнее также не сложно дополнить,чтобы новые категории создавались автоматически).
Разумеется, при такой схеме, прайс должен содержать наименования товаров и категорий.

В файле modules_xls_sync.php , заменим

if(!defined('CONF_XLS_SINCRO_STOCK'))
db_query("INSERT ".SETTINGS_TABLE." SET
settings_groupID=98,
settings_constant_name='CONF_XLS_SINCRO_STOCK',
settings_value='C',
settings_title='Колонка наличия товара',
settings_description='Укажите буквенное имя колонки с наличием товара (например, C) или оставьте это поле пустым.',
settings_html_function='setting_TEXT_BOX(0,',
sort_order=3");

на

if(!defined('CONF_XLS_SINCRO_NAME'))
db_query("INSERT ".SETTINGS_TABLE." SET
settings_groupID=98,
settings_constant_name='CONF_XLS_SINCRO_NAME',
settings_value='C',
settings_title='Колонка наименования товара',
settings_description='Укажите буквенное имя колонки с наименованием (например, C) или оставьте это поле пустым.',
settings_html_function='setting_TEXT_BOX(0,',
sort_order=3");


заменим

elseif (strlen($_POST['settingCONF_XLS_SINCRO_STOCK']) > 1) $result = '<span style="color:red">Ошибка! Имя колонки наличия товара должно содержать одну букву или быть пустым!"</span>';

на

elseif (strlen($_POST['settingCONF_XLS_SINCRO_NAME']) > 1) $result = '<span style="color:red">Ошибка! Колонка наименования должна содержать одну букву или быть пустой!"</span>';

заменим

{return !(strpos(strtoupper($_POST['settingCONF_XLS_SINCRO_CODE'].$_POST['settingCONF_XLS_SINCRO_PRICE'].$_POST['settingCONF_XLS_SINCRO_STOCK']),$column) === false);}

на

{return !(strpos(strtoupper($_POST['settingCONF_XLS_SINCRO_CODE'].$_POST['settingCONF_XLS_SINCRO_PRICE'].$_POST['settingCONF_XLS_SINCRO_NAME']),$column) === false);}

заменим

$stock = strtoupper($_POST['settingCONF_XLS_SINCRO_STOCK']);

на

$name = strtoupper($_POST['settingCONF_XLS_SINCRO_NAME']);

заменим

foreach ($xls as $row)

на

foreach ($xls as $key =>$row)

После строки
$row = array_map('u2w', $row);

Вставим :

$row[$code] = (int)$row[$code];
if ($row[$price] > 0) $in_price[]= $row[$code];
if ($row[$price] == '' && $row[$name] != '' && $xls[$key+1][CONF_XLS_SINCRO_PRICE] > 0) $category= $row[$name];


Строку :

if (!trim($row[$code])) $result .= '<span style="color:red">Ошибка! Пустой код товара</span><br>';
else

Заменим на :

if (!trim($row[$code])) $result .= '<span style="color:red">Ошибка! Пустой код товара</span><br>';
elseif ($row[$price] > 0 && $row[$name] != '')


Строку :

if (count($r) == 0)
$result .= '<span style="color:red">Ошибка! Товар с кодом </span><b>'.$row[$code].'</b><span style="color:red"> не найден!</span><br>';


Заменим на :


if (count($r) == 0 && $row[$price] > 0 && $row[$name] != '') {

$result .= '<span style="color:green">Новый товар! Товар с кодом </span><b>'.$row[$code].' ('.$row[$name].')</b><span style="color:green"> добавлен</span><br>';

if (!$_POST['settingCONF_XLS_SINCRO_TEST']) {

$cat = db_fetch_row(db_query("select categoryID from ".DB_PRFX."categories where name='".$category."'"));
$categoryID = $cat['categoryID'];

db_query("INSERT INTO ".PRODUCTS_TABLE.
" ( categoryID, name, description,".
" customers_rating, Price,".
" customer_votes, items_sold, enabled, ".
" list_price, ".
" product_code, sort_order, date_added, ".
" eproduct_filename, eproduct_available_days, ".
" eproduct_download_times, ".
" weight, meta_description, meta_keywords, ".
" free_shipping, min_order_amount, shipping_freight, classID, title ".
" ) ".
" VALUES (".
(int)$categoryID.",'".
xToText(trim($row[$name]))."','".
xEscSQL($description)."', ".
"0, '".
(double)$row[$price]."', ".
" 0, 0, 1, '".
(double)$row[$price]."', '".
xToText(trim($row[$code]))."', ".
(int)$sort_order.", '".
xEscSQL(get_current_time())."', '".
xEscSQL($eproduct_filename)."', ".
(int)$eproduct_available_days.", ".
(int)$eproduct_download_times.", ".
(float)$weight.", ".
"'".xToText(trim($meta_description))."', ".
"'".xToText(trim($meta_keywords))."', ".
(int)$free_shipping.", ".
(int)$min_order_amount.", ".
(double)$shipping_freight.", ".
(int)$classID.", '".
xToText(trim($row[$name]))."' ".
");" );

}
}


Строки

if ($stock)
{
if (trim($row[$stock]) == "Да" && $r[0]['enabled'] == 0)
{
if (!$_POST['settingCONF_XLS_SINCRO_TEST']) db_query("UPDATE ".PRODUCTS_TABLE." SET enabled=1 WHERE product_code='".trim($row[$code])."'");
$result .= '<span style="color:green">Изменение статуса! Товар с кодом </span><b>'.$row[$code].' ('.$r[0]['name'].')</b><span style="color:green"> включен</span><br>';
}

elseif (trim($row[$stock]) == "Нет" && $r[0]['enabled'] == 1)
{
if (!$_POST['settingCONF_XLS_SINCRO_TEST']) db_query("UPDATE ".PRODUCTS_TABLE." SET enabled=0 WHERE product_code='".trim($row[$code])."'");
$result .= '<span style="color:green">Изменение статуса! Товар с кодом </span><b>'.$row[$code].' ('.$r[0]['name'].')</b><span style="color:grey"> выключен</span><br>';
}
else
$result .= '<span style="color:grey">Товар с кодом </span><b>'.$row[$code].' ('.$r[0]['name'].')</b><span style="color:grey"> статус не изменил</span><br>';
}

Заменим на :

if ($r[0]['enabled'] == 0)
{

if (!$_POST['settingCONF_XLS_SINCRO_TEST']) db_query("UPDATE ".PRODUCTS_TABLE." SET enabled=1 WHERE product_code='".trim($row[$code])."'");
$result .= '<span style="color:green">Изменение статуса! Товар с кодом </span><b>'.$row[$code].' ('.$r[0]['name'].')</b><span style="color:green"> включен</span><br>';
}

else $result .= '<span style="color:grey">Товар с кодом </span><b>'.$row[$code].' ('.$r[0]['name'].')</b><span style="color:grey"> статус не изменил</span><br>';


Если я не ошибаюсь До четвертого закрывающего знака }, если считать снизу вверх (проще говоря, там где заканчивается цикл), вставляем :

$in_price = implode(",", $in_price);
if (!$_POST['settingCONF_XLS_SINCRO_TEST']) db_query("UPDATE ".PRODUCTS_TABLE." SET enabled=0 WHERE product_code NOT IN ($in_price)
");

  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 12 April 2015 - 05:18 PM

Ну, раз пошла такая пьянка, то выкладываю давно лежащую более развесистую версию. :)
Думаю, отличия от топикстартерной версии видны в картинке:
Прикрепленный файл  1.JPG   94.08К   49 Количество загрузок:
Инструкция, в принципе, та же, добавился файл addon.php, куда перенесено создание новых settings-констант.
Также в addon.php применен другой алгоритм выбора номера группы settings-констант для этого модуля. Он не задается жестко (что может вызвать совпадение при установке разных моих модулей), а берется первый не занятый другими группами номер.

Установка:
=========

1. копируем файлы

addon.php -> core/includes/admin/
modules_xls_sync.php -> core/includes/admin/sub/
modules_xls_sync.tpl.html -> core/tpl/admin/

2. в файле default.tpl.html перед строкой


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>


вставляем


{* BEGIN XLS Sync *}
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=xls_sync">XLS Sync</a></div>
{* END XLS Sync *}



3. в файле core/tpl/admin/menu.tpl.html перед строкой


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>


вставляем


{* BEGIN XLS Sync *}
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=xls_sync">XLS Sync</a></td></tr></table>
{* END XLS Sync *}



4. в файле core/includes/admin/modules.php перед строкой


array("id"=>"yandex", "name"=>"Яндекс.Маркет" )


вставляем


# BEGIN XLS Sync
array("id"=>"xls_sync", "name"=>"XLS Sync"),
# END XLS Sync


5. c http://phpexcel.codeplex.com/ скачиваем библиотеку PHPexcel.
В архиве есть подкаталог Сlasses, а в нем подкаталог PHPExcel и файл PHPExcel.php
Их копируем в корень сайта.

------------------

После всего этого в админке в разделе "Модули" появится новый модуль "XLS Sync".
Уровень доступа к этому модулю - "Каталог товаров" (это для тех, у кого кроме админов с полным доступом и клиентов есть еще пользователи с разными уровнями доступа в админке).

PS. Забыл. В этой версии кроме имеющегося на скриншоте есть еще галка 'Переносить цену при изменении в старую цену'.
Очевидно, она задает переносить или не переносить текущую цену в старую при изменении цены.

Прикрепленные файлы


  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 13 April 2015 - 10:42 AM

Отлично ! Вот еще бы дополнить его тем, что я писал выше, а именно, галкой, при который не найденный в БД товар, будет заводиться как новый и возможностью определять, что в прайсе есть категории, а не только товары,соответственно, помещая новые товары в свои категории и заводя новые категории, если их нет в БД, и получится прям идеальный синхронизатор какой то :)
Очень у многих, думаю, прайс формируется из 1С и там нельзя так просто добавить какой нибудь плюсик или колонку с наличием. В старых версиях, по крайней мере, в новых не знаю.
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 April 2015 - 07:52 PM

Вот еще бы дополнить его тем, что я писал выше, а именно, галкой, при который не найденный в БД товар, будет заводиться как новый

В обрабатываемом прайсе реальной информации о товаре обычно куда меньше, чем надо для заведения товара.
Название/цена/доступность. Все. Больше ничего в среднестатистическом рассылочном прайсе нет.
Фотографий нет, описания нет.
И какой смысл его заводить автоматически с этим минимумом информации? Особенно учитывая возможность наличия какой-нибудь совершеннно левой строки в прайсе (заголовок, подвал, комментарии), которые при автогенерации товара запросто попадут в "опаньки! Это новый товар!"
Подчеркиваю, речь о среднестатическом круглом прайсе в вакууме, а не о прайсе, параметры которого известны и неизменны.

и возможностью определять, что в прайсе есть категории, а не только товары

Как определять, что некая строка это категория, а некий набор товаров принадлежит именно ей? Путем PHP-магии? :)

получится прям идеальный синхронизатор

Идеальных сихронизаторов не бывает.
При наличии конечного количества прайслистов разных поставщиков такой синхронизатор пишется совсем по другому - для КАЖДОГО поставщика (предполагая, что его прайслист шаблонен и неизменен, т.е. просто девочка правит цены и наличие) пишется свой скрипт конвертации, перегоняющий прайс в некий стандартный набор данных. Затем этот набор единообразно обрабатывается. Вот при таком подходе (повторюсь - под каждого "поставщика прайсов" пишется свой скрипт-конвертер) можно худо-бедно реализовать задумку с добавлением новых товаров, отключением либо удалением старых и созданием новых категорий. Да и то врядли, т.к. нельзя ставить генерацию новых категорий на автомат.

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

Очень у многих, думаю, прайс формируется из 1С и там нельзя так просто добавить какой нибудь плюсик или колонку с наличием.

Хм.. Так ведь и в ShopCMS много где штатно "нельзя добавить плюсик". Однако мы эти плюсики тут вполне успешно добавляем копаясь ручками в коде. Не вижу в этом смысле принципиальных отичий ShopCMS от 1С. Точно так же лезется в конфигуратор и добавляется нужное. Причем на стороне передачи, т.е. где можно точно и однозначно задать нужное, а не вылавливать по косвенным признакам не стороне приема.

PS. Я готов написать универсальную прайс-обновлялку, работающую с разными прайсами (ядро и скрипт для каждого типа прайса), но уж точно не в рамках бесплатно выложенного модуля, т.к. это серьезная и долгая, хотя и интересная работа. Только не очень понятно - зачем.
Примерно то же самое делают продукты E-trade, причем довольно давно. Для каждого прайса (маски) своя обработка. Единственный минус - они пошли по пути развесистости условий, нагромождая сложности. Оно и понятно, ведь путь "каждому прайсу свой скрипт обработки" предполагает, что кто-то эти скрипты будет писать по мере появления новых прайсов, а такие продукты не жизнеспособны. Пример - модуль парсинга сайтов (от Трикивеба, насколько помню), где для каждого сайта надо было создавать свой шаблон парсинга. Хороший модуль, хорошая идея, но благополучно помер и давно уже никто не вспоминает :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 13 April 2015 - 09:06 PM

Как определять, что некая строка это категория, а некий набор товаров принадлежит именно ей? Путем PHP-магии? :)

Нет )) Всего лишь, этой строчкой кода :
if ($row[$price] == '' && $row[$name] != '' && $xls[$key+1][CONF_XLS_SINCRO_PRICE] > 0) $category= $row[$name];

В обрабатываемом прайсе реальной информации о товаре обычно куда меньше, чем надо для заведения товара.
Название/цена/доступность. Все. Больше ничего в среднестатистическом рассылочном прайсе нет.
Фотографий нет, описания нет.

Остальное ручками, разумеется. Ну, или путем упомянутой выше магии :)
Лично мне этот модуль помог понять насколько же просто все было то, все таки. Долгое время у нас был синхронизатор прайса 1С ну просто ужасный, по другому не назовешь. Сколько я с ним мучался и бился.. Так что, еще раз, спасибо за наводку :)
  • 0

#9 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 April 2015 - 11:38 AM

Нет )) Всего лишь, этой строчкой кода :

Это Вы под какой-то свой конкретный прайс условие подогнали. В общем случае (модуль-то универсальный, а не под 1С) оно не сработает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 14 April 2015 - 01:59 PM

Это Вы под какой-то свой конкретный прайс условие подогнали. В общем случае (модуль-то универсальный, а не под 1С) оно не сработает.

Все равно не согласен. Сколько прайсов не смотрел, даже родной, который ShopCMS формирует, все одно и тоже - категории не имеют никаких знаков дополнительных и тем более цены. Только наименование и все. Если за названием категории идет колонка с ценой, значит это уже товар и принадлежит категории выше. Именно так и работает это условие. В общем ладно, безусловно все индивидуально в любом случае.
  • 0

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 April 2015 - 05:23 PM

Если за названием категории идет колонка с ценой

А если за названием категории идет название подкатегории, как в том же shopCMS?
А если в шапке пять строк информации, где - совершенно по случайности - в колонке с ценами тоже стоит цифровое значение?
:)

Таких "если", результатом чего будет некорректное добавление товара/категории для среднеквадратичного прайса наберется вагон и тележка. Поэтому создавать новые товары и категории можно только при четко известной структуре прайса, а при неизвестной - лишь модифицировать имеющиеся товары, т.е. где строка прайса четко подошла под маску имеющегося товара. По коду или наименованию.
Да и тут возможны ошибки, если в разных разделах прайса будут товары с одним наименованием. Скажем, в разделах "медные гайки" и "стальные гайки" будет какая-нибудь "гайка 15L/1.5/9". В одном случае медная, в другом стальная.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 14 April 2015 - 07:22 PM

А если за названием категории идет название подкатегории, как в том же shopCMS?

И что ? Все будет правильно, новому товару будет присвоена именно это подкатегория.

А если в шапке пять строк информации, где - совершенно по случайности - в колонке с ценами тоже стоит цифровое значение?

Любопытный вариант прайса )) Но, даже если так, все равно будет работать правильно, тк не представляю просто прайса, где за этой информацией СРАЗУ ЖЕ идут товары, а не сначала название категории.

Да и тут возможны ошибки, если в разных разделах прайса будут товары с одним наименованием. Скажем, в разделах "медные гайки" и "стальные гайки" будет какая-нибудь "гайка 15L/1.5/9". В одном случае медная, в другом стальная.

Какая разница то ? Коды то у них разные. Создадутся 2 новых товара и будут помещены в соответствующие категории.
Все таки, помоему, почти универсально. И работать будет не правильно только совсем уж в каких то нестандартных прайсах. Да и это можно предусмотреть и игнорировать создание товаров и категорий, если прайс настолько нестандартный.
  • 0

#13 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 April 2015 - 07:49 PM

И что ? Все будет правильно, новому товару будет присвоена именно это подкатегория.

Ага. Это если она есть. А если ее нет, т.е. это новая подкатегория? А если и родительской категории тоже нет? Я же написал - таких "если" (ветвлений алгоритма) вагон и тележка.

Любопытный вариант прайса ))

Совершенно обычный. Редко когда в шапке нет ничего и прайс начинается сразу с перечисления групп товаров и самих товаров. Обычно таки присутствует порядка пяти строк всякой информации типа названия фирмы, телефонов-адресов, времени работы, адреса и прочих атрибутов. Т.е. примерно того же, что находится в шапке сайта поставщика, если у него есть сайт.
Я ведь частенько делаю и обратное - пишу генераторы XLS-прайсов вместо штатного CSV.
Поверьте, фантазия заказчиков по части развесистости шапки довольно широка :).

Какая разница то ? Коды то у них разные.

Вы часто встречаете прайсы с кодами? Причем это еще в компьютерной сфере, где с кодами более-менее все хорошо. В сфере "гаек и болтов" даже пользующиеся компьютером люди не всегда понимают, что такое партнамбер и зачем он нужен. Гайка и гайка, материал и три параметра...

В принципе - и хрен-то с ним. Бестолковый спор. Я все равно не буду переписывать этот модуль под создание НОВЫХ категорий и товаров из прайса, а любой его пользующий может делать с ним что угодно :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 ssergioss25

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 56 сообщений
Репутация: 24
Ассистент
  • ГородСПБ

Отправлено 14 April 2015 - 08:08 PM

Ага. Это если она есть. А если ее нет, т.е. это новая подкатегория?

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

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

Верно. И у меня такой же, и все ок. Я про то, что в шапке с посторонней инфой в колонке "цена" что то указано.

Вы часто встречаете прайсы с кодами?

Так мы ж вроде в теме обсуждения вашего же модуля :) А он рассчитан именно на прайсы с кодами и не работает в других случаях.
Да я и не спорю, все нормально :)
  • 0

#15 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 April 2015 - 09:19 PM

А он рассчитан именно на прайсы с кодами и не работает в других случаях.

Хм... А и правда. Я и забыл уже :). Почему-то казалось, что есть альтернативность коды/наименование.
Видимо, заказчиками не ставилось такой задачи.
Мои извинения.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#16 hmel

    Новичок

  • Download User
  • Pip
  • 7 сообщений
Репутация: 1
Начинающий

Отправлено 13 April 2016 - 01:26 PM

Здраствуйте!

Помоги не могу поставить скрипт уважаемого Badisoft-а.

Скрипт устанавливается но почему то не полностью нет верхних 3-х строк которые отвечают за колонки кода товаров цены и наличия.

Буду очень благодарен за помощь..
  • 0

#17 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 April 2016 - 02:03 PM

Скрипт устанавливается но почему то не полностью нет верхних 3-х строк которые отвечают за колонки кода товаров цены и наличия.

1. Где "нет верхних трех строк"?
2. Если нет верхних трех, то какие строки есть?
3. Пункт XLS sync в админке в разделе "Модули" появился?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#18 hmel

    Новичок

  • Download User
  • Pip
  • 7 сообщений
Репутация: 1
Начинающий

Отправлено 13 April 2016 - 02:41 PM

Устанавливал сразу вторую вашу версию расширенную.
Пункт XLS sync появился, захожу в него а там нет колонок.

Колонка кода товара
Колонка цены товары
Колонка наличия товар.

нет выбора файла XLS.

А все остальные колонки есть

Я не великий кодер но как я понял в базе данных должна создаться строка с именем SETTINGS_TABLE.
А ее нет.
  • 0

#19 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 April 2016 - 04:15 PM

Я не великий кодер но как я понял в базе данных должна создаться строка с именем SETTINGS_TABLE. А ее нет.

Не совсем так. В базе данных не может создаться строка, база данных состоит из таблиц, а вот в таблице уже может создаться строка :).
Файл addon.php создает в таблице SETTINGS_TABLE (это define для таблицы xxxx_settings, где xxxx - Ваш префикс таблиц) несколько "строк", каждая из которых является одной из настроек, показанных на картинке админки модуля. У Вас либо эти настройки (строки) создались не все, либо создались как-то некорректно. Как и почему - не могу сказать. Процесс создания этих восьми настроек абсолютно идентичен.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 hmel

    Новичок

  • Download User
  • Pip
  • 7 сообщений
Репутация: 1
Начинающий

Отправлено 13 April 2016 - 06:25 PM

Спасибо большое разобрался.
Почему то коряво записались данные в БД. После их удаления и запуска Admin.php заново . Все строки создались хорошо.
Все заработало. Еще раз спасибо.
  • 0