Blog Sections Open

Building AJAX Catalog Filters with tagManager and getPage

This pattern combines tagManager, a product item template, and getPage-style pagination to keep catalog filters responsive.

A practical implementation of this pattern showed a full product-listing setup built around tagManager, custom TV data, and AJAX pagination. Even today the pattern is useful: keep the catalog markup predictable, isolate filter rendering, and let the listing reload inside a dedicated container instead of rebuilding the whole page.

Product item template

<li class="item">
    <a href="[[+tv.ssilka-offer]]" class="product-image">
        <img src="[[+tv.kartinka]]" alt="" width="145" height="145">
    </a>
    <div class="brend"><a href="[[+tv.ssilka-offer]]">[[+tv.brend]]</a></div>
    <div class="product-name"><a href="[[+tv.ssilka-offer]]">[[+tv.nazvanie]]</a></div>
    <div class="price-box">
        <span class="price">[[+tv.cena-skidka]]</span>
        <span class="price-skidka">[[+tv.cena-old]]</span>
    </div>
</li>

AJAX listing container

<a name="products" id="pageAnchor"></a>
<div id="products">
[[!tmGetProducts]]
</div>

<ul class="pages" id="pages">
[[!+page.nav]]
</ul>

Filter block bootstrap

<script src="/assets/components/tag_manager/js/web/view_switch.js"></script>
<script src="/assets/components/tag_manager/js/web/jquery.history.js"></script>
<script src="/assets/components/tag_manager/js/web/filters.js"></script>

<div id="filters">
[[!tmCatalogFilters?
  &jsMap=`1`
  &innerTpl=`filters_innerTpl`
  &outerTpl=`filters_outerTpl`
  &priceName=`cena-skidka`
]]
</div>

Why this structure works

  • filters are rendered separately from product cards
  • pagination has a stable target container
  • price ranges and checkbox filters can share one filter UI
  • the page can preserve state without a full reload

On modern Evolution CMS projects the exact JavaScript stack may differ, but the architecture still holds up well: isolate listing state, isolate filter markup, and keep the server-side output deterministic enough that pagination and filtering can safely reuse the same rendering rules.

Newer post

Creating Checkbox-Based Catalog Filters with tagManager

How to build checkbox-style product filters with tagManager in Evolution CMS and keep the filter URLs and templates predictable.

Older post

Managing a Large Shopkeeper Catalog Without Losing Editor Control

How to keep a large Shopkeeper-based catalog manageable in Evolution CMS when you have thousands of products and frequent pricing updates.