[Решено] Комплект товаров JoomShopping - конструктор

  • 72 Ответов
  • 13773 Просмотров

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

*

Оффлайн vgromov

Написал некий функционал для внутреннего использования. Размещаю здесь - может пригодится кому.
Совместимость: J!2.5-J!3, JS 3.x-4.x

Что делает:
1) Добавляет в форму редактора товара закладку конструктора комплекта. Т.о. из любого товара можно сделать комплект.
2) На каждый товар, вложенный в комплект, можно давать скидку в % или в дельте от исходной цены
3) Цена "товара-комплекта" автоматически пересчитывается, оригинальная цена хранится в стандартном поле "старая цена"
4*) Удаление/снятие с публикации в базе магазина товара, входящего в комплект, вызывает перерасчет "старой" и "новой" цен товаров-комплектов, включающих удаленный/распубликованный товар.
5**) В корзине при покупке отображается главный "товар-комплект"
6) Конструктор комплекта минимально поддерживает AJAX, возможно изменение порядка товаров внутри комплекта, редактирование/добавление/удаление без полной перезагрузки формы.

Что не делает (мне было не надо):
1***) Не поддерживается конфигурация атрибутов вложенных товаров.
2) По-умолчанию, отсутствуют шаблоны вывода комплекта в видах "список товаров", "товар", "товар-в-корзине" - т.к. с точки зрения магазина комплект есть товар, для каждого такого вида надо делать template override, чтобы осуществлялся, например, вывод вложенных товаров, с возможным указанием ценовой выгоды. Живьем это выглядит, например, так: http://eco-e.ru/shop/light/ecl01-keo.
Может быть, это даже плюс, ибо сохраняется полная совместимость со стандартным шаблоном вывода, с другой стороны - как разработчик захочет выводить представление комплекта - так и сделает, ничем не ограничивая себя.
3***) При формировании комплекта не учитывается склад входящих товаров, можно было бы выводить готовность комплекта на основании готовности входящих товаров.

Устанавливается через менеджер расширений JoomShopping.
* Пока что есть недоработки - не всегда пересчитывает.
** См. "что не делает" п.2
*** Мне было не надо, но, думаю, принципиальных ограничений для реализации такого функционала - нет.

Баги/фичи: ( найдете-пишите мне, по мере возможности, буду исправлять)
1) Многослойное налогообложение. Т.к. комплект==продукт, на сам продукт-комплект тоже действует налог. Это не есть гут. Ибо, при расчете цены в комплекте, учитываются индивидуальные налоги каждого входящего товара, а к уже рассчитанному комплекту налог применяться, на мой взгляд, уже не должен. Т.к. в моем конкретном случае, в налогах заведен спец пункт - безналоговая схема, т.е. 0%, то именно ее я применяю к товару-комплекту, чтобы избежать многослойного налогообложения. Повторю, налоги уже учитываются индивидуально для каждого товара входящего в комплект. Если есть соображения, какие еще возможны алгоритмы расчета налогов, пишите, обдумаем вместе.


Обновлено:
+Исправил потерю изображений в J2.x JS3.x
+Исправил инсталляцию и работу на J!2 и JS3.x
+Паровозом к закачке добавил пример template override с использованием конструктора в карточке продукта. Там изменен только один файл, но я для удобства в архив законопатил все.


Примечание по использованию:
[spoiler]
При изменении параметров существующего комплекта, под блоком комплекта, рядом с кнопкой "Добавить" появляется кнопка "Сохранить" - ее необходимо нажать для сохранения изменений в товарах комплекта. Общая кнопка "Сохранить", в верхнем тулбаре, изменения в свойствах индивидуальных товаров комплекта не сохраняет.
Поэтому, если что то меняли в свойствах - сначала жмем нижнюю кнопку "Сохранить", а после того, как она пропадет, можно уже жать верхнюю.
[/spoiler]

Скачивать тут: https://yadi.sk/d/cs_6QulCf2XZ4
Архив с примером template override тут: https://yadi.sk/d/ARidBcNsf2XiG

