Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."

#
Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Сопутствующие товары - очень удобная вещь, но механизм их назначения предполагает, по сути, двойную работу, в тех случаях, когда товары явяляются взаимно сопустствующими.
Например, у нас в магазине есть некий ассортимент устройств, и набор аксессуаров для них. Было бы удобно, если на странице каждого устройства выводились бы подходящие аксессуары, а на странице каждого аксессуара - перечень устройств к которым он подходит.
Однако, для этого нужно для каждого устройства указать сопутствующими товарами его аксессуары, а потом еще для каждого аксессуара указать сопутствующими товарами те устройства к которым он подходит.

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

Для этого в коде ТДС "Интернет-магазин", в самом конце, находим следующий фрагмент:
else
   {
      /* Вывод конкретного элемент */
      $shop->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
   }
}
?>

и заменяем его на вот такой:
else
   {
      // проверим, не является ли этот товар сопутствющим для других
        $query = 'SELECT `shop_items_catalog_item_id` FROM `shop_intermediate_table` WHERE `sho_shop_items_catalog_item_id` = ' .
            to_int($GLOBALS['shop_item_path']['item']);
        $DataBase = &singleton('DataBase');
        $tying_hosts = $DataBase->select($query);
        if ($DataBase->get_count_row() > 0 && $tying_hosts) {
            $xml_host = '';
            $host_param['xml_show_tying_products'] = false;
            $host_param['xml_show_modification'] = false;
            $host_param['xml_show_comments'] = false;
            while ($host_item = mysql_fetch_assoc($tying_hosts)) {
                $host_row = $shop->GetItem($host_item['shop_items_catalog_item_id']);
                $xml_host .= $shop->GenXml4Item(0, $host_row, $site_users_id, $host_param);
            }
            $param['external_xml'] = '<tying_hosts>' . $xml_host . '</tying_hosts>';
        }
      
      /* Вывод конкретного элемент */
      $shop->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
   }
}
?>


Теперь, в случае если просматриваемый товар является сопутствующим для какого-то другого товара в магазине, в xml будет появляться узел /shop/tying_hosts, содержаший узлы item
В xsl это может быть обработано, например, так:
<xsl:if test="count(tying/item) &gt; 0">
   <h3>Сопутствующие товары:</h3>

   <!-- Отображаем сопутствующие товары -->
   <div class="clear">
      <xsl:apply-templates select="tying/item" mode="tyings"/>
   </div>
   <p class="clear">&#xA0;</p>
</xsl:if>

<xsl:if test="count(/shop/tying_hosts/item) &gt; 0">
   <h3>Совместимость:</h3>

   <!-- Отображаем реверсивно-сопутствующие товары -->
   <div class="clear">
      <xsl:apply-templates select="/shop/tying_hosts/item" mode="tyings"/>
   </div>
   <p class="clear">&#xA0;</p>
</xsl:if>


При этом, в определении шаблона для отображения списка сопутствующих товаров надо сделать следующее изменение. Вместо
<xsl:template match="tying/item">

написать
<xsl:template match="item" mode="tyings">

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

И парочка картинок для пруфинга.
Сопутствующие товары, выведенные обычным образом - http://floomby.ru/content/bRyvUZhXO0/
Сопутствующие товары, выведенные с помощью обратного определения - http://floomby.ru/content/dTF1dXrFgE/
Заказов не беру. Консультирую редко.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Не конечно здорово, а смысл всего написанного не пойму, если уже все и без этого велосипеда реализовано
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
satwalich, раз вы этого не понимаете, значит вам это не нужно
Заказов не беру. Консультирую редко.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Попробовал, работает, спасибо!
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Пожалуйста!
Заказов не беру. Консультирую редко.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Можно ли ограничить обратный вывод соп. товаров?
Сейчас имеется такая структура:
К товару выводятся расходные части (соп. товары)
В расходных частях выводятся товары к которым эти части подходят (обратный вывод), но основной товар имеет модификации в зависимости от длины, а расходники одни и теже (соп. товары)

Можно ли сделать такой обратный вывод, что бы он был без модификаций?
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
svarka писал(а):
Можно ли сделать такой обратный вывод, что бы он был без модификаций?
- т.е. при выводе товаров(расходных частей) выводились еще и те товары(основные), к которым выводимые товары были добавлены как сопутствующие? И при этом чтобы модификации этих товаров не выводились? Если да, то стандартно такой возможности нет. Только если делать программную(средствами PHP) реализацию.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
svarka, не совсем понял ваш вопрос. Товары, вычисленные к основные к текущему сопутствующему и так выводятся без модификаций, о чем говорит параметр $host_param['xml_show_modification'] = false; в приведенным выше коде.

Или у вас сопутствующие товары заданы и для основного и для модификаций, и поэтому находится и то и другое?
Поясните вашу проблему подробнее, желательно на примере.
Заказов не беру. Консультирую редко.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
Я немного поясню:
Сейчас такая структура
Товар1 имеет модификацию1 и модификаю2
К товару1, модификации1, модификации2 сопутствующим товаром является товар2

При использовании обратного вывода для товара2 в "основной товар" попадает товар1, модификация1, модификация2.
Хотелось, чтобы попадал только товар1 без модификаций.
#
Re: Обратный вывод сопутствующих товаров - "Товар является сопутствующим для: ..."
svarka, все, вот теперь я вас понял.
Для такого вывода вам надо, чтобы у попадающих в выборку основных товаров поле shop_items_catalog_modification_id было равно 0. Это условие можно реализовать в цикле, генерирующем XML, например так:
while ($host_item = mysql_fetch_assoc($tying_hosts)) {
                $host_row = $shop->GetItem($host_item['shop_items_catalog_item_id']);
                if($host_row['shop_items_catalog_modification_id'] > 0)
                                continue;

                $xml_host .= $shop->GenXml4Item(0, $host_row, $site_users_id, $host_param);
}
Заказов не беру. Консультирую редко.
Авторизация