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


Расширенное управление характеристиками товаров

характеристики

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

#1 micehide

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

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

Отправлено 01 June 2013 - 05:54 PM

Расширенное управление характеристиками товаров 1.2
Актуально для версии ShopCMS 3.1.2

Прикрепленный файл  extra_features_v1.0.jpg   107.63К   230 Количество загрузок:

Список изменений:
  • Полностью сохранена изначальная функциональность редактирования характеристик;
  • Добавлена возможность "Конвертации" доп. характеристики из произвольного значения в набор возможных значений с корректной привязкой всех товаров каталога к соответствующему этим товарам значению выбранной характеристики.
  • Устранена штатная ошибка ShopCMS в файле catalog_extra.php, при которой возникала ошибка SQL при удалении варианта характеристики (спасибо: badisoft);
  • Регистронезависимая проверка, пример значения: Swarowski = SWAROVSKI)
Скачать: Расширенное управление характеристиками товаров 1.1 (инструкция по установке в архиве)

Пишите комментарии, кто будет себе ставить и пробуйте сначала на тестовом каталоге (на всякий случай, т.к я тестировал модуль в разных вариантах).
  • 6

#2 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 01 June 2013 - 07:44 PM

Честно говоря по описанию не совсем понятно в чем смысл модуля?
Что он делает то?
и еще не понятно что значит конвертации из произвольного значения в набор возможных. В произвольном то пишется 1 строка..... что за набор появится ?
  • 0

#3 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 01 June 2013 - 08:21 PM

Честно говоря по описанию не совсем понятно в чем смысл модуля? Что он делает то? и еще не понятно что значит конвертации из произвольного значения в набор возможных. В произвольном то пишется 1 строка..... что за набор появится ?

мне кажется смысл этого модуля, это дополнить фильтр, который не работает с произвольными строками (но не факт, возможно автор закладывал другую идею)
но свой + я уже поставил, как по мне то полезная доработка ( но я еще даже не проверял :) )
  • 0
Изображение Изображение Изображение

#4 micehide

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

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

Отправлено 01 June 2013 - 09:43 PM

мне кажется смысл этого модуля, это дополнить фильтр, который не работает с произвольными строками...


Именно с этой целью он был написан. Например, есть у нас в магазине доп. характеристика "Цвет" и она у товаров указана как произвольная строка и соответственно она присутствует в разделе "Характеристики товаров", но у нее нет там вариантов никаких. Тут маркетолог говорит (в моем случае так и было): "нужно добавить характеристику Цвет в фильтр, чтобы можно было выбирать из выпадающего списка". Ну чтобы не выгружать каталог, менять значения в CSV и обратно его пихать, я просто сделал несколько SQL-запросов в базе и сконвертировал значения хар-ки в список "возможных значений" - это так обзывается в Админке. Ну а потом дай, думаю, PHP-скрипт просто напишу да и пусть этот маркетолог все сам себе делает, чтобы мозг не парил.
  • 0

#5 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 01 June 2013 - 10:27 PM

micehide, я пошел чуть другим путем, написал ядро для нового фильтра, и оно прекрастно обрататывает все характеристики, но учитывая что у меня в движке для возможных значений есть много моификаций, данное решение мне очень нравится, единственное что необходимо еще доделать - автоматическую конвертацию при добавлении произвольного значения в карточке товара, но за идею однозначно +
  • 0
Изображение Изображение Изображение

#6 micehide

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

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

Отправлено 01 June 2013 - 10:53 PM

Спасибо за поддержку, eugene_wb, еще можно сделать "галку" в CSV-импорте товаров, по которой: чтобы даже если хар-ка указана просто произвольно в CSV, но в каталоге эта хар-ка существует в виде задаваемых значений и наличествует в фильтре (таким образом при опечатке в CSV-импорте такой товар перестанет фильтроваться и это сложно будет выявить, а про скобки в CSV можно и забыть случайно), тогда скрипт просто проверяет значение хар-ки на это и обрабатывает хар-ку соответствующим образом, вставляя в виде значения из списка.

Ну это все не касаясь значений с несколькими вариантами одновременно (твой вариант), их, конечно, также нужно учесть...

