Вывод информации о кол-ве элементов

#
Вывод информации о кол-ве элементов
https://radikalfoto.ru/ib/NQBUgZnrrl
Добрый день. Как вывести эту информацию о количестве элементов из админки на фронт?
#
Re: Вывод информации о кол-ве элементов
В ТДС инфо системы укажите контроллеру calculateCounts(TRUE) после этого общее количество пойдет в xml.
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Вывод информации о кол-ве элементов
llirik писал(а):
В ТДС инфо системы укажите контроллеру calculateCounts(TRUE) после этого общее количество пойдет в xml.

Что значит ТДС инфосистемы?
#
Re: Вывод информации о кол-ве элементов
Это Типовая Динамическая страница. https://www.hostcms.ru/documentation/modules/lib/
В ней для показа инфо системы показывается контроллер https://www.hostcms.ru/api6/class-Informationsystem_Controller_Show.html

Так же контроллер может вызываться отдельно в макете https://www.hostcms.ru/documentation/modules/informationsystem/frontend/show/
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Вывод информации о кол-ве элементов
Добрый день.
Можете пояснить, я не совсем понимаю, чем отличается
->filterCounts(TRUE) // производить подсчёт количества соответствующих свойству значений в текущей группе при использовании быстрого фильтра, по умолчанию FALSE
от
->calculateCounts(TRUE) // вычислять общее количество товаров и групп в корневой группе, по умолчанию FALSE

...и заодно напишите, пожалуйста, пример вывода этих значений в XSL-шаблоне.
Модератор
#
Re: Вывод информации о кол-ве элементов
Dmitry K. писал(а):
чем отличается

собственно всем, опция filterCounts подсчитывает количество элементов для заданной опции фильтрации, например размер XS - 10, размер S - 2, M - 3, L - 9 и т.п. При выводе list_item вывод количества осуществляется следующим образом (в $propertyNode заранее сохранен узел свойства):
<xsl:variable name="filterCount" select="$propertyNode/filter_counts/count[@id = $list_item_id]" />
   <xsl:if test="$filterCount/node()">
   <xsl:text> (</xsl:text><xsl:value-of select="$filterCount"/><xsl:text>)</xsl:text>
</xsl:if>


calculateCounts ведет подсчет найденных ТОВАРОВ в группе, например, если вы показываете последние 10 товаров и вам не нужно делать пагинацию, нет задачи считать общее количество найденных товаров, тогда устанавливается в FALSE.
#
Re: Вывод информации о кол-ве элементов
Хорошо, спасибо!
Отличия filterCounts и calculateCounts я понял.

Но появляется ошибка:
Цитата:
Runtime error: file /home/users/... line 241 element variable.
Variable 'propertyNode' has not been declared.
Undefined variable.
...
Failed to evaluate the expression of variable 'filterCount'.

что в переводе означает:
Цитата:
Ошибка выполнения: файл /home/users/... строка 241 переменная элемента.
Переменная 'property Node' не была объявлена.
Неопределенная переменная.
...
Не удалось вычислить выражение переменной 'filterCount'.

Как это исправить?
Модератор
#
Re: Вывод информации о кол-ве элементов
Dmitry K.,
перечитайте, пожалуйста, предыдущий ответ, в нем содержится относительно этого информация:
(в $propertyNode заранее сохранен узел свойства)

вы его заранее не сохранили и используете необъявленную переменную, установите на бесплатной версии шаблон с магазином, например https://www.hostcms.ru/shop/market/shop-templates/multipurpose/universal-template/ и посмотрите как работает фильтр.
#
Re: Вывод информации о кол-ве элементов
Всё получается... Информацию в XSL-шаблоне изменил (дописал):
<!-- Шаблон для фильтра по дополнительным свойствам -->
<xsl:template match="property" mode="propertyList">
    ...
    <xsl:variable name="filteringNode" select="/shop/*[name()=$nodename]" />

<xsl:template match="list/list_item">
    <xsl:variable name="list_item_id" select="@id"/>
    <xsl:variable name="propertyNode" select="/shop/shop_item_properties//property" />
    <xsl:variable name="filterCount" select="$propertyNode/filter_counts/count[@id = $list_item_id]" />

    <!-- Отображаем флажки -->
    <xsl:if test="../../filter = 4">
        <xsl:variable name="nodename">property_<xsl:value-of select="../../@id" /></xsl:variable>
        <div class="form-check">
            <input class="form-check-input" id="id_property_{../../@id}_{@id}" type="checkbox" value="{@id}" name="property_{../../@id}" data-property="{../../tag_name}" data-value="{value}">
                <xsl:if test="/shop/*[name()=$nodename] = @id"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
                <xsl:if test="not($filterCount)"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
            </input>
            <label class="form-check-label d-flex" for="id_property_{../../@id}_{@id}">
                <xsl:value-of disable-output-escaping="yes" select="value" />
                <div class="ms-auto">
                <xsl:if test="$filterCount/node()"><xsl:text>(&#8239;</xsl:text><xsl:value-of select="$filterCount" /><xsl:text>&#8239;)</xsl:text></xsl:if>
                </div>
            </label>
        </div>
    </xsl:if>

    <!-- Отображаем список -->
    <xsl:if test="../../filter = 7">
        <xsl:variable name="nodename">property_<xsl:value-of select="../../@id" /></xsl:variable>
        <option value="{@id}" data-property="{../../tag_name}" data-value="{value}">
            <xsl:if test="/shop/*[name()=$nodename]/node() and /shop/*[name()=$nodename] = @id"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
            <xsl:if test="not($filterCount)"><xsl:attribute name="disabled">disabled</xsl:attribute></xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="value" />
            <xsl:if test="$filterCount/node()"><xsl:text>&#8195;(&#8239;</xsl:text><xsl:value-of select="$filterCount" /><xsl:text>&#8239;)</xsl:text></xsl:if>
        </option>
    </xsl:if>
#
Вывод количества товаров после фильтрации
В ТДС [Код страницы] записываем:
->filterCounts(TRUE) // производить подсчет количества соответсвующих свойству значений в текущей группе при использовании быстрого фильтра, по умолчанию FALSE
->calculateCounts(TRUE) // вычислять общее количество товаров и групп в корневой группе, по умолчанию FALSE

В XSL-шаблоне:
<xsl:value-of disable-output-escaping="yes" select="count(/shop/shop_item)" />
из
<xsl:value-of disable-output-escaping="yes" select="items_total_count" />

И получаем запись количества товаров уже после применения фильтра, например, такую:
Цитата:
325 из 586

То есть текущее количество из всего количества.
Авторизация