1 Отредактировано Михаил (13.01.2016 22:20:08)

Тема: Вывод определенной характеристики в каталоге товаров.

Добрый день, возникло несколько вопросов.
1.  как можно вывести из всех только несколько характеристик в каталоге товаров?
Извиняюсь если был подобный вопрос.
http://i.imgur.com/rdPa1MQ.png

2. Возможно ли создать свою "Сортировать по", как? Например "Сортировать по объему памяти" Значения объема памяти брать из характеристики.
http://i.imgur.com/DS2k2IY.png

Заранее благодарен.

Повысить оценку Понизить оценку

2

Re: Вывод определенной характеристики в каталоге товаров.

Самый простой способ - Вы можете в шаблоне списка товаров /templates/fashion/moduleview/catalog/list_products.tpl, добавить конструкцию вида:

{* Это добавить в самом вверху. Загружаем массово характеристики к товарам *}
{$list = $this_controller->api->addProductsProperty($list)}

...

В том месте, где вам нужны характеристики добавить:
Объем памяти: {$product->getPropertyValueByTitle('Объем памяти')}
Есть LTE: {$product->getPropertyValueByTitle('Есть LTE')}

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

Рекомендуем использовать фильтры по характеристикам. Это полностью решит проблему быстрой навигации для пользователя. http://readyscript.ru/manual/catalog_ca … cteristics

Повысить оценку +1 Понизить оценку

3 Отредактировано Закусило Александр (18.01.2016 12:05:23)

Re: Вывод определенной характеристики в каталоге товаров.

Можно правкой контроллера списка товаров сделать из своего модуля сделать или через .my.inc.php. Контроллер списка товаров - /modules/catalog/controller/front/listproducts.inc.php

4

Re: Вывод определенной характеристики в каталоге товаров.

Спасибо, разобрался.

Повысить оценку Понизить оценку

5 Отредактировано Михаил (19.01.2016 20:00:30)

Re: Вывод определенной характеристики в каталоге товаров.

Еще такой момент,
пришла идея сделать индивидуальные шаблоны для разных категорий. Как я понял шаблон каталога у нас в list_products.tpl возможно ли малой кровью отделаться и сделать чтобы при переходе по ссылке подгружался определенный шаблон
http://middle.readyscript.ru/catalog/elektronika/ загружался например list_products_elektronika.tpl
http://middle.readyscript.ru/catalog/odezhda-obuv/ загружался например list_products_odezhda.tpl
http://middle.readyscript.ru/catalog/detskie-tovary/ загружался например list_products_detskie.tpl
?
Спасибо.

Повысить оценку Понизить оценку

6

Re: Вывод определенной характеристики в каталоге товаров.

Да, конечно.
Вы можете внутри list_products.tpl сделать логику подключения других шаблонов, например:

Вариант 1, оставить содержимое файла таким:

{include file="%catalog%/list_products_{$category.alias}.tpl"}

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

или такой вариант, если нужно только для нескольких:

{if in_array($category.alias, ['cat1', 'cat2', 'cat3'])}
     {include file="%catalog%/list_products_{$category.alias}.tpl"}
{else}
     {include file="%catalog%/list_products_default.tpl"}
{/if}

т.е. для категорий с алиасами 'cat1', 'cat2', 'cat3', будут подгружаться
list_products_cat1.tpl, list_products_cat2.tpl, list_products_cat3.tpl

а для всех остальных
list_products_default.tpl

Повысить оценку Понизить оценку

7

Re: Вывод определенной характеристики в каталоге товаров.

То что надо, спасибо!

Повысить оценку Понизить оценку

Re: Вывод определенной характеристики в каталоге товаров.

admin пишет:

Самый простой способ - Вы можете в шаблоне списка товаров /templates/fashion/moduleview/catalog/list_products.tpl, добавить конструкцию вида:

{* Это добавить в самом вверху. Загружаем массово характеристики к товарам *}
{$list = $this_controller->api->addProductsProperty($list)}

...

В том месте, где вам нужны характеристики добавить:
Объем памяти: {$product->getPropertyValueByTitle('Объем памяти')}
Есть LTE: {$product->getPropertyValueByTitle('Есть LTE')}

А если у характеристики тип - Список изображений, как вывести картинку, а за ней ее текстовую характеристику?

Т.е. я хочу сделать характеристику Страна и выводить в качестве картинки флаг страны, а т.к. не все знают флаги стран, то и название страны.
Нужно вывести <img>путь/russia.png</img> Россия

Повысить оценку Понизить оценку

9 Отредактировано Закусило Александр (28.11.2016 12:01:18)

