Navegación por capas

entolium

Nuevo usuario
Hola,

Acabo de subir una tanda de productos nuevos mediante el dataflow, y la navegación por capas ha dejado de funcionar.

Tenía unos 600 artículos, y he subido unos 300.

De verdad que el temita da le navegación por capas me tiene frito :maldia:

He borrado todas las cachés, incluso vía ftp las carpetas dentro de var/cache, pero nada.:cabezazos:

Una ayuda, por compasión....
 

defcon2

Nuevo usuario
En la configuracion de la categoria, esta habilitado "Is Anchor" ¿?
 

entolium

Nuevo usuario
sí, está todo bien configurado. Lo he repasado todo mil veces.

Tengo una categoría con tres subcategorías. Todo iba bien hasta que importé los artículos en la tercera (estaba vacía). Sin tocar nada, ha dejado de funcionar.

Estoy harto de esto. Empecé una nueva web desde cero porque me pasó lo mismo en la primera, pero no estaba seguro de si había hecho alguna trastada, y de buenas a primeras peta :enfadado:

He borrado todos los últimos artículos que he subido, sus atributos y sus grupos de atributos, para dejarlo como antes de que petara, y nada.

Tiene que haber algo en la BD que está mal, pero no sé ni por dónde empezar.
 

entolium

Nuevo usuario
Más datos.

He creado una nueva tienda desde 0, y he ido haciendo un backup de la base de datos en cada cambio que he hecho.

- He importado unos 600 productos y todo ok.
- He importado 300 (total 900) más y de nuevo el error. He resturado el backup.
- He importado 50 (total 650) y todo ok.
- He importado 100 y error. He restaurado el backup de 650.
- He importado 50 (total 700) y la navegación por capas funciona, pero solo con el precio, el resto de atributos no aparecen :sorprendido:

Resumiendo, conforme voy aumentando el número de artículos, se va "cascando" la navegación por capas.

¿Alguien le encuentra sentido a esto y podría orientarme?
 

Xarlie

Super Moderador
Miembro del equipo
En mi opinión creo que te estas dejando por algún sitio los índices necesarios en la base de datos y por eso te peta todo. Es algo extraño, pero yo creo que los tiros andan por esos lares...
 

entolium

Nuevo usuario
Añadir que cuando restauro un backup de la base de datos, antes elimino todas las tablas existentes.
El volcado crea todas las tablas e inserta los datos.

No estoy tocando ningún campo de ninguna tabla. Todo lo hago desde el backend

Si a todo el mundo le funciona bien Magento....¿Por qué a mí no si hago lo mismo?
 

Xarlie

Super Moderador
Miembro del equipo
Me refiero a que algún campo no está correctamente formado y por lo tanto la relación de las tablas entre sí (son tablas innodb) dejan de funcionar...
 

entolium

Nuevo usuario
He estado investigando por el foro oficial de Magento, y por fin he encontrado más casos como el mío (casi me alegro)

El problema parece estar en el proceso de indexado de la navegación por capas.

En la pantalla de "Cache management", hay 2 botones junto a "Layered Navigation Indices": "Running...Kill" y "Refresh Now".
Por lo visto esto sirve para regenerar el indice, pero al pulsar "Running...Kill" me aparece el mensaje "Layered Navigation process queued to be killed", pero no ocurre nada.
Ha habido un momento en que el texto del botón cambió a "Queued...Cancel" (creo), y la navegación por capas creo volvió a funcionar. No sé si esto es lo que debe ocurrir (supongo que sí).

Al pulsar "Refresh Now" y aceptar el mensaje, me aparece una pantalla en blanco (...index.php/admin/system_cache/save/)...¿?

Agradecería que alguien me comentase cómo funcionan estos botones y qué debería ocurrir al pulsarlos, para saber si mi error está aquí.
 

entolium

Nuevo usuario
Hola,

Por fin he encontrado la solucón a mi problema.

Por lo visto, la configuración de mi hosting está afectando a la reindexación de la navegación por capas impidiendo que se ejecute o que se ejecute correctamente, no lo sé.
Como mi hosting es compartido, pues no tocan nada y ahí me pudra (Redcoruna, por si a alguien le interesa).


He dado con un script y lo he tuneado para reindexar "manualmente" un rango de productos. Parece que así el tiempo empleado está dentro del límite y funciona a las mil maravillas:

PHP:
<?php
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
umask(0);

// clean overall cache
Mage::app()->cleanCache();
echo "Cache Cleaned!<br/>\n";

$productos=array();
for ($a=501;$a<=1000;$a++)
{
array_push($productos,$a);
}
Mage::getSingleton('catalogindex/indexer')->plainReindex($productos, null,null);
echo 'Layered Navigation Indices was refreshed succesfuly<br>';
?>
En el código, he reindexado los productos del 501 al 1000.

Antes de ejecutar el código, hay que eliminar todos los registros de la tabla "core_flag", porque si ya hay un proceso en ejecución (reflejado en esta tabla), el código no se ejecuta.

Espero que a alguien le sirva y le evite la soberana currada que me ha costado a mí.

Otro obstáculo superado en esta carrera de obstaculos :bailando::bailando:
 

multivac

Nuevo usuario
Hola,

estoy con el mismo problema. Pero no se como aplicar el script. ¿Alguna pista?¿con el cron de magento?
¿tengo que meter el código dentro de cron.php?
gracias

Editado:
Pues no. Creas un archivo "limpiarcache.php" y lo subes al directorio raiz en el servidor y lo aplicas cargandolo con el navegador. www.dominio.com/limpiarcache.php

El caso es que con esto no he conseguido regenerar el índice. Mi quebradero de cabeza es que no veo el precio en los productos configurables y solo los puedo ver cuando le aplico un "refresh Now" el problema es que el servidor solo me permite realizar procesos de menos de 30sg. Por suerte he encontrado otro script que reconstruye el índice en intervalos de 50 productos recargando la página varias veces.
Insertar CODE, HTML o PHP:
<?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 = 2000; //How many records do we have (I'll make this automatic next time)
$hm = 50; // 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)>0)){
        $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</br>");
    //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)
}
 
?>

<script>
<!--

/*
Auto Refresh Page with Time script
By JavaScript Kit (javascriptkit.com)
Over 200+ free scripts here!
*/

//enter refresh time in "minutes:seconds" Minutes should range from 0 to inifinity. Seconds should range from 0 to 59
var limit="0:03"

if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
[removed].reload()
else{ 
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit`
if (curmin!=0)
curtime=curmin+" minutes and "+cursec+" seconds left until page refresh!"
else
curtime=cursec+" seconds left until page refresh!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}

window.onload=beginrefresh
//-->
</script>
Cambié sleep(1); a sleep(0);
con este cambio me lo hace en lotes de 50 recargando la página (no se por qué pero funciona)

Fuente

un saludo
 
Última edición:

multivac

Nuevo usuario
:triste:
me vuelve a pasar lo mismo. Me desaparecen de los productos agrupados el texto "comenzando desde" y eso que limpio la cache.

no entiendo nada............:cabezazos:
 
Arriba