Кстати, вот для этого есть решение готовое? (про активацию фильтра в нескольких категориях одновременно, чтобы не лазать по каждой в настройки): http://vsupport.club...dpost__p__26790
  • 0

#7 Jeck2000

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

  • Assistent vsupport.club
  • PipPipPip
  • 159 сообщений
Репутация: 8
Начинающий
  • ГородСанкт-Петербург

Отправлено 02 June 2013 - 07:57 PM

Вот спасибо за дополнение ! , а то я тут как раз заколебался переводить произвольные значения в значению по выбору (по дурости несколько лет назад так заполнял, щас переделываю), Блин, какое облегчение ! еще раз респект !
  • 0

#8 micehide

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

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

Отправлено 04 June 2013 - 12:52 AM

Кстати, вот для этого есть решение готовое? (про активацию фильтра в нескольких категориях одновременно, чтобы не лазать по каждой в настройки): http://vsupport.club...dpost__p__26790


- написал код, выложу в общий доступ отдельной темой...

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

Выложил вот: http://vsupport.club...о-поиска-к-доч/
  • 0

#9 Absolut

    Пользователь

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

Отправлено 30 October 2013 - 11:29 AM

2 micehide
хочу попробовать твой код, но боязно перезаписывать файлы, если есть возможность выложи пожалуйста инструкцию что где заменить или добавить?
  • 0

#10 badisoft

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

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

Отправлено 30 October 2013 - 03:41 PM

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

Открываете файлы и видите в них инструкцию. NEW CODE ........ OLD CODE.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 Absolut

    Пользователь

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

Отправлено 31 October 2013 - 05:53 PM

Открываете файлы и видите в них инструкцию. NEW CODE ........ OLD CODE.

Спасибо! :)
Залез в содержимое файлов, посмотрел что изменений не много, сохранил исходные и перезаписал, все встало на ура, теперь осталось разобраться как он работает.

Сообщение отредактировал Absolut: 31 October 2013 - 06:20 PM

  • -1

#12 badisoft

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

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

Отправлено 20 November 2013 - 03:18 PM

Замеченные неувязочки:
1. Список полей, доступных для конвертации состоит из списка характеристик, у которых нет ни одного варианта. Т.е. если у характеристики уже есть хотя бы один вариант, но у каких-либо товаров эта характеристика заполнена как произвольная строка - сконвертировать не получится, т.к. характеристики не будет в списке.
2. Конвертируются и те характеристики, где в произвольной строке задана пустая строка. В вариант с пустой строкой :).

PS. Нашел ошибку в catalog_extra.php (штатную). Перепутаны таблицы, это вызывает ошибку SQL при удалении варианта характеристики.
Исправление:

#db_query("delete from ".CATEGORY_PRODUCT_OPTIONS_TABLE." where variantID=".$variantid);
db_query("delete from ".CATEGORY_PRODUCT_OPTION_VARIANTS." where variantID=".$variantid);


PPS. Заодно дошли наконец руки разобраться с еще одной ошибкой, когда при импорте из CSV варианты характеристик, содержащие символы '<>& "двоятся", т.е. создаются столько раз, сколько товаров с таким вариантом характеристики. Все просто: существование варианта, скажем, rock&roll проверяется функцией optOptionValueExists, где для проверки текст подставляется как mysql_real_escape_string('rock&roll'), а пишется текст в таблицу функцией optAddOptionValue как htmlspecialchars('rock&roll').
Соответственно, строка rock&roll вовсе не равна строке rock&amp;roll и... создается еще один одноименный вариант :).
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 micehide

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

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

Отправлено 21 November 2013 - 10:57 AM

1. Список полей, доступных для конвертации состоит из списка характеристик, у которых нет ни одного варианта. Т.е. если у характеристики уже есть хотя бы один вариант, но у каких-либо товаров эта характеристика заполнена как произвольная строка - сконвертировать не получится, т.к. характеристики не будет в списке.
2. Конвертируются и те характеристики, где в произвольной строке задана пустая строка. В вариант с пустой строкой :).


- ставлю в очередь на доработку...

PS. Нашел ошибку в catalog_extra.php (штатную). Перепутаны таблицы, это вызывает ошибку SQL при удалении варианта характеристики.


- поправил этот баг в catalog_extra.php, перезалил архив с модулем, спасибо badisoft!
  • 0

