Funktioner og moduler

I denne artikel:


    I shopsystemet har vi mange forskellige funktioner og moduler til at hjælpe dig med at udvikle dine egne hjemmesider og webshops. Her finder du dokumentation på nogle af disse moduler og funktioner.

    Funktionen getTranslation

    I shopsystemet er der en funktion, der giver adgang til alle sprogspecifikke tekster på dit website. Funktionen er tilgængelig ved hjælp af ’getTranslation’. Dette er en global funktion, der eksisterer på alle controllers og benyttes til at få oplysninger som produkttitel, blogtekst og kontaktformular information. Denne funktion kan få data I alle sprog oversættelser, men benytter som standard den aktuelle brugers valgte sprog.

    Funktionen ’getTranslation’ bør ikke forveksles med $text variablen, som også indeholder oversættelser. Forskellen er, hvilke data du modtager. GetTranslation får dataindtastning I databasen, hvilket betyder alle de produkter, blog eller nyhedsindlæg du har lavet. Mens variablen $text er en liste over genrelle systemtekster, som postnummer, brugernavn, køb knappetekst osv.

    getTranslation() reference tabel

    Funktionen tager 4 parametre. Tabellen nedenfor beskriver funktionen og rækkefølgen af parametre.

    Funktion controller->getTranslation(id, title, module, language)

    Parameter Påkrævet Definition Eksempel
    id x Element id. 10
    title x Se eksempler nedenfor. seo_title
    module   (valgfri) Se eksempler nedenfor. product
    language  

    (valgfri) ISO sprogkode f.eks. for Dansk (DK), engelsk (UK), Norsk (NO) osv.

    For mere information: Se ‘Sprog og domæner’ i shoppens administration.

    UK

    Når du kalder funktionen, er der et par ting, du bør være opmærksom på:
    1) Funktionen kender til modulet, men det kan få tekster fra alle moduler i systemet.
    2) Funktionen kender til det valgte sprog, men det kan få tekster fra alle sprog i systemet.

    Dette eksempel viser, hvordan funktionen og parametre bruges til at kalde brugerdefinerede information ved hjælp af controllere fra form.tpl filen:

    
     {$formController->getTranslation($formEntity->Id, "form-element", "button")}
    
    

    En vigtig ting at huske på er, at controllere I Hostedshop er ’selvbevidste’, det betyder, at controllere kan bruge de to nødvendige parametre: ’id’ og ’title’ og stadig har adgang til de korrekte information, fordi controlleren kender alle de andre relevante informationer. Her er et eksempel fra product-list.tpl filen:

    
    {$descriptionBottom = $userController->getTranslation($brand->Id, "text_two")}
    
    

    Selvfølgelig kan du også bruge alle fire parametre, hvilket er nyttigt, hvis du vil være mere specifik. F.eks. vise sprognavnet for et produkt på engelsk (UK).

    NOTE
    Nogle controllere, bl.a. productController og blogController, har shorthands der giver dig mulighed for at få adgang til at bruge specifik information lettere. Som dette eksempel:

    
    productController->getDescription productController->getDescriptionShort blogController->getDescription
    
    

    JSON modul

    Udover de normale sidetyper I Hostedshop, har vi også modules/json, en speciel type. Denne sidetype er special på den måde, at den ikke indlæser resten af skabelonsystemet. Den indlæser kun de enkelte filer defineret i filerne inde i den. Alle filerne her indlæses med ”Content-Type: application/json” dokument header. Det betyder, at den er ideel til udlæsning og generering af JSON data.

    I Hostedshops designs, bruger vi denne sidetype til at generere JSON-data (asynkrone data) til ting som produktlisten og produktvarianter.

    I mappen kan du modificere eksisterende filer for at tilføje data til dit website, f.eks. produktlisten eller produktsiden. Bare husk at disse filer er nødvendige for at skabelonerne kan fungere, og at redigere dem kan resultere i tab af funktionalitet.

    Udover at redigere eller tilføje data til eksisterende filer kan du også oprette dine egne JSON-ressourcer, som dine kunder/besøgende kan udnytte. F.eks. kan du oprette din egen blog eller nyheds ticker ved at oprette dine egen JSON-fil og udlæse data ved hjælp af Controllers, Collections og Entities. En ting man skal huske på er, at når du opretter nye JSON-filer, skal du også selv skrive det JavaScript til dit hjemmeside, der håndterer de nye data.

    Indenfor JSON skabeloner finder du en modifier kaldet ”jsonify”, som normalt kaldes I bunden af en skabelon. Jsonify tager et array af Smarty-data, der er oprettet inde en skabelon fil og den formaterer den som JSON, så dataene kan bruges af JavaScript.

     

    Eksempel 1

    Gå til: [skabelon_navn]/modules/json mappen. Det er her du kan oprette eller redigere JSON-filer ved brug af Smarty. I dette eksempl redigerer vi products.tpl filen og tilføjer nogle brugerdefinerede data til den. Products.tpl er de filer, der generer alle JSON data, som sammen med AngularJS er, hvad der bruges til at generere produktlisten.

    
    {controller assign=controller type=product}
    
    
    
    {collection assign=products controller=$controller productId=$value}
    
    
    
    {$product['CustomDescription'] = 'Duis vel semper orci, quis vehicula elit...'} {$output|jsonify}
    
    

    ADVARSEL: hvis du ikke inkluderer jsonfiy i bunden af filen, skal du tilføje hele formateringen manuelt.

    1. Tildel en produkt controller (da vi redigerer, er dette allerede gjort for os).
    2. Tildel en produkt collection (da vi redigerer, er dette allerede gjort for os).
    3. Tilføje en brugerdefineret beskrivelse til produktvariablen med følgende format.
    4. Den brugerdefinerede beskrivelse formateres og udleveres som JSON til browseren (dette kan ses via DOM Inspector i din browser, se billedet nedenfor).
    5. Du kan nu fortsætte med at bruge disse data på din produktliste ved hjælp af AngularJS-skabelonerne. Hovedsageligt ’moduler/produkter/partials/list-js-col.tpl’ og ’moduler/produkter/partials/list-js-row.tpl’. Det er de skabeloner, der repræsenterer produktet i produktlisten i række og kolonnevisning.

    Funktioner til caching

    Smarty caching giver udviklere mulighed for at øge hastigheden på tunge webshops eller websites. Med smarty caching gemmes det du ønsker at cache i en fil. Så i stedet for at spørge systemet hvilken menu der skal vises, så hentes den frem via en statisk fil. Filen opdateres når du ønsker det - man sætter med smarty en tidsperiode, f.eks. 1 time.

    Læs om de 3 funktioner nedenfor, som kan bruges til at cache smarty elementer med, f.eks. en menu.

    CacheIntent

    CacheIntent funktionen er til udtræk og oprettelse af cache elementer. Med andre ord en initialisering af cachen, som kan bruges til udtræk via cache funktionen.
    CacheIntent accepterer følgende parametre:

    Navn Default Beskrivelse Påkrævet
    name '' Navn til genkendelse af cache Ja
    cache_site true Cache er unik for hvert site Nej
    cache_iso true Cache er unik for hvert sproglag Nej
    cache_uri true Cache er unik for hver REQUEST_URI Nej
    cache_currency true Cache er unik for hver valuta, hvis tilgængelig Nej
    ttl 3600 Cachens levetid (Time To Live) i sekunder Nej
    assign '' Navn på ny variabel, der indeholder objekt-instans Ja
    Cache

    Cache funktionen er til at gemme caching data. Data gemmes via cache i en cache instans, som oprettes via cacheIntent.
    Cache accepterer følgende parametre:

    Navn Default Beskrivelse Påkrævet
    content '' Indholdet der skal caches Ja
    cacheIntent '' Navn på cacheIntent, der skal bruges Ja
    ClearCache

    ClearCache funktionen bruges til at slette eller tømme en bestemt cache. F.eks. hvis en bruger logger ud eller hvis man af andre årsager har brug for at slette indholdet. F.eks. i footer, hvor man fjerne nyhedsbrevstilmeldingen for en bruger når de har oprettet sig. Der kan være mange forskellige årsager til at slette en cache.

    ClearCache acceptere følgende parametre:

    Navn Default Beskrivelse Påkrævet
    name '' Navn på cacheIntent, der skal slettes Ja
    Om brug af caching

    Caching er ideelt til komponenter eller template filer som er meget resourcekrævende. Eller til at cache komponenter og templates som går igen mange steder på tværs af løsningen, f.eks. en menu eller footer.

    Det er vigtigt med caching funktionerne er at navngivningen af cachen er unik, da navnet bruges til at finde cachen frem ved hvert load. Navnet kan derfor også bruges til at lave cachen unik for flere niveauer, end det er muligt med caching parametrene. I menu eksemplet forneden laver vi navnet unikt for hvert sideid ved at sammensætte et genkendeligt navn, i vores tilfælde "menu_", med sideid'et for den side man er på i navigationen. På den måde kan man sammen med caching parametrene til cacheIntent overskrive eller fjerne niveauer, hvor cachen skal være unik. 

    Smarty caching er fil-baseret og gemmer cache filer i den tidsperiode, som man angiver (TTL nævnt ovenfor). Det betyder også, at man med smarty caching ikke får automatisk opdateret f.eks. en menu, så længe den ligger i cachen. Det er dog altid muligt at slette cachen, via clearCache funktionen.

    Eksemplet nedenunder viser hvordan man kan bruge caching funktionerne til at cache en menu. Således at selvom menuen caches, så fungerer den ved sprogskifte, ved navigation (visning af aktiv / markering af aktiv side) og ved siteskifte i tilfælde af man bruger templates på tværs af forskellige sites.

    Bemærk: Ved brug af caching dannes der cache-filer på løsningen, som beregnes med i pladsforbruget.

    Eksempel 1: caching af menu, en template fil

    Eksemplet er udviklet på Rooty templaten, i filen partials/top.tpl.

    Vi danner cachen ud fra flere niveauer, beskrevet her:

    • Sproglag - menupunkterne ændrer sig med sproget, derfor skal vi gemme en menu pr. sproglag.
    • Site - forskellige sites kan have forskellige menupunkter, og derfor en cache pr. site.
    • Side id - for at cache menuen pr. side, så vi kan vise om den valgte side er aktiv. Man kan også cache på URL, men det vil gemme langt flere cache filer.
    • Bruger logget ind - menuen ændrer sig ved logget ind, f.eks. under menu punktet Min konto.
    
    {* We create a unique name for the cache, so we have a cache for each case *}
    {$menuCacheName = "menu_"}
    {$menuCacheName = $menuCacheName|cat:"{($user) ? '1' : '0'}_"}
    {$menuCacheName = $menuCacheName|cat:$page.id}
    {* Notify framework that you intent to cache a piece of code *}
    {cacheIntent name=$menuCacheName cache_uri=false assign=cache}
    {* Check intent object for existing cache *}
    {if $cache.content}
        {$cache.content}
    {* If empty the cache has not been set or has expired, so prepare a new cache *}
    {else}
        {menu assign=primaryMenu static=$static}
        {* Assign the included file to a variable *}
        {include
            file='modules/widgets/menu/menu.tpl'
            items=$primaryMenu
            classes='nav nav-default'
            assign=menuContent
        }
        {* Save the captured file with the cache intent object, and echo the file content itself to the page *}
        {cache content=$menuContent cacheIntent=$cache}
    {/if}
    
    
    Eksempel 2: caching af footer, en sektion eller del af en template

    Eksemplet er udviklet på Rooty templaten, i filen partials/bottom.tpl.

    Vi fjerner nogle af caching niveauerne, da sektionen ikke er unik for f.eks. currency eller bruger, de niveauer vi cacher på er derfor

    • Sproglag - menupunkterne ændrer sig med sproget, derfor skal vi gemme en menu pr. sproglag.
    • Site - forskellige sites kan have forskellige menupunkter, og derfor en cache pr. site.

    Til at gemme template data bruger vi {capture}, en funktion indbygget i Smarty til at gemme indhold ned i en variabel. {capture} bruges fordi vi ønsker at gemme dele af en template i en variabel, {capture} tager outputtet fra Smarty, altså rent HTML og gemmer det som en string. I vores tilfælde i den variabel der hedder $footerCache.

    
    {* Notify framework that you intent to cache a piece of code *}
    {cacheIntent name=footer assign=cache cache_uri=false cache_currency=false cache_user=false}
    {* Check intent object for existing cache *}
    {if $cache.content}
        {$cache.content}
    {else}
        {* First capture (equal to ob_start) the region that is to be cached *}
        {capture assign=footerCache}
        
    {if $settings.social_plugin_likebox_pageurl}  
    {/if} 
    {if $settings.social_twitter_pageurl}  
    {/if} 
    {if $settings.social_google_pageurl}  
    {/if} 
    {if $settings.social_instagram_pageurl}  
    {/if}