Админка конструктора выглядит так:
« Последнее редактирование: 04.03.2015, 12:37:53 от vgromov »

*

Оффлайн Sven

Joomla! 2.5.11
JoomShopping 3.15.2

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

Warning: Invalid argument supplied for foreach() in Z:\home\keliiloc.ru\www\components\com_jshopping\lib\products_set.php on line 89
Warning: Invalid argument supplied for foreach() in Z:\home\keliiloc.ru\www\components\com_jshopping\lib\products_set.php on line 107

А при попытке добавить товар в комплект, появляется системное сообщение: Невозможно найти товар с идентификатором: (№)

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

*

Оффлайн vgromov

Здравствуйте.
Цитировать
Joomla! 2.5.11
JoomShopping 3.15.2
Увы, на вашей конфигурации не проверял. Отвечаю только за совместимость с J!3 и JS 4.2 и выше, т.к. есть на чем отладить.

Однако, попробовать наладить и там все-таки можно. Подскажите, какая у вас версия php, попробую поднять тестовую платформу. Не обещаю, что скоро получится, но попробую разобраться.

Цитировать
И еще мне кажется правильнее было бы создавать комплект не из любого товара, а вообще с чистого листа при создании нового товара. Допустим товар продается как отдельно сам по себе по одной цене, так и в комплекте со скидкой. А если на основании этого товара сделать комплект, то отдельно его продавать уже не получится.
Да, вы правы, именно так набор товаров, по-уму, и формируется. Заводим товар, который у нас будет комплектом, и добавляем в него существующие товары.
Когда я говорил, что любой товар можно сделать комплектом, я имел в виду то, что комплект, с точки зрения ядра магазина, такой же товар, как и все остальные, и в принципе, к любому существующему товару можно "прикрутить" комплект, хотя, как вы правильно заметили, особого смысла в этом нет.

UPD. Как ни странно, удалось малой кровью адаптировать аддон под версию JS3x, хотя, наверняка еще "дырки" после портирования остались. Но можно сказать, что аддон теперь совместим с J25-J3 и JS3x-JS4x.
Скачивать в топе.

Обновил также первое сообщение.
« Последнее редактирование: 04.03.2015, 12:38:38 от vgromov »

Ребят объясните поэтапно, как заставить эту фичу работать, потому что пока слова автора с реальным делом расходятся. На J! 2.5.14 ~ JS 3.15.3 и на J! 3.1.5 ~ JS 4.3.3 данной вкладки нет. Ставлю через интерефейс JoomShopping захожу в создание товаров, вкладки "Конструктор комплекта" нет. Быть может данная опция включается где-то в настройках, у кого все получилось просьба отписать.

*

Оффлайн Brooksus

  • *****
  • 623
  • [+]156 / [-]0
  • Пол: Мужской
  • Ща спою...
    • Просмотр профиля
    • Brooksite.ru
Неправильно архивирован из-за этого устанавливается в отдельную папку, а не туда, куда нужно ... Но даже если установить правильно, работает криво на Joomla 2.5 JS3.14.3
Или + или YM41001160794290, или WMR R189734255107, а лучше все сразу и много.

При скачивании - файл удален или перемещен. Обновите ссылку пожалуйста

*

Оффлайн Chemax

Обновите ссылку пожалуйста)

*

Оффлайн vgromov

Прошу прощения за "протухшую" ссылку, из дропбокса я контент убрал, и ничего не предложил взамен. Переместил на Яндекс диск, ссылку обновил. Проверил работу на JS4.4. + J!3.2.1, php 5.4.23, MySQL 5.5.34, на демо данных магазина работает.
Проверил также на JS3.16.1 + J!2.5.17, MySQL 5.5.34, php 5.4.23, на демо данных. Да, косяки есть, из того, что бросается в глаза - после сохранения комплекта не отображаются мини-изображения товаров в комплекте. Да, дорабатывать для JS3.x J!2.1.x надо. Но повторюсь - разрабатывал я это для конкретного своего проекта, базировавшегося на JS4.x и J!3.x. Разработку продолжить в ближайшее время сам не могу - завален основной работой по С++. Исходники компонента открыты - приглашаю тех, кто разбирается в SQL, PHP, JavaScript, принимать участие в доведении продукта "до ума". На выходе будет номально работающий "фревый" компонент, по качеству несравнимо лучший того ужаса, который _продают_ сами разработчики JS.

