ГРУППИРУЙТЕ ТОВАРЫ И ПРОДАВАЙТЕ ИХ КОМПЛЕКТАМИ!
Плагин "Товары-комплекты" дает Вам возможность создать новый товар, в составе которого будут находиться другие товары из Вашего магазина. При этом товар-комплект будет отображен на Витрине, как новая единица товара.
Что такое товар-комплект?
Простой пример поможет Вам это понять.
Пусть Вы продаете Стол. Для покупателя это просто Стол, но если Вы производитель, то для Вас это:
- Столешница 1х1,5м - 1шт.
- Деревянные ножки 50х50х1000мм - 4шт.
- Шурупы - 4шт
- Банка краски - 1шт
Вам необходимо учитывать эти комплектующие и в зависимости от них рассчитывать количество продаваемых столов.
После покупки Стола Вы хотите, чтобы со склада списались одна единица Стола и комплектующие согласно их количеству.
Другой пример.
Вам нужно продать залежалый товар. Вы организуете распродажу. Создаете 10 новых товаров-комплектов, в которых содержится тот самый товар. Но цену на него вы ставите со скидкой и показываете покупателю, что комплект состоит из уцененных товаров.
В вашем распоряжении все инструменты работы с товаром: хотите создавайте новую категорию "Распродажа комплектов", хотите устанавливайте специальные наклейки на товары-комплекты.
Отличия плагина "Товары-комплекты" и Комплекты со скидкой:
-
1) Плагин "Товары-комплекты" создает новую единицу товара, которая отображается на Витрине, как обычный товар, но имеющий в своем составе другие товары
2) Плагин "Комплекты со скидкой" группирует товары и дает возможность приобрести их сразу вместе, при этом новая единица товара не создается -
1) Работа с товаром-комплектом точно такая же, как и с обычным товаром
2) Поскольку в плагине "Комплекты со скидкой" нет понятия "новая единица товара", то и комплекты не обладают функциями обычных товаров (услуги, страницы, характеристики и прочее)
Подробнее о возможностях плагина читайте ниже.
Формируйте комплекты из любых товаров
При помощи поиска с расширенным автозаполнением Вы можете добавить в состав товара-комплекта любые товары вплоть до конкретного артикула.
Комплектующие являются жестко определенными, и покупатель не сможет поменять артикул или количество одного из составляющих комплекта.
Каждому артикулу свой комплект!
Для каждого артикула Вы можете создать свой комплект! Простой пример поможет все прояснить:
Вернемся к Столу, упомянутому выше. Предположим, что столешницы у данного Стола разного цвета: красная, зеленая, голубая. Для того чтобы не создавать 3 разных товара-комплекта с разными столешницами, Вы можете создать 3 артикула и для каждого указать свой цвет столешницы.
Из примера специально были удалены другие составляющие комплекта, чтобы легче было понять принцип формирования комплектов для каждого артикула.
Также ничто Вам не мешает создать артикулы с абсолютно разными комплектующими.
Автоматический контроль остатков и цены
Плагин позволяет Вам в зависимости от количества и доступности комплектующих в автоматическом режиме изменять количество остатков товара-комплекта.
Также имеется возможность автоматического изменения цены товара-комплекта.
Работа со складами и остатками
При выборе комплектующих Вы можете выбрать склад, который будет главным для товара в наборе и режим.
Возможные вариации:
- Если выбран конкретный склад и режим "Только этот склад", то остатки будут списываться и возвращаться только на этот склад. Остатки товара-комплекта рассчитываются только от выбранного склада.
- Если выбран конкретный склад и режим "Автоматический", то остатки в первую очередь спишутся с этого склада, а потом пропорционально с других складов. Возвращение остатков будет произведено пропорционально по всем складам. Остатки товара-комплекта рассчитываются только от выбранного склада.
- Если выбран склад "Автоматический" и режим "Автоматический", то остатки будут списываться автоматически. Если на одном из складов неограниченное количество остатков, то этот склад будет выбран в качестве основного.
Распределение остатков товара-комплекта может быть автоматическим, либо ручным.
Отображение комплектующих
При желании для товаров-комплектов Вы можете отображать их комплектующие, либо нет.
Если для каждого артикула создан свой комплект, то и комплектующие будут отображаться на Витрине соответственно для каждого артикула свои.
Как настроить внешний вид комплектующих? Почему могут не отображаться комплектующие? Где и в каком месте их выводить? Как вывести дополнительную информацию о комплектующих? - читайте на странице Отображение комплектующих
Проверка остатков в корзине
На странице корзины магазина плагин может осуществлять проверку наличия комплектующих, и в случае их недостаточного количества уведомлять об этом покупателя, и запрещать дальнейшее оформление товара.
Имеется 2 проверки:
- Между товарами-комплектами
- Между товарами-комплектами и обычными товарами
В первом случае, если в корзине находится несколько товаров-комплектов, у которых отдельные комплектующие совпадают и их суммарное количество превышает остатки на складах, то покупателю будет показано уведомление и запрещено дальнейшее оформление.
Во втором случае, если в корзине находится товар-комплект и обычный товар, который входит в состав этого товара-комплекта, и количество товара не хватает на покупку комплекта, то будет показано уведомление и запрещено дальнейшее оформление.
!!! При второй проверке имеется один важный момент: у Вас должен быть только один склад, чтобы такая проверка проходила корректно. В иных случаях проверки не будет. !!!
Как сделать проверку при удалении товара из корзины, изменении количества товаров в корзине? Подробнее читайте на странице Настройка корзины
Локализация Витрины для любого языка
Плагин создан таким образом, что Вы с легкостью можете приспособить его для разных языков.
Если у Вас появились вопросы, пожелания по изменению плагина или Вы обнаружили недоработку - пишите на email: gapon2401@gmail.com
При желании Вы можете показать покупателю комплектующие товара-комплекта.
Основные моменты
В настройках плагина Вы можете выбрать в каком месте вывести комплектующие на странице товара.
Для вывода могут быть использованы текущие файлы шаблона Вашей темы дизайна:
- list-thumbs.html
- list-thumbs-mini.html
- catalog.html
- products.slider.html
- products.list.html
- и др.
Плагин по порядку ищет перечисленные выше файлы и при нахождении какого-либо из них использует его в качестве шаблона для вывода.
В настройках плагина имеется поле, где Вы можете указать нужный Вам файл, который будет отображать комплектующие. Имеется возможность указать несколько файлов через запятую, чтобы при отсутствии какого-либо из них плагин продолжал искать среди оставшихся.
ВНИМАНИЕ! В зависимости от Вашей темы дизайна шаблоны могут быть разные, и параметры, передаваемые в них, также могут отличаться, что может повлечь за собой некоторые ошибки на странице. Чтобы их избежать - обратитесь к разработчику темы, чтобы он Вам помог.
Плагин имеет системные файлы для вывода комплектующих. Вы можете написать один из них в поле для вывода:
- itemsets-list-table.html - отображение таблицей
- itemsets-ul.html - отображение списком
- itemsets-small-list.html - отображение малой таблицей
На странице приложения Магазин - Витрина можно создать новый HTML файл темы, который будет использоваться только для вывода комплектующих, и написать его в поле настроек плагина. Посмотреть пример содержимого такого файла можно на странице настроек плагина.
Ручной вывод
Используйте хелпер в любом месте шаблона.
Общий вид хелпера: {shopItemsetsPlugin::showItems($product, $sku_id = 0, $template='', $html_display = true)},
где $product - массив информации о товаре, либо ID товара - обязательно
$sku_id - ID артикула товара. Необходим для вывода комплектующих для конкретного артикула. При изменении артикула на странице товара его комплектующие автоматически сменятся сами - необязательно
$template - файл шаблона (или список файлов через запятую), используемый для вывода - необязательно
$html_display - показывать HTML код перед и после комплекта или нет. Допустимые значения true или false (да или нет).
- {shopItemsetsPlugin::showItems($product, 0, 'itemsets-list-table.html')} - вывод на странице товара с указанием шаблона для вывода
- {shopItemsetsPlugin::showItems($product)} - вывод на странице товара без указания шаблона для вывода
- {shopItemsetsPlugin::showItems(5)} - вывод комплектующих для товара с ID=5 без указания шаблона для вывода
- {shopItemsetsPlugin::showItems($p, 0, 'itemsets-small-list.html', false)} - вывод в каталоге для каждого товара-комплекта с указанием шаблона для вывода без HTML кода перед и после комплекта
Вспомогательный хелпер: {shopItemsetsPlugin::hasItems($product, $sku_id = 0)},
где $product - массив информации о товаре, либо ID товара - обязательно
$sku_id - ID артикула товара - необязательно
Вспомогательный хелпер необходим для проверки наличия комплектующих у товара и его арикулов.
Переменные, передаваемые в шаблон
$products = array( массив комплектующихsku_id => array( ключом является ID артикула
'id' => ID товара,
'name' => название товара,
'summary' => краткое описание товара,
'meta_title' => мета заголовок,
'meta_keywords' => ключевые слова,
'meta_description' => мета описание,
'description' => описание товара,
'contact_id' => ID контакта, создавшего товар,
'create_datetime' => дата создания товара,
'edit_datetime' => дата изменения товара,
'status' => активность товара,
'type_id' => ID типа товара,
'image_id' => ID изображения товара,
'sku_id' => ID артикула товара,
'ext' => расширение изображения товара,
'url' => URL товара,
'rating' => рейтинг,
'price' => цена,
'compare_price' => зачеркнутая цена,
'currency' => валюта,
'min_price' => минимальная цена,
'max_price' => максимальная цена,
'count' => количество оставшегося товара,
'cross_selling' => массив перекрестных товаров,
'upselling' => массив рекомендуемых товаров,
'rating_count' => количество оценок рейтинга,
'total_sales' => общие продажи товара,
'category_id' => ID категории товара,
'badge' => наклейка товара,
'frontend_url' => ссылка на товар,
'quantity' => количество товара, используемое в комплекте
)
)
$current_locale - текущая локаль
$sku_id - ID арикула товара, для которого необходимо показать комплектующие
$ruble - значение поля "Знак рубля" в настройках плагина
Если Вы используте шаблон темы Удобная покупка products.slider.html, то вместо $products передается $s_products и $sliderId.
Вы также можете использовать хелперы и системные переменные фреймворка.
Возможные проблемы
Если у Вас проблемы с отображением комплектующих - проверьте работу плагина в теме Default 2.0. Если там отображается все нормально, значит в Вашей теме дизайна используются совершенно иные классы. Обратитесь к разработчику Вашей темы дизайна за помощью.
- Комплектующие не отображаются
Поля для выбора комплектующих должны иметь возможность быть полученными следующим образом: #product-skus input[type=radio], .skus input[type=radio] или .sku-feature
Отсутствует <input[name='product_id'] >
Ошибки в Javascript - Комплектующие не сменяются при выборе другого артикула
Те же самые проблемы
Вы можете настроить динамическую проверку наличия комплектующих на странице корзины при изменении количества товара или его удалении.
Поскольку сделать такое без внесения изменений в тему дизайна не получится, Вам необходимо проделать следующее.
- Зайти на страницу Магазин - Витрина - Шаблон - cart.js
-
Добавить код в функцию, отвечающую за отслеживание изменений количества товара:
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.quantityChange(that);
}
где that - поле с количеством товара (jQuery объект) -
Добавить код в функцию, отвечающую за отслеживание удаления товара:
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.cartDelete(that);
}
где that - нажатая кнопка удаления (jQuery объект)
Если Вы не уверены в своих знаниях - обратитесь к разработчику темы. Эта задача не займет у него более двух минут.
Рассмотрим примеры для некоторых тем дизайна:
Тема дизайна Default 2.0
Примерно такой же порядок работы в темах Аскетик, Clear, Nifty, Custom, Facebook, Sidebar, Vkontakte и многих других.
-
Найдите код
$(".cart input.qty").change(function () {
var that = $(this);
if (that.val() > 0) {
var row = that.closest('div.row');
if (that.val()) {
$.post('save/', {html: 1, id: row.data('id'), quantity: that.val()}, function (response) {
row.find('.item-total').html(response.data.item_total);
if (response.data.q) {
that.val(response.data.q);
}
if (response.data.error) {
alert(response.data.error);
} else {
that.removeClass('error');
}
updateCart(response.data);
}, "json");
}
} else {
that.val(1);
}
});
И добавьте после "updateCart(response.data)" код, чтобы получилось так:
$(".cart input.qty").change(function () {
var that = $(this);
if (that.val() > 0) {
var row = that.closest('div.row');
if (that.val()) {
$.post('save/', {html: 1, id: row.data('id'), quantity: that.val()}, function (response) {
row.find('.item-total').html(response.data.item_total);
if (response.data.q) {
that.val(response.data.q);
}
if (response.data.error) {
alert(response.data.error);
} else {
that.removeClass('error');
}
updateCart(response.data);
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.quantityChange(that);
}
}, "json");
}
} else {
that.val(1);
}
}); -
Найдите код
$(".cart a.delete").click(function () {
var row = $(this).closest('div.row');
$.post('delete/', {html: 1, id: row.data('id')}, function (response) {
if (response.data.count == 0) {
location.reload();
}
row.remove();
updateCart(response.data);
}, "json");
return false;
});
И добавьте в начале строчку "var that = $(this);" и после "updateCart(response.data)" код, чтобы получилось так:
$(".cart a.delete").click(function () {
var that = $(this);
var row = $(this).closest('div.row');
$.post('delete/', {html: 1, id: row.data('id')}, function (response) {
if (response.data.count == 0) {
location.reload();
}
row.remove();
updateCart(response.data);
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.cartDelete(that);
}
}, "json");
return false;
});
Отдельно рассмотрим тему Multishop.
-
Найдите строчки кода:
// Изменение количества товаров
var changeQuantity = function(that, callback) {
if (that.val() > 0) {
...
Чуть ниже в данной функции будет строка:
cartBlockRow.find('input.qty').val(that.val());
После нее вставьте код:
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.quantityChange(that);
} -
Найдите код:
$(".cart a.delete").click(function() {
var cartRow = $(this).closest('.cart-row');
var id = cartRow.data('id');
var i = $(this).find("i");
i.removeClass("close-bw").addClass("loading");
$.post('delete/', {html: ($.multishop.ruble == 'html' ? 1 : 0), id: id}, function(response) {
if (response.data.count == 0) {
location.reload();
}
cartRow.remove();
$(".cart-block-row[data-id='" + id + "']").remove();
updateCart(response.data);
if ($(".bottom-fixed .mobile-cart").is(":visible")) {
bouncePopup($(".bottom-fixed .mobile-cart"), "+ " + $.multishop.translate('Removed from cart'));
}
}, "json");
return false;
});
И добавьте код, чтобы получилось так:
$(".cart a.delete").click(function() {
var that = $(this);
var cartRow = $(this).closest('.cart-row');
var id = cartRow.data('id');
var i = $(this).find("i");
i.removeClass("close-bw").addClass("loading");
$.post('delete/', {html: ($.multishop.ruble == 'html' ? 1 : 0), id: id}, function(response) {
if (response.data.count == 0) {
location.reload();
}
cartRow.remove();
$(".cart-block-row[data-id='" + id + "']").remove();
updateCart(response.data);
if ($(".bottom-fixed .mobile-cart").is(":visible")) {
bouncePopup($(".bottom-fixed .mobile-cart"), "+ " + $.multishop.translate('Removed from cart'));
}
if (typeof $.itemsetsFrontend !== 'undefined') {
$.itemsetsFrontend.cartDelete(that);
}
}, "json");
return false;
});
Если у Вас возникнут какие-либо ошибки - пишите на почту: gapon2401@gmail.com