Интернет магазин на HostCMS |
![]() |
![]() |
![]() |
Автор: А.Волос | ||||||||||||||||||||||||||||||||||||||||
В настоящее время большую популярность приобрели интернет-магазины. В частности интернет магазин на базе HostCMS. Я тоже не избежал соблазна. Передо мной стояла задача создать карточку товара по образцу на картинке. В результате карточка товара у меня приобрела такой вид: http://www.albertprim.ru/shop/plazmen_panel/32lc51/ Эта страница с описанием товара насыщена довольно большой функциональностью. Можно оставить отзыв о товаре, можно посмотреть видео о товаре, можно благодаря java-скрипту посмотреть товар в трех видах. Так же на странице выводятся скидки, если они есть, а так же выборки: товар дня, спецпредложения, хиты, сопутствующие товары, "С этим товаром покупают". Об этой последней опции и пойдет речь в этой статье. Ниже представлена статья из форума, о сопутствующих товарах. Задача: (отображение обратной совместимости товаров) Взято: http://www.hostcms.ru/forums/22/4090/ Примечание: Здесь к коду автора я добавил еще код синхронизации данных по сопутствующему товару указанному в админке и содержащемуся в БД в таблице `shop_intermediate_table`. Если данные не совпадают, то происходит соответствующее изменение в таблице, согласно данным в админке. Сопутствующие товары — очень удобная вещь, но механизм их назначения предполагает, по сути, двойную работу, в тех случаях, когда товары явяляются взаимно сопустствующими. Например, у нас в магазине есть некий ассортимент устройств, и набор аксессуаров для них. Было бы удобно, если на странице каждого устройства выводились бы подходящие аксессуары, а на странице каждого аксессуара — перечень устройств к которым он подходит. Однако, для этого нужно для каждого устройства указать сопутствующими товарами его аксессуары, а потом еще для каждого аксессуара указать сопутствующими товарами те устройства к которым он подходит. Предлагаемое мною решение позволяет сократить объем работы вдвое. Достаточно для каждого устройства указать сопутствующими товарами его аксессуары, а при отображении страницы аксессуара по тем же связям будут установлены совместимые с ним устройства. Для этого при выводе карточки товара (файл lib_6.php) мы должны написать нижепоказанный код.
Теперь, в случае если просматриваемый товар является сопутствующим для какого-то другого товара в магазине, в xml будет появляться узел /shop/tying_hosts, содержаший узлы item Вот кстати табличка, которая отображает: какие товары являются сопутствующими: Таблица shop_intermediate_table
В табличке четко и наглядно видно, что: - для товара с ИД=164 (32LC51) сопутствующими являются товары с ИД=168 (37Z3030DR) и ИД=165 (32PFL5322). - для товара с ИД=165 (32PFL5322) сопутствующими являются товары с ИД=168 (37Z3030DR) и ИД=164 (32LC51). - для товара с ИД=168 (37Z3030DR) сопутствующими являются товары с ИД=164 (32LC51) и ИД=165 (32PFL5322). Все в точности как мы определили своими действиями в админке, которые описаны выше! И действительно, теперь при выводе товара в xml-структуре появляется узел /shop/tying_hosts: <shop id="4" current_group_id="594"> <tying_hosts> <item id="164" group="594"> <captcha_key>55178</captcha_key> . . . </tying_hosts>
который содержит все сведения обо всех товарах, для которых он является сопутствующим! Это здорово!!! Теперь, в случае если просматриваемый товар является сопутствующим для какого-то другого товара в магазине, в xml будет появляться узел /shop/tying_hosts, содержаший узлы item В xsl это может быть обработано, например, так:
<xsl:if test="count(tying/item) > 0"> <h3>Сопутствующие товары:</h3> <!-- Отображаем сопутствующие товары --> <div class="clear"> <xsl:apply-templates select="tying/item" mode="tyings"/> </div> <p class="clear"> </p> </xsl:if>
<xsl:if test="count(/shop/tying_hosts/item) > 0"> <h3>Совместимость:</h3> <!-- Отображаем реверсивно-сопутствующие товары --> <div class="clear"> <xsl:apply-templates select="/shop/tying_hosts/item" mode="tyings"/> </div> <p class="clear"> </p> </xsl:if>
При этом, в определении шаблона для отображения списка сопутствующих товаров надо сделать следующее изменение. Вместо
<xsl:template match="tying/item">
написать
<xsl:template match="item" mode="tyings">
Тогда обычные сопутствующие товары, и сопутствующие товары, вычисленные с помощью обратного определения в ТДС, будут отображаться визуально одинаково! Отлично! Все работает правильно! Выводы: Если теперь товар ИД=164 (32LC51) рассматривать как "Устройство", а сопутствующие ему товары с ИД=168 (37Z3030DR) и ИД=165 (32PFL5322) рассматривать как "Аксессуары", то при выводе любого аксессуара, можно вывести ИД=164 (32LC51) как совместимое с ним устройство. Так же и другие совместимые устройства, если таковые есть. Другими словами: 1. Устройство ИД=164 (32LC51) имеет два аксессуара: ИД=168 (37Z3030DR) и ИД=165 (32PFL5322) 2. При выводе аксессуара ИД=168 (37Z3030DR) как самостоятельного товара, с ним можно вывести товар ИД=164 (32LC51), как совместимое с ним устройство! 3. Если имеется еще другой товар, допустим товар Z, для которого ИД=168 (37Z3030DR) и ИД=165 (32PFL5322) являются аксессуарами, то при выводе ИД=168 (37Z3030DR) как самостоятельного товара, с ним можно вывести товар ИД=164 (32LC51) и товар Z, как совместимые с ним устройства! Что наглядно демонстрирует эта программа! |
||||||||||||||||||||||||||||||||||||||||
Обновлено 09.09.2014 07:05 |