This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
market:komplekt_tovarov [07.05.15 в 16:56] Артем Куц [Инструкции] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Комплект товаров ====== | ||
- | На странице товара вместе с основным товаром покупателю предлагается купить дополнительные товары и услуги. Такие товары можно добавить к основному установив флажок. При этом происходит пересчет основной цены. При нажатии на кнопку добавления товара в корзину, в корзину попадают сразу все выбранные товары. | ||
- | |||
- | ===== Инструкции ===== | ||
- | 1. Если на сайте не использованы сопутствующие товары, то используем их для комплекта. Если уже использованы, то для комплекта создаем доп. свойство типа товар.\\ | ||
- | 2. Далее в XSL шаблон МагазинТовар добавляем подшаблон для вывода комплекта. | ||
- | <code xml> | ||
- | <!-- Шаблон для комплекта товаров --> | ||
- | <xsl:template match="associated/shop_item"> | ||
- | <label> | ||
- | <xsl:choose> | ||
- | |||
- | <xsl:when test="property_value[tag_name='radio']/value = 1"> | ||
- | |||
- | <input type="radio" price="{price}" name="item_radio" item_id="{@id}" value="{@id}" class="associated{../../@id} associated"><xsl:if test="property_value[tag_name='default']/value = 1"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if></input> | ||
- | |||
- | </xsl:when> | ||
- | <xsl:otherwise> | ||
- | <xsl:if test="position() != last()"><xsl:attribute name="class">hr</xsl:attribute></xsl:if> | ||
- | <input type="checkbox" price="{price}" item_id="{@id}" name="item_{@id}" value="{@id}" class="associated{../../@id} associated"><xsl:if test="property_value[tag_name='default']/value = 1"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if></input> | ||
- | |||
- | </xsl:otherwise> | ||
- | |||
- | </xsl:choose> | ||
- | |||
- | </label> | ||
- | </xsl:template> | ||
- | </code> | ||
- | 3. В подшаблон shop_item добавляем там, где нужно вывести комплект: | ||
- | <code xml> | ||
- | <xsl:if test="count(associated/shop_item) > 0"> | ||
- | <div class="associated-block"> | ||
- | |||
- | <xsl:apply-templates select="associated/shop_item"><xsl:sort select="sorting" data-type="number"/></xsl:apply-templates> | ||
- | <span class="hr"></span> | ||
- | |||
- | </div> | ||
- | </xsl:if> | ||
- | </code> | ||
- | 4. Подгоняем вывод под текущий сайт. Блоку с текущей ценой задаем ''id="mainprice"'', а также атрибут ''data-price="{format-number(price, '#####0', 'my')}"'' | ||
- | 5. Обработчик добавления в корзину заменяем с $.addIntoCart на $.kaddIntoCart | ||
- | 6. В ТДС корзины после кода | ||
- | <code php> | ||
- | // Добавление товара в корзину | ||
- | if (Core_Array::getRequest('add')) | ||
- | { | ||
- | $shop_item_id = intval(Core_Array::getRequest('add')); | ||
- | if ($shop_item_id) | ||
- | { | ||
- | $oShop_Cart_Controller = Shop_Cart_Controller::instance(); | ||
- | $oShop_Cart_Controller | ||
- | ->shop_item_id($shop_item_id) | ||
- | ->quantity(Core_Array::getRequest('count', 1)) | ||
- | ->add(); | ||
- | } | ||
- | </code> | ||
- | добавляем | ||
- | <code php> | ||
- | $aAssoc = Core_Array::getRequest('addassoc'); | ||
- | if (count($aAssoc)) | ||
- | { | ||
- | foreach($aAssoc as $assoc) | ||
- | { | ||
- | $oShop_Cart_Controller = Shop_Cart_Controller::instance(); | ||
- | $oShop_Cart_Controller | ||
- | ->shop_item_id($assoc) | ||
- | ->quantity(1) | ||
- | ->add(); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | 7. Добавляем товарам доп. свойства. Эти свойства нужны для управления комплектом.\\ | ||
- | * "Радиокнопка" с tag_name='radio' | ||
- | * "По умолчанию" с tag_name='default' | ||
- | 8. Тестируем и отдаем на проверку. |