Tengo un problema que parece estar relacionado con el almacenamiento en caché de bloques estáticos de CMS.
Tengo una página de cms y dentro de esa página estoy representando una serie de bloques estáticos de cms. Una versión simplificada del contenido de la página CMS se ve así:
<div class="cms-block-1">{{block type="cms/block" block_id="banner_home"}}</div>
<div class="cms-block-2">{{block type="cms/block" block_id="promo_home_1_1"}}</div>
<div class="cms-block-3">{{block type="cms/block" block_id="promo_home_1_2"}}</div>
<div class="cms-block-4">{{block type="cms/block" block_id="promo_home_2_1"}}</div>
<div class="cms-block-5">{{block type="cms/block" block_id="promo_home_2_2"}}</div>
<div class="cms-block-6">{{block type="cms/block" block_id="promo_home_2_3"}}</div>
<div class="cms-block-7">{{block type="cms/block" block_id="promo_home_3_1"}}</div>
<div class="cms-block-8">{{block type="cms/block" block_id="promo_home_3_2"}}</div>
La página se carga como se esperaba inmediatamente después de que se borra el caché de bloques, esa página se ve así:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_2_1 content</div>
<div class="cms-block-5">promo_home_2_2 content</div>
<div class="cms-block-6">promo_home_2_3 content</div>
<div class="cms-block-7">promo_home_3_1 content</div>
<div class="cms-block-8">promo_home_3_1 content</div>
Sin embargo, después de la carga inicial de la página, cada página posterior carga el contenido es incorrecto. Se parece a esto:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_1_1 content</div>
<div class="cms-block-5">promo_home_1_2 content</div>
<div class="cms-block-6">promo_home_2_1 content</div>
<div class="cms-block-7">promo_home_2_2 content</div>
<div class="cms-block-8">promo_home_2_3 content</div>
En el segundo ejemplo, puede ver que las dos primeras promociones son correctas, sin embargo, todo lo que se muestra a continuación muestra el contenido incorrecto para block_id. Además, el bloque promo_home_1_1 y promo_home_1_2 se representan dos veces y promo_home_3_1 y promo_home_3_2 nunca se representan. Es como la asignación entre block_id y su contenido de bloque estático asociado se está mezclando de alguna manera. Esto está relacionado con el almacenamiento en caché, ya que si el bloque de caché no está habilitado, ya no veo el problema.
Además, probablemente valga la pena señalar que esta página solía funcionar en EE 1.13, sin embargo, después de actualizar a EE 1.14.2, este problema comenzó a ocurrir.
Me doy cuenta de que es bastante difícil decir qué está mal sin saber qué más está sucediendo en el sistema, pero espero que alguien pueda darme al menos algo más de dirección aquí, ya que me estoy quedando sin ideas.
Actualizar:
También probé esto con widgets, por ejemplo
<div class="cms-block-1">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="63"}}</div>
<div class="cms-block-2">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="64"}}</div>
<div class="cms-block-3">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="65"}}</div>
En este caso, los 3 bloques devolvieron el mismo contenido aunque los identificadores apuntan a diferentes bloques en la base de datos. Cuando se borra el caché, el bloque devuelto a veces cambiará, pero los tres widgets aún tendrán el mismo contenido.
fuente
Respuestas:
Ok, he encontrado la causa de este problema y parece ser un problema en core magento.
Hay un nuevo método _construct agregado a Mage_Cms_Block_Block en magento 1.14.2 que contiene el siguiente código.
Esto activa efectivamente el almacenamiento en caché para bloques cms. No se establece ninguna clave de caché, por lo que recurre a Mage_Core_Block_Abstract :: getCacheKeyInfo, que utiliza el nombre del bloque en el diseño. En este caso, en realidad no estamos utilizando un archivo xml de diseño para agregar el bloque y no hay un conjunto de nombres. Magento parece tratar de manejar esto estableciendo algo como ANONYMOUS_78 como nombre. Sin embargo, por alguna razón, esto no parece estar funcionando al 100%, por lo tanto, los duplicados que estaba viendo.
Mi solución fue anular la clase Mage_Cms_Block_Block en mi propia extensión y agregar un nuevo método para establecer la clave de caché explícitamente en la identificación del bloque en lugar de un valor asignado. La clase se ve así:
Esto parece haber resuelto el problema.
Actualizar:
Parece que este mismo problema también existe en CE 1.9.2
fuente
Para clientes de Magento EE, solicite el parche SUPEE-5874 al equipo de soporte de Magento Enterprise.
Actualizará dos archivos
No puedo publicar el parche real de Magento ya que es de su propiedad.
fuente
Aquí me alegra que Magento ahora también esté almacenando en caché bloques estáticos. Dado que la versión actualizada actual incluye este extraño problema debido al almacenamiento en caché de bloques estáticos, puede usar mi módulo de forma totalmente gratuita.
Esta extensión se crea para mejorar el almacenamiento en caché de bloques estáticos. También tiene en cuenta si el sitio está protegido o no. Además, la extensión no tiene ninguna reescritura central, lo que hace que este módulo sea aún mejor.
Aquí tiene .
Para una mejor visión general de la extensión, puede consultar este hilo .
fuente
Hemos proporcionado un parche para CE, que resuelve este problema. Dado que EE se basa en CE, esto también podría aplicarse.
Puede descargar esta ruta desde mi esencia: https://gist.github.com/tux-rampage/77b286f7973336877f7b
Descargue la esencia, descomprímalo y ejecute el siguiente comando en su raíz de magento:
¡Pruebe esto en un entorno de ensayo antes de aplicarlo en un sistema en vivo!
fuente