Nabídka dokumentace

Použití textu ceny ve vlastních šablonách a headless obchodech

Načtěte text OmniBuzz z metapole varianty ve vlastním kódu Liquid nebo v Storefront API a použijte stejné pravidlo zobrazení jako aplikační blok.

Aplikační blok stačí pro většinu šablon. Pokud vaše šablona aplikační bloky nepodporuje nebo stavíte headless obchod, můžete hotový text načíst sami. OmniBuzz ho zapisuje do metapole varianty. Číst ho umí šablona Liquid i Storefront API.

Kde jsou data

VlastnostHodnota
Jmenný prostoromnibuzz
Klíčlabel
Typjson
VlastníkVarianta produktu
Přístup ze StorefrontuVeřejné čtení
Název definiceOmniBuzz label

OmniBuzz definici vytvoří za vás. Hodnota existuje vždy, když má varianta data OmniBuzz. m může být prázdné ({}); pak nezobrazujte nic.

Pokud používáte blok šablony, nic se nemění. Blok Omnibus cena dál používá vlastní data ($app:omnibus). Tuto stránku potřebujete, jen když píšete vlastní kód.

Formát hodnoty

{
  "v": 1,
  "u": "2026-11-05T02:10:00Z",
  "w": 30,
  "m": {
    "123456789": {
      "c": "EUR",
      "p": 10000,
      "r": 12000,
      "pct": 16,
      "t": {
        "en": "Lowest price in the last 30 days: €120.00",
        "de": "Niedrigster Preis der letzten 30 Tage: 120,00 €",
        "fr": "Prix le plus bas des 30 derniers jours : 120,00 €"
      },
      "b": {
        "en": "-16%",
        "de": "-16 %",
        "fr": "-16 %"
      }
    },
    "987654321": {
      "c": "SEK",
      "p": 114500,
      "r": 136000,
      "pct": 15,
      "fx": 200,
      "t": {
        "en": "Lowest price in the last 30 days: SEK 1,360.00",
        "de": "Niedrigster Preis der letzten 30 Tage: 1.360,00 SEK",
        "fr": "Prix le plus bas des 30 derniers jours : 1 360,00 SEK"
      },
      "b": {
        "en": "-15%",
        "de": "-15 %",
        "fr": "-15 %"
      }
    }
  }
}

Příklad ukazuje tři jazyky, aby zůstal krátký. Skutečná hodnota má všech deset v t i v b. Měna obchodu je v příkladu EUR, takže druhý trh je přepočítaný a má fx.

PoleVýznam
vVerze formátu. Nyní 1.
uKdy byla hodnota zapsána (čas ISO).
wDélka okna ve dnech.
mVýsledky podle trhů. Klíčem je číselné ID trhu. Jsou tu jen trhy s textem k zobrazení. Může být prázdné.
cMěna záznamu.
pCena v okamžiku kontroly, v haléřích (stejná jednotka jako ceny v Liquidu, i u měn bez desetinných míst).
rPředchozí cena, v haléřích.
pctSnížení oproti předchozí ceně v procentech, zaokrouhlené dolů.
fxTolerance směnného kurzu v bazických bodech (200 = 2 %). Je přítomné jen tehdy, když c není měna obchodu.
tText ceny podle jazyka. Všech deset jazyků.
bText štítku slevy podle jazyka. Je přítomný jen tehdy, když je pct větší než 0.

Pravidlo zobrazení

Uložený záznam vždy porovnejte s aktuální stránkou. Text zobrazte, jen když platí všechno z následujícího:

  1. m obsahuje záznam pro ID trhu kupujícího.
  2. c se rovná měně kupujícího.
  3. Srovnávací cena varianty je vyšší než její cena.
  4. r je větší než 0.
  5. Aktuální cena v haléřích se rovná p. U záznamu s fx stačí i abs(price - p) * 10000 <= p * fx.

Text vyberte v tomto pořadí: jazyk kupujícího (například de), potom základní jazyk (pt a pt-BR používají pt-PT), potom en. Štítek slevy zobrazte, jen když se aktuální cena přesně rovná p. Všechny texty berte jako prostý text: v Liquidu použijte | escape, v JavaScriptu textContent, nikdy innerHTML.