PS. У меня неадекватно срабатывает оповещение о новых сообщениях в теме на форуме, народ то давно уже пеняет мне на ссылку, а я и не в курсе. Если что-то срочное - пишите на е-мейл.
« Последнее редактирование: 21.01.2014, 13:14:03 от vgromov »

*

Оффлайн AndreF

Искал как можно в JoomShopping организовать комплект, а тут аддон у вас по идеи то что нужно, но в программирование еще все еще туго,  поэтому  пока еще не могу внести нужные изменения.
И еще, что-то я не соображу, а как отображать товары в комплекте на сайте?
В админке собираю комплект, цена на сайте меняется от суммы товаров в комплекте, а сами комплектующие не выводятся на сайте.
А еще, пункт “Конструктор комплекта” появляется только после создания и сохранения товара при повторном редактирование, а когда создается новый товар, этого пункта нет.
(Joomla! 3.2.2 Stable, JoomShopping Version 4.3.3)

:)
Было бы замечательно, чтобы принцип формирования комплекта был организован как у пункта  «сопутствующие товары», только с возможность выбора клиентом нужных комплектующих и их количества и оформлен как один комплект заказа.
Типа: http://www.express-office.ru/catalog/staff/Imago/#unhash

очень полезное расширение!
Единственное, нашел одну недоработку, которая серьезно усложняет мне его использование (

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

Поясню зачем...
У меня имеется прайс на комплектующие со смешанными ценами (доллары, рубли, евро). Я создаю товар, который комплектую кучей составляющих. Задача - получить конечную цену составного товара, которая будет меняться сама при скачках курсов валют.

А вообще, это именно то, что я искал. Спасибо!

P.s.: J-3.2.1, JS-4.4.0

*

Оффлайн igalko

J-3.2.3+JS-4.4 на денвере при обращении к редактированию товара выдает ошибку
Fatal error: Call to undefined method jshopConfig::getVersion() in Z:\home\localhost\www\tm\components\com_jshopping\lib\products_set.php on line 30
в чем может быть загвоздка?

Не отображаются товары внутри комплекта, подскажите что подкрутить?
http://yoburger.ru/cafe/test/product/view/63/1107

*

Оффлайн vgromov

Постараюсь ответить всем сразу о наболевшем :)

1) пользователю iam_numlock, писавшему в личку - ответить пока не могу, т.к. сообщений у меня < 10 :) Но e-mail открыт, пишите туда, так гарантированно дойдет. Вознаграждение это хорошо :) но главного ресурса у меня нет - времени, и вознаграждение тут, увы, не поможет.