#14 badisoft

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

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

Отправлено 21 November 2013 - 01:50 PM

А я просто написал файлик convert.php, который кладу в core/includes/admin/
Он при первом же входе в админку выполняется и удаляется.

<?php
# удалим "пустые" записи в таблице характеристик товаров
db_query("DELETE FROM ".DB_PRFX."product_options_values WHERE option_type=0 AND (TRIM(option_value)='' OR option_value IS NULL)");
# сконвертируем характеристики вида "произвольная строка" в варианты
$data=db_query("SELECT * FROM ".DB_PRFX."product_options_values WHERE option_type=0 AND NOT TRIM(option_value)='' AND option_value IS NOT NULL");
while ($row = db_fetch_assoc($data))
{
$variant=xToText($row['option_value']);
$data1 = db_query("SELECT * FROM ".DB_PRFX."products_opt_val_variants WHERE optionID=".$row['optionID']." AND option_value='$variant'");

if ($row1 = db_fetch_assoc($data1))
{
$variantID = $row1['variantID'];
}
else
{
db_query("INSERT ".DB_PRFX."products_opt_val_variants SET optionID=".$row['optionID'].",option_value='$variant'");
$variantID = db_insert_id();
db_query("INSERT ".DB_PRFX."product_options_set SET productID=".$row['productID'].",optionID=".$row['optionID'].",variantID=$variantID");
}
db_query("UPDATE ".DB_PRFX."product_options_values SET option_value='',option_type=1,variantID=$variantID WHERE optionID=".$row['optionID']." AND productID=".$row['productID']);
db_query("DELETE FROM ".DB_PRFX."product_options_set WHERE productID=".$row['productID']." AND optionID=".$row['optionID']);
db_query("INSERT ".DB_PRFX."product_options_set SET productID=".$row['productID'].", optionID=".$row['optionID'].", variantID=$variantID");
}
# уберем начальные и конечные пробелы у вариантов, если они есть
db_query("UPDATE ".DB_PRFX."products_opt_val_variants SET option_value=TRIM(option_value)");
# объединим одноименные варианты
$data=db_query("SELECT * FROM ".DB_PRFX."products_opt_val_variants GROUP BY option_value,optionID");
while ($row = db_fetch_assoc($data))
{
$data1=db_query("SELECT * FROM ".DB_PRFX."products_opt_val_variants WHERE option_value='".$row['option_value']."' AND optionID=".$row['optionID']." AND NOT variantID=".$row['variantID']);
while ($row1 = db_fetch_assoc($data1))
{
db_query("UPDATE ".DB_PRFX."product_options_values SET variantID=".$row['variantID']." WHERE variantID=".$row1['variantID']);
db_query("UPDATE ".DB_PRFX."product_options_set SET variantID=".$row['variantID']." WHERE variantID=".$row1['variantID']);
db_query("UPDATE ".DB_PRFX."category_product_options__variants SET variantID=".$row['variantID']." WHERE variantID=".$row1['variantID']);
db_query("DELETE FROM ".DB_PRFX."products_opt_val_variants WHERE variantID=".$row1['variantID']);
}
}
# удалим этот файл
unlink("core/includes/admin/convert.php");
?>

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

#15 badisoft

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

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

Отправлено 21 November 2013 - 08:43 PM

Опс.... Нашел аж три ошибки в коде :). Исправил.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#16 badisoft

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

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

Отправлено 18 December 2013 - 10:03 AM

Update: нашел ошибку, исправил. Проявлялась тогда, когда у двух характеристик товаров были одноименные варианты. Например, "есть" или "нет" или что-то подобное. При этом в товаре (в товаре!) одной из характеристик присваивалось два одноименных варианта, а второй (точнее, остальным) - ни одного.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 micehide

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

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

Отправлено 21 November 2014 - 01:00 AM

Добавлена новая версия расширения за номером 1.2. Устранены некоторые ошибки.
Основное исправление: теперь можно конвертировать характеристики, часть которых уже существует в виде вариантов. При этом сконвертируются только произвольные значения, проверив существование аналогичного варианта (если вариант есть, то товарам назначится уже имеющийся вариант, а если нет - создастся новый вариант характеристики).
  • 0