
Magento offre une grande souplesse pour la personnalisation du rendu front office. Chaque catégorie, chaque produit peut avoir un design personnalisé.
En contre-partie, il y a, à minima, autant de clés de cache que de pages CMS, catégories et produits. Si la personnalisation n'est pas utilisée, elle peut êtres désactivée pour améliorer les performances. Je vais donc vous montrer dans ce billet comment réduire les clés de cache pour le front office.
Réduction des clés de cache pour le front office
Nous allons créer un module qui va étendre Mage_Core.
Nous nous basons sur un observer défini dans la classe Mage_Core_Controller_Varien_Action. L'observer controller_action_layout_load_before, de la méthode loadLayoutUpdates, va nous permettre de supprimer certains identifiants des clés de cache.
Le fichier config.xml définit l'observer utilisé et la méthode à appeler.
<config>
<modules>
<Mymodule_Core>
<version>1.0.0</version>
</Mymodule_Core>
</modules>
<global>
<models>
<core>
<rewrite>
<observer>Mymodule_Core_Model_Observer</observer>
</rewrite>
</core>
</models>
</global>
<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<controller_action_layout_load_before_remove_handle>
<class>core/observer</class>
<method>removeHandle</method>
</controller_action_layout_load_before_remove_handle>
</observers>
</controller_action_layout_load_before>
</events>
</frontend>
</config>
config.xml
Il ne reste plus qu'à écrire notre fonction. Nous réduisons le nombre d'identifiants des clés de cache, mais sans excès.
class Mymodule_Core_Model_Observer extends Mage_Core_Model_Observer
{
/**
* Remove some handle to optimize (reduce) uniticy of layout cache key
*
* @event controller_action_layout_load_before
* @param Varien_Event_Observer $observer
* @return \Mymodule_Core_Model_Observer
*/
public function removeHandle(Varien_Event_Observer $observer)
{
$layout = $observer->getEvent()->getLayout()->getUpdate();
$handles = $layout->getHandles();
$typeRemoveHandles = array(
'customer_logged_' => 'simple',
'STORE_' => 'simple',
'CATEGORY_' => 'simple',
'/^PRODUCT_[\d]*$/' => 'regexp', // we want just PRODUCT_[id] not PRODUCT_TYPE_[simple|...]
);
foreach ($handles as $handle) {
foreach ($typeRemoveHandles as $removeHandle => $type) {
if ($type == 'simple' && strpos($handle, $removeHandle) !== false) {
$layout->removeHandle($handle);
} elseif ($type == 'regexp' && preg_match($removeHandle, $handle)) {
$layout->removeHandle($handle);
}
}
}
return $this;
}
observer.php
Il ne reste plus qu'à activer le module puis vider le cache. Et voici le nombre de clés de cache drastiquement réduit ! Vous pouvez adapter, en fonction de vos besoins, les valeurs définies dans le tableau "$typeRemoveHandles".
Dans un prochain article, nous verrons comment masquer les onglets "Paramètres d'affichage" et "Design" des catégories" en back office.