2)
Цитировать
И еще, что-то я не соображу, а как отображать товары в комплекте на сайте?
В админке собираю комплект, цена на сайте меняется от суммы товаров в комплекте, а сами комплектующие не выводятся на сайте.
Надо доработать шаблон вывода товара на сайте, т.к. стандартный шаблон ничего о данных по комплекту "не знает". Как делать Joomla template overrides - написано уже 100000 раз везде.
По минимуму нас интересует раздел list_products, файл product.php (отображение товара в списке, я стандартный файл вообще не менял), и раздел product, файл product_default.php.
Компонент "комплект продуктов" добавляет, если текущая запись - запись комплекта, в объект представления данные, по которым и надо генерить отображение комплекта.
Например, для комплекта будет присутствовать проперть $this->isProductSet, и следующий код выведет экономию при покупке комплекта, по сравнению с покупкой отдельных товаров:
    if( !empty($this->isProductSet) ) {?>
<div class="pset_saving">
<?php echo _JSHOP_PSET_TOTAL_SAVED;?>: <span class="pset_saving"><?php echo formatprice($this->product->product_old_price-$this->product->getPriceCalculate());?></span>
    </div>
_JSHOP_PSET_TOTAL_SAVED - строковая локализуемая константа шаблона. pset_saving - CSS класс оформления блока вывода сэкономленной суммы.
Вот так _у меня_ выводится блок товаров, включенных в комплект:
[spoiler]
if( isset($this->isProductSet) && $this->isProductSet ) {
                php foreach($this->products_set as $idx => $p)
{
$name = htmlspecialchars($p->name);
$descr = htmlspecialchars($p->short_description);
echo '<div class="pset_tile">';
echo '<div class="image_block"><a href="'.$p->product_link.'"><img class="jshop_img" src="'.getPatchProductImage($p->image, 'thumb', 1).'" title="'.$name.'" alt="'.$name.'" /></a></div>';
echo '<div class="name"><a href="'.$p->product_link.'">'.$name.'</a></div>';
echo '<div class="description">'.$descr.'</div><div class="cleared"></div>';
echo '<table><tr class="old_price"><td>'._JSHOP_PSET_ORGPRICE.':</td><td><span class="old_price">'.formatprice($p->product_price).'</span></td></tr>';
echo '<tr class="jshop_price"><td>'._JSHOP_PSET_PRICE.':</td><td><span>'.formatprice($p->price_in_set).'</span></td></tr>';
echo '<tr class="pset_count"><td>'._JSHOP_PSET_CNT.':</td><td>x'.$p->cnt.'</td></tr></table>';
echo '</div>';
} ?><div class="cleared"></div><?php }?>
_JSHOP_PSET_XXXX - строковые локализуемые константы, определенные в моем шаблоне сайта.
[/spoiler]

3)
Цитировать
А еще, пункт “Конструктор комплекта” появляется только после создания и сохранения товара при повторном редактирование, а когда создается новый товар, этого пункта нет. (Joomla! 3.2.2 Stable, JoomShopping Version 4.3.3)
Может быть, "фокусы" системного плагина кэширования Joomla. Я его практически всегда отключаю, т.к. он лишь один из возможных путей ускорения загрузки сайта, далеко не самый главный, и часто мешающий жить.

4)
Цитировать
Если цены составляющих товаров указаны в долларах, а основного товара в рублях, то никакого перерасчета из валюты в валюту не происходит даже при том, что в настройках магазина указаны все курсы.
Да. Тут определенно надо доделывать код компонента. Код в открытом доступе, поправите - будет лучше всем.

5)
Цитировать
J-3.2.3+JS-4.4 на денвере при обращении к редактированию товара выдает ошибку
А вот это уже мне надо будет проверять. Работаю сейчас на тестовой связке J-3.2.3+JS-4.3.1. Программисты JS спокойно могли поменять/доработать API. Пока на новый JS не переходил, как раз по этой причине.

6)
Цитировать
Не отображаются товары внутри комплекта, подскажите что подкрутить?
http://yoburger.ru/cafe/test/product/view/63/1107
Думаю, ответил на ваш вопрос в п.2

*

Оффлайн vgromov

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

В представление добавляются поля
products_set - собственно коллекция товаров, входящих в комплект
isProductSet - доп. признак, что представление является представлением именно комплекта

products_set - индексированная коллекция комплектных товаров. Каждая запись - стандартная запись товара магазина, дополненная несколькими полями:

pid - идентификатор записи товара (в б.д. магазина)
mainCatId - идентификатор основной категории (основная, видимо, первая, присвоенная товару при редактировании) комплектного товара (в б.д. магазина)
product_link - ссылка на страничку комплектного товара в магазине
price_in_set - цена комплектного товара в комплекте (пардон за тавтологию)

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

*

Оффлайн DronSF

Почему то основная цена получается из цены добавленных товаров в комплект. Пример: основной товар стоит 300р, добавляю товар стоимостью 200р в итоге комплект стоит 200р и скидка делается от 200р. Подразумевалось что основная цена комплекта станет как минимум суммой основного товара + добавленные, и уже от нее делать скидку.

