Автор Тема: Связанные атрибуты  (Прочитано 6824 раз)

22 Октябрь 2013, 21:22:41
Ответ #15
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Sykoku, спасибо огромное! Завтра обязательно проверю и осилю ваш пост, сейчас уже не в состоянии. :)
Правда преста стоит 1.5.4. ПРидется обновится видимо на всякий.
23 Октябрь 2013, 07:38:42
Ответ #16
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Sykoku, вы ведь переделывали стандартную работу с атрибутами. Там всё время меняется URL и судя по вашему посту, у вас возникали с этим проблемы.
Если хотите, я могу дать вам модуль Attribute wizard, правда для версии 1.5.4. Там при выборе атрибутов, url не меняется. Плюс уже есть некое подобие связи. Самое главное неудобство там, это то, что набор можно задавать с любой группы (в любом порядке). То есть связь работает в две стороны, как сверху вниз, так и снизу вверх, что иногда может очень запутать пользователя. Если вы вдруг захотите его переделать, было бы чудесно :)
23 Октябрь 2013, 12:54:43
Ответ #17
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Переписывать чужой код, особенно, когда это код одиночки,  - задача неблагодарная. Один Линукс чего стоит. Я не переделывал отображение URL-кода. Я менял внутренний iD набора атрибутов на тот, что будет соответствовать какому-либо набору для данного товара. Плюс переписывал все под него все поля ввода для товара. А затем отдавал все это на откуп внутренним программкам отрисовки.
Я считаю, что весь этот набор точек и тире с косыми - бред. Для фильтрации при выборе товаров - смысл есть. Для конкретного товара - смысла нет. Почему? - да потому, что изначально на экране какая-то конкретная комбинация признаков, заданная "по умолчанию". И городить там возможность выбора по какому-либо полю особого смысла нет.
Если вдруг кому-нибудь очень сильно захочется, то он должен будет при переходе к конкретному товару проанализировать все указанные для него комбинации атрибутов и выбрать ТОЛЬКО те, что меняются.  И выводить их для выбора параметров. Все остальное - никому не надобно. То, что они указываются при создании необходимо для поиска и фильтрации по всему каталогу, а не по какой-то одной позиции.

23 Октябрь 2013, 13:04:48
Ответ #18
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вдогонку.
Могу дать ссылки демо-сайта для демонстрации. Просьба модераторов не воспринимать как рекламу - он нерабочий, не рекламируемый и т.д. Параллельно там живут еще несколько систем WP, OC, DP, ...

http://shop.trodat.kiev.ua/index.php?id_product=67&controller=product&id_lang=1 - меняется тип корпуса синхронно с типом шрифта

http://shop.trodat.kiev.ua/index.php?id_product=64&controller=product&id_lang=1 - меняется тип шрифта  - артикул с ценой

http://shop.trodat.kiev.ua/index.php?id_product=8&controller=product&id_lang=1 - клацаньем по цвету меняем вид/артикул.

Еще раз повторюсь - не вижу смысла использовать фильтр в переборе подвидов продукта.  Он явно прописан внутри кода. Указывать несуществующие параметры и любоваться надписью "недоступен для заказа" - просто странно.
23 Октябрь 2013, 17:19:38
Ответ #19
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Sykoku, вы ведь переделывали стандартную работу с атрибутами. Там всё время меняется URL и судя по вашему посту, у вас возникали с этим проблемы.
URL не меняется. Обработчик один и тот-же. Меняются данные. Алгоритм простой: при заполнении поля, получить ID элемента и  отправить запрос на сервер (Ajax), для выборки значений связанного поля, полученные данные вставить в соответствующие поля, на время запроса их заблокировать.
Решается с помощью jQuery.
23 Октябрь 2013, 17:33:01
Ответ #20
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В связи с фильтрами есть прелюбопытный баг.

