Не передаются значения TV при фильтрации

Почти что победил TagManager2 — фильтры отображаются, все фильтруется. Но когда фильтруешь товары, исчезают значения TV из отображения карточки товара. Жмешь Enter в адресной строке браузера по сформированной TM2 ссылке и значения TV появляются. Подскажите, в чем может быть проблема?
Чанк товара:
<div class="col-xl-4" style="padding-left: 5px; padding-right: 5px; float: left;">						
<div class="post-02 post-02__style-02 js-post-effect">
<div class="post-02__media">
<a href="[[~[[+id]]]]">
[[getImageList?
&tvname=`slider`
&docid=`[[+id]]`
&limit=`1`
&tpl=`@CODE:<img src="[[+slide]]" alt="[[+alt]]" />`
]]
</a></div>
<div class="post-02__body">
<h2 class="post-02__title"><a href="[[~[[+id]]]]">[[!pdoField? &id=`[[+id]]` &field=`name`]]</a></h2>
<div class="post-02__department">[[!pdoField? &id=`[[+id]]` &field=`seo_tag`]]</div>
<div class="post-02__content">
<div class="post-02__description">
[[pdoField:ellipsis=`200`? &id=`[[+id]]` &field=`specification`]]
<ul>
<li><span class="primary-color">Age</span>[[!pdoField? &id=`[[+id]]` &field=`age`]]</li>
<li><span class="primary-color">Height</span>[[!pdoField? &id=`[[+id]]` &field=`height`]] cm</li>
<li><span class="primary-color">Weight</span>[[!pdoField? &id=`[[+id]]` &field=`weight`]] kg</li>
</ul>
</div>
<a class="post-02__link" href="[[~[[+id]]]]">View detail</a>
</div>
</div>
</div>
</div>
Вывод TMFilters:
<div id="filters">
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&jsScript=`0`
&toPlaceholder=`filters`
]]
<form action="[[~[[*id]]]]" method="get">
<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
[[+filters]]
<button class="btn btn-info" type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить фильтр</button>
</form>
</div>

Вывод TMCatalog:
[[!tmCatalog?
&cache=`1`
&elementClass=`modSnippet`
&element=`getProducts`
&tpl=`filtr_tpl`
&sortbyTV=`age`
&sortdirTV=`ASC`
&parents=`3`
&limit=`0`
&debug=`0`
]]
<div class="clearfix"></div>
</div>
<ul class="pagination" id="pages">
[[!+page.nav]]
</ul>
Антон
02 апреля 2020, 19:32
modx.pro
273
0

Комментарии: 12

Павел Романов
02 апреля 2020, 23:52
0
Не используйте @CODE в &tpl, а вынесите в чанк:
[[getImageList?
&tpl=`image_tpl`
......
]]

Чанк image_tpl:
<img src="[[+slide]]" alt="[[+alt]]" />

И лучше вместо конструкций типа:
[[!pdoField? &id=`[[+id]]` &field=`height`]]

используйте (либо в вызове, либо в наборе параметров):
[[!tmCatalog?
&includeTVs=`1`
&includeTVList=`name,seo_tag,specification,age,height,weight`
...
]]

И в чанке просто
[[+tv.name]], [[+tv.seo_tag]], [[+tv.specification:ellipsis=`200`]] и т. д.
    Антон
    03 апреля 2020, 11:47
    0
    спасибо за совет, вроде бы разобрался. По поводу getImageList, такая конструкция потому-что выводит значение первого изображения из MIGX. Только так смог выцепить его из массива:
    [[getImageList?
    &tvname=`slider`
    &docid=`[[+id]]`
    &limit=`1`
    &tpl=`@CODE:<img src="[[+slide]]" alt="[[+alt]]" />`
    ]]
      Павел Романов
      03 апреля 2020, 11:58
      0
      По умолчанию getImageList сортирует как в таблице-виджете, т. е. при ограничении выборки &limit=`1` остается только первое изображение.

      Если нужно иное изображение, то добавьте в MIGX поле типа чекбокс (к примеру, mainimage с возможными значениями Главная==1), ставьте галочку у главной картинки и делайте выборку через where:
      [[getImageList?
      &where=`{ "mainimage ":"1" }`
      ....
      ]]
        Антон
        03 апреля 2020, 12:00
        0
        спасибо)
          Антон
          03 апреля 2020, 12:27
          0
          Вопрос конечно может быть не в тему. Но в каждом товаре у меня используется класс .js-post-effect, который при наведении на товар мышкой выводит основные его атрибуты. До фильтрации все норм, все выводится, все показывается. После фильтрации, при наведении на товар ничего не отображается. Код js, который отвечает за js-post-effect:
          $('.js-post-effect').each(function() {
          	var contentHeight = $(this).find('.post-02__content').height() + 30;
          
          if(windowWidth > 768) {
          		var contentHeight = $(this).find('.post-02__content').height() + 50;
          	}
          
          $(this).find('.post-02__body').css('transform', 'translateY(' + contentHeight + 'px)');
          
          $(this).hover(function() {
          		$(this).find('.post-02__body').css('transform', 'translateY(' + 0 + 'px)');
          	}, function() {
          		$(this).find('.post-02__body').css('transform', 'translateY(' + contentHeight + 'px)');
          	});
          });
          Не могу понять что рубит стили после срабатывания обработчика фильтра.
            Павел Романов
            03 апреля 2020, 12:36
            0
            При фильтрации контент подгружается посредством Ajax и $(document).ready… новых элементов .js-post-effect не видит.
            У tagManager2 есть callback-функция tm_onFilterAfter, которая срабатывает после фильтрации. Соотвественно, в нее можно поместить то, что Вам нужно:

            <script>
              function tm_onFilterAfter( total, pageCount, onPageLimit ){
                // тут Ваш JS 
              });
            }
            </script>
              Антон
              03 апреля 2020, 12:41
              0
              Спасибо, разобрался)
                Антон
                03 апреля 2020, 12:52
                0
                Можно последний вопрос еще?) Как убрать появляющиеся десятичные значения в числовом фильтре-бегунке TM2? У всех TV стоит запрет на десятичные значения. Несмотря на это при первой инициализации фильтра значения диапазона показываются в формате [19] — [30]. Когда начинаешь фильтровать, появляются значения [19.2] — [30.7]
                  Павел Романов
                  03 апреля 2020, 13:07
                  0
                  В ту же функцию поместите обработчик, который будет убирать нули.
                  Получайте значения из инпутов, обрабатывайте и вставляйте обратно.
                    Антон
                    03 апреля 2020, 13:22
                    0
                    Оказывается можно проще. В файле filter.js меняем
                    var slider_step = maxValue - minValue < 100 ? 0.1 : 1;
                    на
                    var slider_step = maxValue - minValue < 1 ? 1 : 1;
                      Павел Романов
                      03 апреля 2020, 13:24
                      0
                      Проще, но исходники править не комильфо )
                      При обновлении компонента (вдруг когда-нибудь) все подобные правки затрутся.
                        Антон
                        03 апреля 2020, 20:44
                        0
                        Заметил очень странную особенность в TM. В значениях TV полей в параметрах ввода стоит как в инструкции:
                        лидер продаж==#лидер продаж#||лидер продаж==#лидер покупок#||
                        При выводе значения в бэкенд, значение также передается в формате
                        #лидер продаж#
                        В tag_mgr2.guard_key стоит значение #
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        12