Lesti_FPC is een Full Page Caching module. Binnen Magento is het niet mogelijk om volledige pagina’s te cachen, omdat er dynamische blok elementen in voorkomen. Enkele voorbeelden zijn het blok van je winkelwagen, het blok voor de productvergelijking etc. Indien deze blokken worden gecached en de waarden veranderen door bijvoorbeeld het toevoegen van een product, zal het blok het toegevoegde product niet tonen. Dit is namelijk niet gecached. We zullen Lesti in dit geval moeten instellen om ervoor te zorgen dat deze blokken zich verversen bij een actie als “voeg product toe aan de winkelwagen”.

Voordat we het hier uitleggen, willen we je adviseren ook even de documentatie van Lesti zelf door te nemen. Deze is uitgebreider en ook heel goed. In deze post schrijven we het wat compacter op. Maar kom je er niet aan uit, dan is het doornemen van Lesti’s documentatie zeker aan te raden. Lesti Fpc Documentation version 1.4.5

En een speciale shout-out naar Lesti voor het ontwikkelen van deze veelgebruikte module!

Dynamic blocks vs. Lazy blocks

Gordon Lesti benoemt 2 soorten blokken. Dynamic en Lazy blocks. Ieder blok dat we hier benoemen is een dynamic block. Dit zijn blokken die worden geladen bij ieder verzoek van een klant naar de webshop en bevatten dus klantgegevens zoals de inhoud van je je winkelwagen. Enkele bekende dynamic blocks zijn global_messages, global_notices en cart_sidebar. Vaak zijn deze “dynamic blocks” statisch omdat iedere klant begint met bijvoorbeeld een “lege winkelwagen”, dus de inhoud van dit blok is voor iedereen in de eerste instantie hetzelfde.

blocks

Het probleem is dat deze blokken gecached worden terwijl de inhoud verandert. De nieuwe inhoud zal niet worden getoond, omdat het niet in de cache zit. We moeten dit blok voor deze klant “verversen”. De blokken die moeten worden vernieuwd bij bepaalde acties noemen we “lazy blocks”. Vermoedelijk omdat deze blokken pas iets gaan doen als ze echt iets moeten doen.

Het verversen van deze blokken doen we na bepaalde acties zoals: checkout_cart_delete (verwijder product uit de winkelwagen) en catalog_product_compare_add (voeg product toe aan vergelijken). De inhoud van de blokken verandert hierdoor en dus moeten we deze verversen. Hiervoor hebben we 2 instellingen nodig, namelijk: “bij welke acties verversen we?” (Refresh actions) en “wat verversen we?” (Lazy blocks).

Binnen Magento zijn deze instellingen op de volgende locatie te vinden: Systeem -> Configuratie -> [Sectie] Geavanceerd -> Systeem en vervolgens het tabblad van Lesti FPC.

refresh_actions_settings

lazy_block_settings

Het vinden van de instelling

Lesti FPC bevat standaard al veel instellingen waardoor er in veel gevallen geen extra instellingen meer nodig zijn. In sommige gevalen, zoals bij niet-standaard modules of themes, is er weleens extra configuratie nodig. De uitdaging hierin is het “vinden van de juiste instelling”. In dit geval lichten we toe hoe we de bloknamen vinden voor de lazy en of dynamic blocks, gezien dit iets is wat regelmatig voorkomt.

Probleemidentificatie – Het begint bij een stukje probleemidentificatie, wat werkt er niet naar behoren? Een veelvoorkomend geval is een maatwerk winkelwagentje dat net iets anders werkt. In zo’n geval lijkt de winkelwagen leeg te blijven nadat er een product is toegevoegd. Ga je vervolgens naar de winkelwagenpagina, staat het product er wel in. Als we kijken naar de bovenstaande uitleg kunnen we dus vaststellen dat deze maatwerk winkelwagen een “Lazy block” moet zijn dat zich ververst na een actie. We zullen dus op zoek moeten gaan naar de bloknaam. Het toevoegen van een product aan de winkelwagen is een standaard actie binnen Magento, Lesti heeft deze al voor ons ingesteld.

Handig om te weten  Bloknamen staan gedefinieerd in de layout xml bestanden. Het is handig om te weten hoe theme’s binnen Magento en daarbij ook Magento’s theme fallback model werkt. Daarvoor verwijzen we je naar het eerste deel van deze post. Magento template fallback model. Ook is het erg handig om template path hints aan te zetten, hoe je dit doet lees je hier: How Do I Turn On Template Path Hints

Via de template path hint tool, kan je zien vanuit welk bestand het blok element komt.

path_hint

Het deel wat na frontend/{package}/{theme}/template komt is voor ons relevant. Aan het deel wat daarvoor komt, kunnen we zien in welk theme package we moeten kijken. We hebben verderop in deze post nog een handig commando voor je wat dit voor je opzoekt.

Het relevante deel zal in een XML bestand voorkomen als: template="pad_naar_het_bestand.phtml" in bovenstaand geval: template="checkout/cart/top.phtml". Op vermoedelijk dezelfde regel zal name="bloknaam" staan.

Bingo!

We hebben de naam van ons lazy block, namelijk “topCart”. Een klein voorbeeld uit bovenstaande case:

        
        
            
                
                
            
        
        
             
                simplecheckout/cart_item_renderer
                groupedcheckout/cart_item_renderer_grouped
                configurablecheckout/cart_item_renderer_configurable
                
                    
                
            
        

Het enige dat we nu nog moeten doen is de bloknaam toevoegen aan het “Lazy blocks” deel van Lesti_FPC in de backend. Dit staat in het begin van deze post uitgelegd met een voorbeeld in de afbeelding. Omdat we de Magento configuratie hebben aangepast, dien je ook even de cache te verversen via de backend. Of als je een shell user bent: magerun cache:flush.

Om het zoeken door alle XML bestanden makkelijker te maken hebben we nog een handigheidje voor je:

Vinden van bloknamen via een shell commando

De shell gebruikers op het Byte platform kunnen gebruik maken van het volgende commando:

find app/design/frontend -name "*.xml" | xargs grep 'template="pad_naar_bestand.phtml"'

Hier pas je de waarde binnen de parameter template= aan naar het pad van je template bestand zoals hierboven uitgelegd. Voorbeeld van hoe wij hem gebruikte in deze case.

find app/design/frontend -name "*.xml" | xargs grep 'template="checkout/cart/top.phtml"'

Met als resultaat:

app/design/frontend/package/default/layout/checkout.xml: <block type="checkout/cart_sidebar" name="topCart" template="checkout/cart/top.phtml" before="-">

Mijn Lesti FPC werkt nog steeds niet naar behoren

In deze post hebben we vooral het gedeelte omtrent blocks besproken, maar er is nog veel meer. Mocht het nog niet werken, raden we je aan om ook even de documentatie van Lesti zelf door te lopen en anders even een Byte partner aan zijn mouw te trekken.

 

40