Если вообще не давать имена каждому фильтру для отражения в строке URL, или они совпадут, то в URL заносятся при фильтрации категорий только выбранные условия в виде "/-". Все остальное опускается.
При обновлении окна стандартным Ctrl+R получим следующее:
- имеем строку вида index.php?id_category=21&controller=category&id_lang=1#/_-/_-/_-, которую парсер будет упорно пытаться обработать согласно своим принципам, а именно - выбор атрибутов в порядке их вхождения в текущий список атрибутов, а не применительно к их номерам/местам в данной подкатегории товаров. Результат - условия сместятся в самое начало выбора.

Опять=же, только теста ради:

Перейдите на страницу http://shop.trodat.kiev.ua/index.php?id_category=21&controller=category&id_lang=1

Поставьте выборы
Датер
Английский
Эконом

А теперь нажмите Ctrl+R

Что получим? - Правильно - резину. Как первый из списка. Остальные 2 потерялись - им просто не нашлось места в списке оставшихся условий выбора.
15 Ноябрь 2013, 15:55:17
Ответ #21
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Небольшие изменения - наткнулся на ситуацию, когда компилятор выдает ошибку функции JS до начала ее обработки - выход индекса за пределы массива.
2 часа пытался понять причину, но решил "отдаться" - 2 раза выполнил присвоение. Быфает...


Пример:
http://shop.trodat.kiev.ua/index.php?id_product=188&controller=product&id_lang=1

Копируйте ссылку - переадресация с форума теряет "&"
16 Июнь 2014, 14:18:35
Ответ #22
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Столкнулся с подобной задачей.
http://prestashop-forum.ru/index.php/topic,2593.0.html

Хочу попробовать Ваш вариант...
Однако у меня версия Престашоп 1.6.0.6...

Подойдёт ли Ваш \themes\default\js\product.js от 1.5.6 к 1.6.0.6?

Заранее спасибо!
16 Июнь 2014, 14:54:28
Ответ #23
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вижу 2 проблемы:
- в Престе нет ссылок на атрибуты, а есть их перечисление. Т.е все равно придется описывать все 480 подоттенков. Причем в одном атрибуте.
- Java о-о-о-очень мэдленно работает со списками и массивами. Даже не берусь предсказать, как она будет это все переваривать.

Если бы было родное понятие "составной атрибут", было бы проще. Тогда цвет задавался бы перечислением нескольких последовательных атрибутов. Пример описания:
1. Бледный/Яркий/Светлый/Нормальный/Темный/Тусклый
2. Красный/Оранжевый/Желтый/Зеленый/Синий/Голубой/Фиолетовый/Коричневый/Серый
С учетом компоновки RGB (CMYK) необходимо составить комплект из 3-х (4-х) не пересекающихся атрибутов (как минимум, один непустой).

Если придерживаться модели CMYK, то схема 4 цвета на 12 тонов и 10 уровней яркости вполне перекроет весь диапазон.
Просто ее придется красиво изобразить - в виде 4 пар полосок + рядом итоговый цвет. И большим кеглем написать: "Внимание! Цвет на мониторе может не совпадать с реальным цветом изделия!"

Примеры реализации на Java должны быть в Сети - задачу решали не раз для любого сайта с онлайн раскрасками.

Если очень хочется - могу попытаться адаптировать скрипт под 1.6.
16 Июнь 2014, 15:26:23
Ответ #24
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вижу 2 проблемы:
- в Престе нет ссылок на атрибуты, а есть их перечисление. Т.е все равно придется описывать все 480 подоттенков. Причем в одном атрибуте.
- Java о-о-о-очень мэдленно работает со списками и массивами. Даже не берусь предсказать, как она будет это все переваривать.

Если бы было родное понятие "составной атрибут", было бы проще. Тогда цвет задавался бы перечислением нескольких последовательных атрибутов. Пример описания:
1. Бледный/Яркий/Светлый/Нормальный/Темный/Тусклый
2. Красный/Оранжевый/Желтый/Зеленый/Синий/Голубой/Фиолетовый/Коричневый/Серый
С учетом компоновки RGB (CMYK) необходимо составить комплект из 3-х (4-х) не пересекающихся атрибутов (как минимум, один непустой).

