Документація

Адреси розділів і мови

Три схеми адрес, мовні префікси та правило: посилання беруть готовими, а не склеюють руками.

На цій сторінці

Адреси розділів вітрини будує сам магазин. Тема їх бере готовими, а не склеює руками — тому що вигляд адреси вибирає власник магазину, і тема, яка зібрала посилання сама, зламається у половини магазинів.

Готові адреси приходять у даних

{$product.url}      {$cat.url}      {$page.url}
{$brand.url}        {$tag.url}
{$crumb.url}        {$chip.url}     {$pagination.next_url}

Так само у хлібних крихт, у чипсів фільтра, у сторінок посторінкової навігації і у перемикача мови. Якщо в сутності є адреса — вона вже в даних.

Тег {url} — для розділів без своєї адреси

<a href="{url path='/search'}">Пошук</a>
<a href="{url path='/'}">На головну</a>
<a href="{url path=$shop->cartPath()}">Кошик</a>
<a href="{url path='/cart' locale='uk'}">Кошик</a>
<link rel="canonical" href="{url path='/' absolute=true}">

Тег сам додає мовний префікс поточної мови і приводить адресу до вигляду, прийнятого в цьому магазині. Повна адреса з доменом (absolute=true) потрібна лише пошуковій системі — для посилань усередині сайту беріть звичайний шлях.

Три схеми адрес

Схему вибирає власник у налаштуваннях. Одна й та сама тема має працювати при будь-якій з них — ще одна причина не склеювати адреси руками.

Схема Категорія Товар
natural (за замовчуванням) /телефоны/apple/ /телефоны/apple/iphone-15/
mixed /category/телефоны/apple/ /iphone-15/
flat /category/apple/ /product/iphone-15/

Канон вітрини — завершальний слеш: /cart/, /телефоны/apple/. Корінь — просто /.

Мови

Вітрина може працювати кількома мовами. Основна йде без префікса, решта — з префіксом:

/                російська  (основна мова вітрини)
/uk/             українська
/en/             англійська

Префікс задається в довіднику мов і може відрізнятися від коду мови: мова uk часто отримує префікс ua. Тому в перемикачі виводять prefix або short, а не code.

Адреса єдина для всіх мов

Адреса (slug) товару і категорії одна на всі мови — вона лежить у самої сутності, а не в перекладах. Перекладається вміст: назва, опис, SEO-поля. Змінюється лише мовний префікс.

/telefony/iphone-15/        російська версія
/uk/telefony/iphone-15/     українська версія — та сама адреса

Це рішення магазину, і тема на нього спирається: перемикач мови веде на ту саму сторінку, а не на головну.

Перемикач мови

{foreach $shop->locales() as $l}
    <a href="{$l.url}"{if $l.active} class="is-active"{/if}
       lang="{$l.code}">{$l.short}</a>
{/foreach}

Поля: code (ru), prefix (uk або ua), name (назва рідною мовою: Русский, Українська, English), short (префікс великими літерами), active, url.

urlшлях, а не повна адреса: перемикач зобов'язаний залишитися на тому домені, за яким покупець зайшов. Магазин може працювати на кількох доменах одразу, і підстановка «правильного» домену повела б покупця з того сайту, де він перебуває.

Посилання для пошукової системи

canonical і hreflang магазин рахує сам і кладе в $seo — тема їх тільки виводить:

{if $seo.canonical}<link rel="canonical" href="{$seo.canonical}">{/if}
{foreach $seo.hreflang as $code => $href}
    <link rel="alternate" hreflang="{$code}" href="{$href}">
{/foreach}

Збирати їх самостійно не потрібно і не варто: там враховуються і схема адрес, і домени вітрин, і те, які сторінки взагалі дозволено індексувати.

Адреси дій

Адреси, за якими браузер звертається до магазину — додати в кошик, перерахувати оформлення, надіслати відгук, — тема не пише у скриптах, а оголошує атрибутами на <body>:

<body data-cart-add="/cart/add" data-cart-update="/cart/update" …>

Повний список — на сторінці Атрибути data-*.

Хлібні крихти

{if $breadcrumbs}
    <nav class="breadcrumbs">
        {foreach $breadcrumbs as $crumb}
            {if $crumb@last}
                <span>{$crumb.name}</span>
            {else}
                <a href="{$crumb.url}">{$crumb.name}</a>
            {/if}
        {/foreach}
    </nav>
{/if}

Крихти приходять на сторінку товару, категорії, бренда, мітки і інформаційної сторінки. Останній елемент — поточна сторінка, посиланням його робити не потрібно.

Оновлено 24 серпня 2026