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