Renderery

Frontendové komponenty jsou rozšiřitelné pomocí renderů, které lze volat z Latte šablon nebo přímo z PHP.

Latte šablony

V šablonách máme dostupné makro render, kterému lze předávat parametry např.: 

{render productPreview 'product':$product}

Ukázka vyrenderuje ProductPreview (pomocí ProductPreviewRenderer, kterému se předá objekt typu Product).

Různé renderery mohou mít různé parametry, např. 

{render prices_commonPrice $product 'type':'preview'}

 

Viditelnost rendereru

Renderery automaticky kontolují svou viditelnost vůči nastavení tématu (dříve se pro to používala Latte funkce canShow).

Viditelnost může být ovlivněna pomocí doplňkových parametrů makra render:

  • show - očekávané nastavení v tématu (defaultně se hledá hodnota "on")
  • show-default - přednastavená hodnota rendereru (defaultně je nastaveno na "off")
  • show-alias - klíč, který se hledá v nastavení tématu (defaultně se použije název rendereru převedený z camel case na pomlčkami oddělený název)
  • target - cílová entita, pro kterou se hledá viditelnost (defaultně prázdné)

 

{render prices_commonPrice $product}

Vykresleno v případě:

  • Téma má nastaveno "prices_common-price": "on"

 

{render prices_commonPrice $product show:tags}

Vykresleno v případě:

  • Téma má nastaveno "prices_common-price": "tags"

 

{render prices_commonPrice $product show:tags show-default:tags}

{render prices_commonPrice $product show-default:on}

Vykresleno v případě:

  • Vždy, pokud to vysloveně nezakáže téma např. "prices_common-price": "offf"

 

{render prices_commonPrice $product target:preview}

Vykresleno v případě:

  • Téma má nastaveno "preview-prices_common-price": "on"

Toto umožňuje vykreslení common price v náhledech (previews), ale nikoliv v detailu produktu.


{render prices_commonPrice $product show-alias:neco-jineho}

Vykresleno v případě:

  • Téma má nastaveno "neco-jineho": "on"

 

 

Přímo z PHP

Renderery jsou dostupné i přímo přes WebContainer v PHP:

WC::component()->renderer()->productPreview(["product" => $product]);

 

Jak se definuje renderer?

Renderery bydlí v namespace ShopecaRenderers a nejjednodušší je, když extendují ShopecaRenderersRenderer nebo ShopecaRenderersAbstractRendererShopItemRenderer (pro produktové renderery).

Renderer musí implementovat ShopecaRenderersRendererInterface

Public metodami rendereru jsou render a renderTemplate, které se liší pouze tím, že první použije k renderování vlastní šablonu, druhý převezme šablonu danou parametrem. Volání z Latte vždy spoléhají na přednastavenou šablonu. 

V ukázce výše stojí za povšimnutí "render prices_commonPrice", které odděluje namespacy pomocí podtržítek, takže výsledný CommonPriceRenderer má lokaci ShopecaRenderersPricesCommonPriceRenderer.

Dostupné renderery

Základní doménové renderery:

  • Banner
  • Breadcrumbs
  • CartBox
  • LoginBox
  • ProductDetail
  • ProductPreview
  • ProductSorting
  • Search


Skupinové renderery:

  • ConnectedProducts
  • ProductOtherVariants


Základní objektové renderery (použité uvnitř doménových):

  • BuyButton
  • BuyVariantOptions
  • ColorPreview
  • Prices
    • CommonPrice
    • FacePrice
    • ForeignPrice
    • PriceWithoutDiscount
    • PriceWithoutVat
    • PriceWithVat
  • ProductAnnotation
  • ProductAvailability
  • ProductBuyButton
  • ProductDetailBody
  • ProductDetailHeader
  • ProductDownloads
  • ProductGallery
  • ProductImage
  • ProductLikes
  • ProductPricing
  • ProductProperties
  • ProductPropertyTags
  • ProductTags
  • ProductVariables