А нельзя реализовать так чтобы товар продавался по одной цене, а покупатель зайдя в товар имел возможность сам формировать комплект со скидками (из предложенных вариантов)? Как например работа с атрибутами, только чтобы товары из комплекта учитывались как проданные (уменьшалось кол-во на складе).


*

Оффлайн vgromov

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

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

*

Оффлайн vgromov

Почему то основная цена получается из цены добавленных товаров в комплект.

Именно так. Так и было мной задумано.
Основного товара у комплекта нет.
Товар, который делается комплектом, перестает быть товаром, и становится контейнером других товаров. Цена его игнорируется и перезаписывается.

А нельзя реализовать так чтобы товар продавался по одной цене, а покупатель зайдя в товар имел возможность сам формировать комплект со скидками (из предложенных вариантов)? Как например работа с атрибутами, только чтобы товары из комплекта учитывались как проданные (уменьшалось кол-во на складе).

Можно сделать все. Буду только рад, если моя простенькая наработка ляжет в основу чего-то профессионального и серьезного.
К сожалению, по основной работе занят плотно, и не могу сейчас заниматься веб-программированием вообще.
Да и профессиональная разработка такого компонента - это уже совсем другая песня, уверяю вас.
Вам надо обратиться к людям, профессионально занимающимся подобными вещами.

*

Оффлайн diana1975

Уважаемое сообщество, кто-нибудь решил проблему с картинками, которые исчезают куда-то при сохранении в админке, на сайте тоже не выводятся. До сохранения  показывается фото и правильное его название: http://prntscr.com/4w0n55, а после сохранения такая картина: http://prntscr.com/4w0na5

*

Оффлайн diana1975

Если у кого-нибудь возникнет такая проблема, как у меня (смотрите выше), значит, ваша версия Joomla старая, нужна Joomla 3 и выше и  JoomShopping к нему соответствующий ( у меня J!2.5.19 - JS 3.16).Жаль, все уже вытянула с этого аддона, что мне нужно было, только картинка на сайте и в админке не появлялась...

*

Оффлайн step-di

