This is an old revision of the document!
Customizing PrestaShop v1.7 for Use with LSCPS
PrestaShop v1.7 introduces {widget}
and {widget_block}
elements that can be used in Smarty templates directly.
To ensure a hole is punched for a widget, you must define it as an ESI block. Currently, this can not be automated. You will have to manually place LSCache hooks to mark the beginning and the end of each ESI block in the template. LSCache relies on these hooks to trigger the ESI injection.
It currently only impacts cart (ps_shoppingcart) and login (ps_customersignin) blocks at the time of this writing.
Cart and Login Widgets as ESI Blocks
The Cart (ps_shoppingcart
) and Login (ps_customersignin
) blocks already have hooks defined in the default “classic” template so there is no need to change template files for those particular blocks in that particular template. If ps_shoppingcart
and ps_customersignin
are not triggered through hooks, but through {widget}
or {widget_block}
, you will have to manually update the template file.
Surround {widget name=“ps_customersignin”}
with ESI hooks like so:
{hook h="litespeedEsiBegin" m="ps_customersignin" field="widget"} {widget name="ps_customersignin"} {hook h="litespeedEsiEnd"}
If the widget also includes a hook parameter, you need to include that in litespeedEsiBegin
as well. For example, {widget name=“module_name” hook=“specific_hook”}
will change to
{hook h="litespeedEsiBegin" m="module_name" field="widget" hook="specific_hook"} {widget name="module_name"} {hook h="litespeedEsiEnd"}
Widget Blocks as ESI Blocks
For {widget_block}
, if there’s any html code, that will need to be put aside into a template file. So this:
{widget_block name=”module_name”} Smarty / html {/widget_block}
becomes this:
{hook h="litespeedEsiBegin" m="module_name" field="widget_block" tpl="template_path.tpl"} {widget_block name=”module_name”} Smarty / html {/widget_block} {hook h="litespeedEsiEnd"}
where the contents of <template_path>.tpl
exactly match what is written in the Smarty / html
section.
This allows us to use ESI to punch a hole for this widget and regenerate the content later.
An Example: Warehouse Theme
Let’s take the “warehouse” template as an example, and say header.tpl
located at themes/warehouse/templates/_partials/header.tpl
uses variant 1.
Make changes to template
in header.tpl
:
{if $iqitTheme.h_layout == 1} {include file='_partials/_variants/header-1.tpl'} {/if}
As the above code indicated, the actual header template is {include file='_partials/_variants/header-1.tpl'}
You will need to modify _partials/_variants/header-1.tpl
. Make sure you backup your file before doing any changes.
vi _partials/_variants/header-1.tpl
1. ps_shoppingcart as widget_block
Replace the following:
{widget_block name="ps_shoppingcart"} {include 'module:ps_shoppingcart/ps_shoppingcart-default.tpl'} {/widget_block}
with:
{hook h="litespeedEsiBegin" m="ps_shoppingcart" field="widget_block" tpl="module:ps_shoppingcart/ps_shoppingcart-default.tpl"} {widget_block name="ps_shoppingcart"} {include 'module:ps_shoppingcart/ps_shoppingcart-default.tpl'} {/widget_block} {hook h="litespeedEsiEnd"}
2. ps_customersignin as widget
Replace the following:
{widget name="ps_customersignin"}
with:
{hook h="litespeedEsiBegin" m="ps_customersignin" field="widget"} {widget name="ps_customersignin"} {hook h="litespeedEsiEnd"}
3. ps_customersignin as widget_block
Replace the following:
{widget_block name="ps_customersignin"} {include 'module:ps_customersignin/ps_customersignin-btn.tpl'} {/widget_block}
with:
{hook h="litespeedEsiBegin" m="ps_customersignin" field="widget_block" tpl="module:ps_customersignin/ps_customersignin-btn.tpl"} {widget_block name="ps_customersignin"} {include 'module:ps_customersignin/ps_customersignin-btn.tpl'} {/widget_block} {hook h="litespeedEsiEnd"}
Make changes to multi-templates
Sometime header.tpl
located at themes/warehouse/templates/_partials/header.tpl
may use various variants, such as the following:
{if $iqitTheme.h_layout == 1} {include file='_partials/_variants/header-1.tpl'} {elseif $iqitTheme.h_layout == 2} {include file='_partials/_variants/header-2.tpl'} {elseif $iqitTheme.h_layout == 3} {include file='_partials/_variants/header-3.tpl'} {elseif $iqitTheme.h_layout == 4} {include file='_partials/_variants/header-4.tpl'} {elseif $iqitTheme.h_layout == 5} {include file='_partials/_variants/header-5.tpl'} {elseif $iqitTheme.h_layout == 6} {include file='_partials/_variants/header-6.tpl'} {elseif $iqitTheme.h_layout == 7} {include file='_partials/_variants/header-7.tpl'} {/if}
In this case, you will need to back up 7 header files and make changes to these templates from header-1.tpl
to header-7.tpl
, the same way as shown above.