Tag Archives: smarty

Yderligere caching og performance

Ud over at vi har vores generelle caching der fungerer på sidebasis, og som bliver deaktiveret i det øjeblik en bruger logger ind, eller lægger noget i kurven, så har vi også en caching-funktion på blok-niveau som man selv skal implementere.

Den er brugbar hvis man fx har en masse smarty-kode til at rendere en menu, eller andre komplicerede ting – de ting kan nemlig sløve din shop en lille smule, da de måske skal lave en masse opslag. Afhængig af hvad du renderer selvfølgelig ..

<{get_cache name="my_cache" ttl=3600 assign="my_cached_data"}>

<{if $my_cached_data}>

  <{$my_cached_data}>

<{else}>

  <{cache name="my_cache"}>
    <!-- Her skal du skrive din egen kode -->
  <{/cache}>

<{/if}>

De to funktioner og blok-element du skal lægge mærke til er <{cache}> og <{get_cache}>.

<{cache}> bruges til at omkrandse den kode du vil gemme i din cache, og den skal have argumentet name=”…” for at angive navnet på cachen.

<{get_cache}> henter din cache ud, og den skal også have en name=”…” for at vide hvilken cache den skal hente. ttl=3600 er en Time To Live på din cache i sekunder, og hvis din cache er ældre end det du angiver kommer der intet resultat. Assign er valgfri, men anbefales. Den bruges til at assigne dit cachede data til en variable du senere kan checke på.

For at det virker optimalt skal du gøre som ovenstående, hvor du assigner din cache til en variable, og så checker om den er til stede. Er den til stede kan du vide dit cachede data. Ellers skal det renderes igen.

Update: Nørderne fra ClickStarter har leget med det og fundet en smart løsning på dynamisk indhold. Du kan se deres løsning her.

Vis at produktet er nyt

Mange vil gerne vise et ikon, eller noget andet, hvis deres produkt er nyt. Vi har en feature der kan hjælpe med det, og det er metoden getOnlineHours() på produkterne. Den returnerer antal timer siden produktet blev sat online.

Måden den kan implementeres på er som følgende:

<{if $product->getOnlineHours() < 48}>
    Nyhed! (smart ikon fx)
<{/if}>

Ovenstående skriver en tekst – eller måske viser et ikon hvis det er under 48 timer siden produktet blev sat online.

Hvis man vil kunne stille nemt på timerne, så kan man med fordel tilføje et felt i sin theme_settings.ini og bruge det. Jeg tilføjer fx føldende til themes_settings.ini:

[products]
news_in_hours=int

Det gør at der kommer en lille boks under temaindstillinger hvor man kan ændre hvor gammelt noget må være for at det er en nyhed. Boksen ser sådan ud:

Skærmbillede 2014-03-23 kl. 19.57.56

For at checke på det felt kan du bruge følgende kode:

<{if $product->getOnlineHours() < $settings.products.news_in_hours|default:10}>
    Nyhed ...
<{/if}>

Bemærk at jeg bruger “|default:10″ for at angive at hvis feltet ikke er sat så skal default være 10 timer.

Enjoy!