Здравствуйте
У меня переменные $this->isProductSet и $this->isProductSet доступны только в карточке товара
в списке товаров, в которых встречается товар-комплект указанный код
if( isset($this->isProductSet) && $this->isProductSet ) {
                php foreach($this->products_set as $idx => $p)
{...
не срабатывает
при выводе  значения массива $this в списке товаров я не обнаруживаю никаких данных по комплекту.

Можете ли дать пример кода для списка товаров и для корзины
для вывода наименований товаров и ссылок на них, входящих в комплект
« Последнее редактирование: 20.10.2014, 14:47:24 от step-di »

*

Оффлайн vgromov

Волею судеб скоро буду переделывать под новую версию магазина, заодно вспомню, как там и что, покажу и расскажу :)

*

Оффлайн юрий 009

добрый день ...
Версия CMS - Joomla 2.5.28
Версия магазина JoomShopping 3.20.1
проблема такая как у diana1975
эмиграция в новую Joomla смерть магазина :(

скажите пожалуйста другого выхода нет?

*

Оффлайн diana1975

поделюсь своим решением: http://joomlaforum.ru/index.php/topic,270760.0.html

*

Оффлайн vgromov

Если у кого-нибудь возникнет такая проблема, как у меня (смотрите выше), значит, ваша версия Joomla старая, нужна Joomla 3 и выше и  JoomShopping к нему соответствующий ( у меня J!2.5.19 - JS 3.16).Жаль, все уже вытянула с этого аддона, что мне нужно было, только картинка на сайте и в админке не появлялась...

Картинки поправил.

*

Оффлайн diana1975

спасибо, мне как раз пригодится

*

Оффлайн юрий 009

2) Надо доработать шаблон вывода товара на сайте, т.к. стандартный шаблон ничего о данных по комплекту "не знает". Как делать Joomla template overrides - написано уже 100000 раз везде.
По минимуму нас интересует раздел list_products, файл product.php (отображение товара в списке, я стандартный файл вообще не менял), и раздел product, файл product_default.php.
Компонент "комплект продуктов" добавляет, если текущая запись - запись комплекта, в объект представления данные, по которым и надо генерить отображение комплекта.
Например, для комплекта будет присутствовать проперть $this->isProductSet, и следующий код выведет экономию при покупке комплекта, по сравнению с покупкой отдельных товаров:
    if( !empty($this->isProductSet) ) {?>
<div class="pset_saving">
<?php echo _JSHOP_PSET_TOTAL_SAVED;?>: <span class="pset_saving"><?php echo formatprice($this->product->product_old_price-$this->product->getPriceCalculate());?></span>
    </div>
_JSHOP_PSET_TOTAL_SAVED - строковая локализуемая константа шаблона. pset_saving - CSS класс оформления блока вывода сэкономленной суммы.
Вот так _у меня_ выводится блок товаров, включенных в комплект:
[spoiler]
if( isset($this->isProductSet) && $this->isProductSet ) {
                php foreach($this->products_set as $idx => $p)
{
$name = htmlspecialchars($p->name);
$descr = htmlspecialchars($p->short_description);
echo '<div class="pset_tile">';
echo '<div class="image_block"><a href="'.$p->product_link.'"><img class="jshop_img" src="'.getPatchProductImage($p->image, 'thumb', 1).'" title="'.$name.'" alt="'.$name.'" /></a></div>';
echo '<div class="name"><a href="'.$p->product_link.'">'.$name.'</a></div>';
echo '<div class="description">'.$descr.'</div><div class="cleared"></div>';
echo '<table><tr class="old_price"><td>'._JSHOP_PSET_ORGPRICE.':</td><td><span class="old_price">'.formatprice($p->product_price).'</span></td></tr>';
echo '<tr class="jshop_price"><td>'._JSHOP_PSET_PRICE.':</td><td><span>'.formatprice($p->price_in_set).'</span></td></tr>';
echo '<tr class="pset_count"><td>'._JSHOP_PSET_CNT.':</td><td>x'.$p->cnt.'</td></tr></table>';
echo '</div>';
} ?><div class="cleared"></div><?php }?>
_JSHOP_PSET_XXXX - строковые локализуемые константы, определенные в моем шаблоне сайта.
[/spoiler]
Простите что переспрашиваю ... но с моими минимальными знаниями php практически нереально воплотить в жизнь этот замысел ...
расскажите пожалуйста подробнее ...



Здравствуйте.Увы, на вашей конфигурации не проверял. Отвечаю только за совместимость с J!3 и JS 4.2 и выше, т.к. есть на чем отладить.

Однако, попробовать наладить и там все-таки можно. Подскажите, какая у вас версия php, попробую поднять тестовую платформу. Не обещаю, что скоро получится, но попробую разобраться.
Да, вы правы, именно так набор товаров, по-уму, и формируется. Заводим товар, который у нас будет комплектом, и добавляем в него существующие товары.
Когда я говорил, что любой товар можно сделать комплектом, я имел в виду то, что комплект, с точки зрения ядра магазина, такой же товар, как и все остальные, и в принципе, к любому существующему товару можно "прикрутить" комплект, хотя, как вы правильно заметили, особого смысла в этом нет.

UPD. Как ни странно, удалось малой кровью адаптировать аддон под версию JS3x, хотя, наверняка еще "дырки" после портирования остались. Но можно сказать, что аддон теперь совместим с J25-J3 и JS3x-JS4x.
Скачивать тут: addon_products_set.zip

Обновил также первое сообщение.

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

*

Оффлайн vgromov

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

*

Оффлайн vgromov

Простите что переспрашиваю ... но с моими минимальными знаниями php практически нереально воплотить в жизнь этот замысел ...
расскажите пожалуйста подробнее ...
Юрий, пишите в личку, разберемся, если время позволит.