Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
19:51
09 фев
#
?
написал:

Здравствуйте. Подскажите пожалуйста как сделать вывод характеристик товара на странице категории.

http://webkab.ru/vyvesti-svojstva-tovara-simpla/
Нашел решение для Simpla, но на импере реализовать по этой инструкции не выходит.

17:25
10 фев
#
написал:

Вопрос не понят, что вас интересовало:

  • вывод характеристик в мини карточки товара, то есть когда на странице категории выводится список карточек, а в каждой присутствует список характеристик именно этого товара
  • или общий список характеристик, когда на странице категории кроме карточек товаров присутствует отдельный блок, где перечислены все характеристики из этой категории.

Поэтому приведу примеры для каждого случая.


Характеристики в мини карточках Когда пользователь заходит в категорию, её страница отрисовывается шаблоном products.htm (или products.tpl, так как Импера поддерживает оба файловых расширения). Если на текущей странице категории присутствуют товары, значит в шаблоне доступна переменная $products - массив записей о товарах текущей страницы (то есть с учётом пагинации, фильтра, сортировки и т.п.).

{foreach $products as $item}
    <!-- мини карточка товара -->
    <div class="product-card">
        ...
        ...
        <!-- характеристики -->
        {if !empty($item->properties_tree)}
            <ul class="features">
                {foreach $item->properties_tree as $property_values}
                    {$property = reset($property_values)}
                    <li>
                        <label>{$property->name}</label>
                        <span>{$property->value}</span>
                    </li>
                {/foreach}
            </ul>
        {/if}
    </div>
{/foreach}


Характеристики категории На странице категории в шаблон также поступает переменная $properties - массив записей о характеристиках в текущей категории.

{if !empty($properties)}
    {foreach $properties as $item}
        {if !empty($item->options)}
            <h2>{$item->name}</h2>
            <ul class="features">
                {foreach $item->options as $option}
                    <li>
                        <label>{$item->name}</label>
                        <span>{$option->value}</span>
                    </li>
                {/foreach}
            </ul>
        {/if}
    {/foreach}
{/if}


О структурах переменных У каждой из переменных существует свой набор полей, а примеры выше показывают лишь общий процесс обработки конретной переменной. Узнать структуру полей можно так:

{dumpStructure from=properties}
{dumpStructure from=products}
11:20
12 фев
#
?
написал:

Спасибо! Первый вариант.

23:51
15 фев
#
?
написал:

Прошу подсказать, как можно сделать так, чтобы один (несколько) из блоков характеристик на странице категории уже был с отмеченным чекбоксом?

Например, есть набор характеристик: вес, цвет, наличие; как можно сделать так, чтобы в блоке-фильтре "наличие" при открытии категории уже стояла "галочка" "есть в наличии", и при этом на странице категории показывались бы товары с учётом этого фильтра?

Спасибо.

10:40
16 фев
#
?
написал:

Все уже придумано за нас в бесплатных шаблонах.

Например разберите как устроен фильтр в шаблоне Bexam. Файл BexamDefault\html\products.htm.

Потом соберите свой прототип. Вот например.

{* <!-- ===========================================================================
|                                                                                 |
|  Предполагаем, в запросе страницы поступили какие-то параметры фильтра.         |
|                                                                                 |
============================================================================ --> *}

{$filter = $smarty.request.filter_property|default:[]}

{* <!-- ===========================================================================
|                                                                                 |
|  Перебираем свойства товаров в текущей категории.                               |
|                                                                                 |
============================================================================ --> *}

{if !empty($properties)}
    {foreach $properties as $item}
        {$id = $item->property_id}
        {$checked = (empty($filter.$id)) ? 'checked' : ''}

        {* <!-- ===================================================================
        |                                                                         |
        |  Берем URI текущей страницы без GET-параметра текущего свойства.        |
        |                                                                         |
        ==================================================================== --> *}

        {$param = "filter_property[$id]"}
        {requestUri except="$param*" nopages=TRUE assign=uri}

        {* <!-- ===================================================================
        |                                                                         |
        |  Название свойства.                                                     |
        |                                                                         |
        ==================================================================== --> *}

        <div class="prop">
            <h6>{name}</h6>
            <ul>

                {* <!-- ===========================================================
                |                                                                 |
                |  Флаг "Убрать свойство из фильтра".                             |
                |                                                                 |
                ============================================================ --> *}

                <li>
                    <a href="{$uri}">
                        <input type="checkbox" {$checked} /> Все
                    </a>
                </li>

                {* <!-- ===========================================================
                |                                                                 |
                |  Планируем добавить GET-параметр в конец URI.                   |
                |                                                                 |
                ============================================================ --> *}

                {$uri = (preg_match('/\?/u', $uri)) ? "$uri&" : "$uri?"}

                {* <!-- ===========================================================
                |                                                                 |
                |  Перебираем значения свойства.                                  |
                |                                                                 |
                ============================================================ --> *}

                {if !empty($item->options)}
                    {foreach $item->options as $o}
                        {$value = $o->value}
                        {$checked = (isset($filter.$id.$value)) ? 'checked' : ''}

                        {* <!-- ===================================================
                        |                                                         |
                        |  Флаг "+ фильтровать по свойству с таким значением".    |
                        |                                                         |
                        ==================================================== --> *}

                        <li>
                            <a href="{$uri}{$param}[{$value|escape}]">
                                <input type="checkbox" {$checked} /> {$value}
                            </a>
                        </li>
                    {/foreach}
                {/if}
            </ul>
        </div>
    {/foreach}
{/if}

<input> здесь выполняет декоративную функцию галочки как class="selected" в шаблоне Bexam.

От разработчика: Спасибо Ярику за ответ. Я позволил себе прокомментировать ваш код, чтобы посторонний человек мог понять, как работает фильтр и какой цели служит каждый блок кода.

14:06
16 фев
#
?
Lave86 написал:

Input декорация "флажок" ))) ну ваще. А css, не то, или специально хотели усложить html?

Написание ответа

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


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.