Re: Вывод определенной характеристики в каталоге товаров.

По идее поможет вот это.

{* Это добавить в самом вверху. Загружаем массово характеристики к товарам *}
{$list = $this_controller->api->addProductsProperty($list)}

....
{* Далее там,  где уже сам товар *}


{foreach from=$product->getPropObjects() item=property} {* Переберём характеристики и найдём нужную *}
    {if $property.title == 'Страна'}
        {$values2 = $property->getAllowedValuesObjects()} {* Значения характеристики в виде объекта *}
                        
         {if !$property.hidden && $prop_value != ''}
                {if $property->isListType()}
                          {foreach $property.value as $val_id}
                               <img src="{$values2[$val_id].__image->getUrl(60,60)}">
                          {/foreach}
                {/if}
          {/if}
     {/if}
{/foreach}

Re: Вывод определенной характеристики в каталоге товаров.

Закусило Александр пишет:

По идее поможет вот это.

Что-то не получается так.

Повысить оценку Понизить оценку

11 Отредактировано Закусило Александр (28.11.2016 12:52:25)

Re: Вывод определенной характеристики в каталоге товаров.

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

Re: Вывод определенной характеристики в каталоге товаров.

Ошибку не выдает. Но ничего не выводит.

пробовал сделать так

   

{foreach from=$product->getPropObjects() item=property} {* Переберём характеристики и найдём нужную *}
    {if $property.title == 'Страна'}
    Тест
    
     {/if}
{/foreach}

По идее должно выводить "Тест", а ничего не выводится.
Код вставляю между Названием товара и ценой. Если в том же месте вставляю

Страна: {$product->getPropertyValueByTitle('Страна')}

то все выводится, как нужно "Страна: Россия".

Повысить оценку Понизить оценку

13 Отредактировано Закусило Александр (28.11.2016 13:23:18)

Re: Вывод определенной характеристики в каталоге товаров.

А что у Вас в?

[b]var_dump($product->getPropObjects())[/b]

Если ничего, то куда вы вставили строку?

{$list = $this_controller->api->addProductsProperty($list)}

Re: Вывод определенной характеристики в каталоге товаров.

Вывело много чего. Все копировать, наверное не нужно. Вот кусок, который относится к данной теме.

[382]=>
      object(Catalog\Model\Orm\Property\Item)#891 (8) {
        ["_cache_is_list":protected]=>
        NULL
        ["before_this":protected]=>
        NULL
        ["slider_data":protected]=>
        NULL
        ["_values":protected]=>
        array(21) {
          ["id"]=>
          string(3) "382"
          ["site_id"]=>
          string(1) "1"
          ["xml_id"]=>
          NULL
          ["title"]=>
          string(12) "Страна"
          ["type"]=>
          string(5) "image"
          ["sortn"]=>
          string(3) "381"
          ["parent_sortn"]=>
          string(2) "32"
          ["unit"]=>
          string(0) ""
          ["parent_id"]=>
          string(2) "43"
          ["hidden"]=>
          string(1) "0"
          ["no_export"]=>
          string(1) "0"
          ["val_str"]=>
          NULL
          ["val_int"]=>
          NULL
          ["val_list_id"]=>
          string(1) "0"
          ["product_id"]=>
          string(3) "397"
          ["available"]=>
          string(1) "1"
          ["value"]=>
          array(1) {
            [0]=>
            string(3) "221"
          }
          ["is_my"]=>
          bool(true)
          ["value_in_string"]=>
          array(1) {
            [0]=>
            string(12) "Россия"
          }
          ["available_value"]=>
          array(1) {
            [0]=>
            string(3) "221"
          }
          ["available_value_in_string"]=>
          array(1) {
            [221]=>
            string(12) "Россия"
          }
        }
        ["_self_class":protected]=>
        string(31) "Catalog\Model\Orm\Property\Item"
        ["_local_id":protected]=>
        int(530)
        ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
        array(0) {
        }
        ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
        array(0) {
        }
      }
    }
  }

Повысить оценку Понизить оценку

15 Отредактировано Закусило Александр (28.11.2016 13:49:26)

Re: Вывод определенной характеристики в каталоге товаров.

Ну тут у Вас видно, что характеристики подгрузились и характеристика страна есть.
У Вас есть Тест не выводит, значит не может проверить соответствие названия характеристики с тем, что вы сравниваете.

{if $property.title == 'Страна'}

Попробуйте для данной конструкции скопировать title секцию из Вашей характеристики, может ошибка в названии. Если также не сработает, то нужно повыводить значения на что сравнивает конструкция. Т.е.

{var_dump($property.title)}

и

{var_dump($property.title == 'Страна')}

