Прайс, вывод только групп с определенными товарами

#
Прайс, вывод только групп с определенными товарами
Возник такой вопрос, мне нужно в прайсе выводить только товары с весом не равным 0, поставила проверку на вес, но там выводятся все разделы, даже если в них нет товаров с ненулевым весом, в результате получается длинный список пустых разделов, хотелось бы этого избежать, т.е. как-нибудь проверять на наличие в группе товаров с весом, беда только, что не знаю как, помогите пожалуйста, ато как-то совсем плохо получается. Версия 4.1. Пример http://med-snab.spb.ru/offers/ - как это сейчас
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Прайс, вывод только групп с определенными товарами
libertine, если на странице http://med-snab.spb.ru/offers/ осуществляется вывод товаров из всех групп магазина(т.е. в качестве текущей группы в метод ShowShop передано значение false), то можно попробывать ограничить показ групп в XSL-шаблоне:
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<xsl:variable name="id_group" select="@id"/>
<xsl:if test="count(//item[@group = $id_group and weight!=0])">
...
</xsl:if>
</xsl:template>
#
Re: Прайс, вывод только групп с определенными товарами
Спасибо!!!
Еще один маленький вопросик ) А как выводить название группы первого уровня? сейчас он выводит название непосредственно родительской группы, а нужно выводить еще и название самой верхней группы. пробовала поставить проверку на level, но это, судя по всему, из другой оперы. можно ли как-то проверить, что выше только корень? ато у меня получается как-то странно, не понятно к какому основному разделу относится товар (
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Прайс, вывод только групп с определенными товарами
Для этого необходимо чтобы в шаблоне прайса было примерно так (сделано только для 2-х уровней вложенности):
<!-- Группы товаров -->
<xsl:template match="group">
    <xsl:variable name="attr_group_id"><xsl:value-of select="@id"/></xsl:variable>
    <xsl:if test="count(/shop/item[@group=$attr_group_id]) = 0">
        <tr>
            <td bgcolor="#EEEEEE" colspan="2" style="font-weight:bold; font-size:11pt; font-family:Tahoma;">
                <xsl:value-of select="name"/>
            </td>
        </tr>
    </xsl:if>
        <xsl:if test="count(/shop/item[@group=$attr_group_id]) > 0">
            <tr>
                <td bgcolor="#EEEEEE" colspan="2" style="font-size:10pt; font-family:Tahoma;">
                    <xsl:value-of select="name"/>
                </td>
            </tr>
            <xsl:apply-templates select="/shop/item">
                <xsl:with-param name="group_id" select="@id"/>
            </xsl:apply-templates>
        </xsl:if>
    <xsl:apply-templates select="group"/>
</xsl:template>
#
Re: Прайс, вывод только групп с определенными товарами
Спасибо, уже гораздо лучше, но остается таки вопрос с проверкой на наличие необходимых товаров в подгруппе. как я понимаю здесь проверяется есть ли товар непосредственно в этой группе (подгруппе), а у меня система вложенная, т.е. в группе 1 уровня вообще нет товаров, они все в группах 2 уровня, и мне нужна проверка на наличие товара в подгруппе, если он есть, то выводим название группы и смотрим дальше внутрь, если нет, то идем к следующей группе. как-то так. т.е. для примера на http://med-snab.spb.ru/offers/, сейчас у меня есть раздел 1 уровня подробнее, в нем нет подгрупп содержащих нужный мне товара, мне бы хотелось его вообще не выводить, вопрос как проверить?
Шаблон такой
<xsl:template match="group">
<xsl:variable name="attr_group_id"><xsl:value-of select="@id"/></xsl:variable>
<xsl:variable name="id_group" select="@id"/>
    <xsl:if test="count(/shop/item[@group=$attr_group_id]) = 0">
        <tr>
            <td bgcolor="#EEEEEE" colspan="3" style="font-weight:bold; font-size:11pt; font-family:Tahoma;">
                <xsl:value-of select="name"/>
            </td>
        </tr>
    </xsl:if>
<xsl:if test="count(//item[@group = $id_group and weight!=0])">
   <xsl:if test="count(/shop/item[@group=$attr_group_id]) > 0">
   <tr>
         <td colspan="3"><strong><xsl:value-of select="name"/></strong></td>
   </tr>
            <xsl:apply-templates select="/shop/item">
         <xsl:with-param name="group_id" select="@id"/>
      </xsl:apply-templates>
   </xsl:if>
</xsl:if>
   <xsl:apply-templates select="group"/>
</xsl:template>

P.S. Почему-то нужно очень много памяти для вывода этой страницы, нельзя ли как-то оптимизировать? Требует около 20 метров, многовато...
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Прайс, вывод только групп с определенными товарами
У меня та же проблема, только условия выборки идет по осному свойству склад (rest) и доп свойству, товар в пути. Я пока не разобрался, мысль есть сделать обработку в дин странице на PHP, чтобы в XML передавались только те товары, которые соответствуют условию. Таким образом и XML будет меньше и в XSL не нужно будет вносить условия выборки отображения.
#
Re: Прайс, вывод только групп с определенными товарами
Если не трогать XML то вывод товаров по условию вес > 0 то поправь вызов шаблона item на:
<xsl:apply-templates select="/shop/item[weightt &gt; 0]">
     <xsl:with-param name="group_id" select="@id"/>
</xsl:apply-templates>

а с группами сложнее, пока не разобрался.
#
Re: Прайс, вывод только групп с определенными товарами
В твоем случае можно сократить XML путем вставки в динамическую страницу "Интернет-магазин" перед:
$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);

вот этого кода:
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_items_catalog_weight';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '>'; // Условие
$element['value'] = '0';
$element['sufix'] = '';
$param['select'][] = $element;

Тогда у тебя в XML будут передаваться только те товары, которые имеют вес больше нуля, а по поводу групп нужно лезть в БД
#
Re: Прайс, вывод только групп с определенными товарами
мама дорогая,  теперь бы разобраться с этим со всем ) Спасибо большое
http://www.colibre.ru - Создание и продвижение сайтов
Авторизация