Skip to content
  1. Extras
  2. PageBuilder
  3. Section catalog
  4. Pro
  5. Curated products

Curated products ​

Unlike Products grid, no single category: you pick exact product IDs in multirelation.

Curated products

Информация

Requires PageBuilder Pro and miniShop3.

How it differs from the grid ​

  • Exact SKU list, order follows multirelation
  • Not tied to one category
  • Same card markup as grid

Curated scenarios ​

  • "Recommended" on homepage
  • New arrivals: manual list without category filter
  • Bundle on a landing page

Page examples ​

Product multirelation ​

Product search uses mgr/ms3/products/search. products is required. The type is "cacheable": false.

On render, ProSectionRenderSupport builds curated_product_ids: at most 12 ids, comma-separated, in selection order. The chunk passes that string to msProducts (parents = 0). An empty list shows the chunk text «Выберите товары в инспекторе секции.»

Similar sections ​

Block parameters ​

ParameterValue
keycurated_products
LayerPro
Categorycommerce (commerce)
Chunkpagebuilderpro_curated_products
Requirespro, minishop3

Inspector fields ​

Fill these fields in the section inspector. Field types are documented in the field types reference.

Title (title) ​

Type text. Optional.

Products (products) ​

Type multirelation. Required. Pick multiple resources. JSON stores resource IDs.

Intro (intro) ​

Type textarea. Optional.

Site output ​

pb-curated-products grid from multirelation IDs.

Section data ​

Example payload after save. Media, video, and map values may be enriched on output:

json
{
  "title": "Section title",
  "products": [
    201,
    202,
    203
  ],
  "intro": "Short intro before the main content."
}

Chunk template ​

Fenom chunk pagebuilderpro_curated_products:

fenom
{set $resourceIds = $curated_product_ids|default:''}
{set $listing = ''}
{if $resourceIds}
  {set $listing = $modx->runSnippet('msProducts', [
    'parents' => 0,
    'resources' => $resourceIds,
    'limit' => 12,
    'tpl' => 'pagebuilderpro_ms3_product_row',
    'includeVendorFields' => '*',
    'includeOptions' => 'color,size',
    'withCurrency' => 1,
    'showZeroPrice' => 1
  ])}
{/if}
<section class="pb-section pb-section--curated-products pb-curated-products pb-listing{if $cssClass} {$cssClass|escape}{/if}" data-pb-section="curated_products"{if $id} id="pb-{$id|escape}"{/if}>
  <div class="pb-section__inner">
    {if $title}
      <h2 class="pb-heading">{$title|escape}</h2>
    {/if}
    {if $intro}
      <p class="pb-listing__intro">{$intro|escape}</p>
    {/if}
    {if $listing}
      <div class="pb-listing__grid">
        {$listing}
      </div>
    {else}
      <p class="pb-listing__empty">{'pagebuilder_fe_listing_empty_curated' | lexicon}</p>
    {/if}
  </div>
</section>

See also ​