Re: Вывод определенной характеристики в каталоге товаров.

{var_dump($property.title)} NULL
{var_dump($property.title == 'Страна')} bool(false)

Повысить оценку Понизить оценку

17 Отредактировано Закусило Александр (28.11.2016 14:08:16)

Re: Вывод определенной характеристики в каталоге товаров.

Странно, что у Вас в секции title он видит NULL

А что в

$property

посмотрите? И в

$property->title

Re: Вывод определенной характеристики в каталоге товаров.

{var_dump($property)} NULL
{var_dump($property->title)} NULL

Повысить оценку Понизить оценку

Re: Вывод определенной характеристики в каталоге товаров.

Тогда вообще ничего не понимаю. Как у Вас есть массив, и вы его перебираете, а он пустой. Не может такого быть. Вы так делали?

{foreach from=$product->getPropObjects() item=property} {* Переберём характеристики и найдём нужную *}
    {var_dump($property)}
    {if $property.title == 'Страна'}
    Тест
    
     {/if}
{/foreach}

Re: Вывод определенной характеристики в каталоге товаров.

Да, именно так.

Повысить оценку Понизить оценку

21 Отредактировано Владимир 1916 (28.11.2016 21:54:22)

Re: Вывод определенной характеристики в каталоге товаров.

А вот так выводит

  

{foreach $product->fillProperty() as $data}
 {foreach $data.properties as $property}

 {if !$property.hidden && $property.title=='Страна'} 
    
      <b>{$property.title}</b>
      <span>{$property->textView()} {$property.unit}</span>
     
{/if} 


      {/foreach}
{/foreach}    

Страна Россия

Повысить оценку Понизить оценку

22 Отредактировано Владимир 1916 (28.11.2016 22:04:59)

Re: Вывод определенной характеристики в каталоге товаров.

Закусило Александр пишет:

Тогда вообще ничего не понимаю. Как у Вас есть массив, и вы его перебираете, а он пустой. Не может такого быть.

А может это быть из-за того, что изменения делаю на локальной версии, где движок несколько месяцев не обновлял?

P.s. Хотя на рабочем сайте тоже не получалось, а там все обновлял, кроме шаблона и самого последнего обновления.

Повысить оценку Понизить оценку

Re: Вывод определенной характеристики в каталоге товаров.

{$list = $this_controller->api->addProductsProperty($list)}

нужно в шаблоне вставлять

прямо перед

 {foreach $list as $product}

?

Повысить оценку Понизить оценку

Re: Вывод определенной характеристики в каталоге товаров.

Может я куда-то не туда вставляю

{$list = $this_controller->api->addProductsProperty($list)}

?
У меня немного исправленный шаблон perfume.
Там шаблон списка состоит из двух файлов, даже трех.
Нужно код указанный выше вставлять в list_products_items.tpl

{if $view_as == 'blocks'}
    <ul class="products">
        {foreach $list as $product}
            {include file="%catalog%/one_product.tpl" shop_config=$shop_config product=$product}
        {/foreach}
    </ul>
{else}
    <table class="productTable">
            {foreach $list as $product}
            <tr {$product->getDebugAttributes()} data-id="{$product.id}">
                {$main_image=$product->getMainImage()}
                <td class="image"><a href="{$product->getUrl()}"><img src="{$main_image->getUrl(100,100)}" alt="{$main_image.title|default:"{$product.title}"}"/></a></td>
                <td class="info">
                    {hook name="catalog-list_products:tableview-title" title="{t}Просмотр категории продукции:название товара, табличный вид{/t}"}
                        <a href="{$product->getUrl()}" class="title">{$product.title}</a>
                    {/hook}

в самый верх? или куда?

Или же в файл list_products.tpl

{$shop_config=ConfigLoader::byModule('shop')}
{$check_quantity=$shop_config.check_quantity}
{$list = $this_controller->api->addProductsMultiOffersInfo($list)}
{$list = $this_controller->api->addProductsDirs($list)}
{if $THEME_SETTINGS.enable_favorite}
{$list = $this_controller->api->addProductsFavorite($list)}
{/if}

пробовал по-разному, результата нет. Может вообще не туда вставляю?

Повысить оценку Понизить оценку

25 Отредактировано Закусило Александр (29.11.2016 11:49:19)

Re: Вывод определенной характеристики в каталоге товаров.

Конструкцию правильно вставлять в list_products.tpl

{$list = $this_controller->api->addProductsMultiOffersInfo($list)}
{$list = $this_controller->api->addProductsProperty($list)} {* Вот здесь например! *}
{$list = $this_controller->api->addProductsDirs($list)}