Если придерживаться модели CMYK, то схема 4 цвета на 12 тонов и 10 уровней яркости вполне перекроет весь диапазон.
Просто ее придется красиво изобразить - в виде 4 пар полосок + рядом итоговый цвет. И большим кеглем написать: "Внимание! Цвет на мониторе может не совпадать с реальным цветом изделия!"

Примеры реализации на Java должны быть в Сети - задачу решали не раз для любого сайта с онлайн раскрасками.

Если очень хочется - могу попытаться адаптировать скрипт под 1.6.

Спасибо за Ваш ответ!
Да, я создал новый атрибут "Color description" где указал все 480 оттенка цвета (выпадающим списком)
Это дополнение к атрибуту "Color" - основные цвета
Создал необходимые комбинации для каждого товара, например:

11;Color:color:0, Color description :select:1;Black:0, black:1;
11;Color:color:0, Color description :select:1;Red:0, red:1
11;Color:color:0, Color description :select:1;Taupe:0, cream:1
и т.д.

Теперь при выборе основного цвета "Color", мне необходимо в выпадающем списке "Color description" отобразить подоттенки (максимум будет четыре)

Буду Вам очень признателен если адаптируете скрипт под 1.6.
Заранее большое спасибо!!!
16 Июнь 2014, 16:31:46
Ответ #25
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Тогда задача будет другая:
У меня выбор из списков взаимен: смена более младшего атрибута вызывает смену старшего. У Вас - просто связанные списки. При смене старшего атрибута просто необходимо перегенерировать cвязанные список для младшего, задав определенный признак отбора.
Только мне кажется, что это проще сделать фильтром? Например, признак "основной цвет" установлен красным. В виде ссылки это будет   
http://site/ru/categories/<number>-<name>.html#/color-red


16 Июнь 2014, 17:30:44
Ответ #26
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Тогда задача будет другая:
У меня выбор из списков взаимен: смена более младшего атрибута вызывает смену старшего. У Вас - просто связанные списки. При смене старшего атрибута просто необходимо перегенерировать cвязанные список для младшего, задав определенный признак отбора.
Только мне кажется, что это проще сделать фильтром? Например, признак "основной цвет" установлен красным. В виде ссылки это будет   
http://site/ru/categories/<number>-<name>.html#/color-red

Я правильно понимаю, что фильтр это модуль "Layered navigation block"
Если так, то здесь минус такой.
Для товара будут отображаться все цвета и все возможные описания цвета...
Мне же надо, чтобы для конкретного цвета отображались описания в соответствии с комбинациями.
16 Июнь 2014, 18:08:07
Ответ #27
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да, есть такая фишка - показывает ВСЕ. И при выборе недопустимой комбинации вываливает надпись "Выберите другую". Поэтому и переделывалось. И скрывались для изменения атрибуты, коих всего 1 в списке.

В общем я понял. Постараюсь что-то придумать до конца недели.
26 Июнь 2014, 09:09:40
Ответ #28
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да, есть такая фишка - показывает ВСЕ. И при выборе недопустимой комбинации вываливает надпись "Выберите другую". Поэтому и переделывалось. И скрывались для изменения атрибуты, коих всего 1 в списке.

В общем я понял. Постараюсь что-то придумать до конца недели.

С нетерпением ждём product.js к 1.6!!!
26 Июнь 2014, 15:34:15
Ответ #29
  • Пользователь
  • **
  • Сообщений: 75
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Там не все так просто:

Ошибка в самой логике выбора - при смене атрибута некорректно определяются параметры объекта. Например, цена.

Поэтому и дольше времени потребуется, чем планировалось.

P.S.

Очень странное поведение движка в режиме каталога. Советую отключить, пока его не приведут в чувство.