Pokud některá kontrola selže, nezobrazujte nic. Nezobrazujte starý text vedle změněné ceny.

Příklad v Liquidu

Uložte to jako snippets/omnibuzz-label.liquid a vykreslete na stránce produktu:

{% doc %}
  @param {variant} variant - The selected variant
  @example
  {% render 'omnibuzz-label', variant: product.selected_or_first_available_variant %}
{% enddoc %}
{%- liquid
  assign label = variant.metafields.omnibuzz.label.value
  assign market_id = localization.market.id | append: ''
  assign entry = label.m[market_id]
  assign price = variant.price
  assign show = false
  assign exact = false

  if entry and entry.c == cart.currency.iso_code and variant.compare_at_price > price and entry.r > 0
    if price == entry.p
      assign show = true
      assign exact = true
    elsif entry.fx != blank
      assign drift = price | minus: entry.p | abs | times: 10000
      assign allowed = entry.p | times: entry.fx
      if drift <= allowed
        assign show = true
      endif
    endif
  endif

  if show
    assign lang = request.locale.iso_code
    assign base = lang | split: '-' | first
    if base == 'pt'
      assign base = 'pt-PT'
    endif
    assign text = entry.t[lang] | default: entry.t[base] | default: entry.t.en
    assign badge = entry.b[lang] | default: entry.b[base] | default: entry.b.en
  endif
-%}
{%- if show and text != blank -%}
  <p class="omnibuzz-label">{{ text | escape }}</p>
  {%- if exact and badge != blank -%}
    <span class="omnibuzz-badge">{{ badge | escape }}</span>
  {%- endif -%}
{%- endif -%}

Snippet čte aktuální cenu z varianty. Když kupující zvolí jinou variantu, musí vaše šablona snippet vykreslit znovu nebo provést stejné kontroly ve skriptu.

Příklad se Storefront API

Bez @inContext vrací API ceny hlavního trhu. Vždy předávejte zemi a jazyk kupujícího:

query OmniBuzzLabel($handle: String!, $country: CountryCode!, $language: LanguageCode!)
@inContext(country: $country, language: $language) {
  localization {
    market {
      id
    }
  }
  product(handle: $handle) {
    variants(first: 50) {
      nodes {
        id
        price {
          amount
          currencyCode
        }
        compareAtPrice {
          amount
          currencyCode
        }
        metafield(namespace: "omnibuzz", key: "label") {
          value
        }
      }
    }
  }
}

value je řetězec JSON. Zpracujte ho a potom použijte pravidlo zobrazení:

  • Přepočtěte amount na haléře: Math.round(Number(amount) * 100). Udělejte to pro každou měnu.
  • ID trhu je globální ID, například gid://shopify/Market/123456789. Jako klíč v m použijte číslo na konci.
  • localization.market je od Storefront API 2026-10 zastaralé, ale stále funguje. Bez ID trhu nezobrazujte nic.

Dobré vědět

  • Hodnoty se aktualizují každou noc a znovu poté, co na stránce Štítky změníte texty nebo toleranci směnného kurzu.
  • Částky v textu formátuje samotná aplikace. Formát se může mírně lišit od peněžního formátu vašeho obchodu.
  • Trh s vypnutými texty nebo varianta bez výsledku nemá záznam. V takovém případě nezobrazujte nic.

Když aplikaci odinstalujete

Shopify odebírá jen data, která patří samotné aplikaci. Definice omnibuzz a její hodnoty zůstávají po odinstalaci ve vašem obchodě. Aplikace je už nemůže uklidit. Abyste je odstranili, otevřete v administraci Shopify Nastavení > Vlastní data > Varianty produktů a smažte definici OmniBuzz label. Smazáním zmizí i její hodnoty.

Odstraňte i svůj kód. Po odinstalaci se data přestanou aktualizovat a starý text by mohl stát vedle změněné ceny. Svůj snippet nebo dotaz odstraňte při odinstalaci.