Responder al comentario

Solucionar problema con la caché de Layered Navigation Indices de Magento

Magento layered navigation

En un proyecto realizado para una gran tienda online con más de
1000 relojes y joyas a la venta, tuvimos la necesidad de refrescar los
"Layered Navigation Indices"
para actualizar los rangos de precios que
Magento mostraba en los filtros de productos.

Al hacerlo nos dimos cuenta que el proceso de reconstrucción de los
índices no funcionaba correctamente ya que debido a la cantidad de
productos requería demasiado tiempo de ejecución y demasiada RAM.

La solución fue usar un código propuesto por los creadores de magento para reconstruir los índices y modificarlo ligeramente.

El proceso a seguir para reparar y recalcular los índices de layered navigation en magento es el siguiente:

1. Crear en la raíz del proyecto un fichero solucion.php con el siguiente código:

<?php
//################################
//# Magento Layered Nav QuickFix-b
//################################
//# @author: Chris McKee
//# @licence: GNU, basically do what you like but
//# leave my somewhere
//################################
ob_implicit_flush(true); //Saves having to flush manually
set_time_limit(0); //Set time limit to unlimited, though we shouldnt need to
ignore_user_abort();
 
require_once("app/Mage.php");
umask(0);
 
$total = 750; //How many records do we have (I'll make this automatic next time)
$hm = 40; // How many records to process at once?
 
$countFile = "cnt";
$store = null;
$count = null;
 
$store = Mage::app()->getStore('1');
 
//Create a count file if we dont have one
if((file_exists($countFile))&&(filesize($countFile)>1)){
$fh = fopen($countFile, 'r');
$count = fread($fh,filesize($countFile)) + 1;
fclose($fh);
}
else
{
$fh = fopen($countFile, 'w') or die("can't open file");
$count = 0;
fwrite($fh, $count);
fclose($fh);
}
 
//If we havent started counting yet clear cache.
if($count == 0)
{
Mage::app()->cleanCache();
//Clear the database flag from any previous "normal" indexes that failed
$flag = Mage::getModel('catalogindex/catalog_index_flag')->loadSelf();
if ($flag->getState() == Mage_CatalogIndex_Model_Catalog_Index_Flag::STATE_RUNNING) {
$flag->delete();
}
}
 
$max = $count+$hm;
 
for($i = $count; $i <= $max; $i++)
{
Mage::getSingleton('catalogindex/indexer')->plainReindex($i, null, $store);
echo("\n #$i#CURRENT MEMRY USAGE = ".memory_get_usage().";\n");
//Write where were up to
$fh = fopen($countFile, 'w') or die("can't open file");
fwrite($fh, $i);
fclose($fh);
sleep(1); //Pause a second, for less use u_sleep(microseconds)
}
 
?>

2) ejecutar el código vía sell script con la siguiente llamada:

$time php -q -f solucion.php

3) Revisar que los índices se han reconstruido y todo funciona correctamente.

Esperamos que éste artículo sea de utilidad y solucione éste problema a
quien lo tenga; si no es el caso, o tenéis algún otro problema no
dudéis en contactar con nosotros: Omitsis consulting SL, estaremos encantados de colaborar en vuestros proyectos.

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
CAPTCHA
Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
CAPTCHA de imagen
Enter the characters shown in the image.