2011-12-06 10 views
10

¿Cómo puedo deshabilitar o eludir FPC para una sola página? No quiero usar agujeros, ya que hay varios bloques en la página que necesito ser dinámico y prefiero modificar una configuración/clase para especificar que toda la página no debe almacenarse en caché (similar al comportamiento de pago))Deshabilitar/omitir caché de página completa de Magento en una sola página

Mi comprensión de FPC era que no se usaba para "usuarios de la sesión" (iniciada, agregada al carrito, etc.). Sin embargo, veo que FPC afecta a las páginas cuando un usuario inicia sesión. Si desactivo FPC, la página funciona como lo desee.

Respuesta

17

Aquí está la solución para deshabilitar FPC para un controlador específico (podría extenderse a una acción específica también).

En primer lugar crear un Observador para escuchar en el evento controller_action_predispatch:

public function processPreDispatch(Varien_Event_Observer $observer) 
{ 
    $action = $observer->getEvent()->getControllerAction(); 

    // Check to see if $action is a Product controller 
    if ($action instanceof Mage_Catalog_ProductController) { 
     $cache = Mage::app()->getCacheInstance(); 

     // Tell Magento to 'ban' the use of FPC for this request 
     $cache->banUse('full_page'); 
    } 
} 

A continuación, añada lo siguiente a su archivo config.xml para el módulo. Esto va en la sección <frontend>:

<events> 
    <controller_action_predispatch> 
     <observers> 
      <YOUR_UNIQUE_IDENTIFIER> 
       <class>YOURMODULE/observer</class> 
       <method>processPreDispatch</method> 
      </YOUR_UNIQUE_IDENTIFIER> 
     </observers> 
    </controller_action_predispatch> 
</events> 

Ahora Magento servirá su página cada vez y de derivación FPC para la solicitud.

+0

¿Qué sucede si quiero usarlo para la página CMS? Puedo usar la parte xml en la actualización xml de la página CMS, pero no sé qué escribir en la etiqueta de clase – Nickool

+0

Thx, busqué el código de FPC, hasta ahora este parece el mejor enfoque.El punto de entrada interesante podría ser 'Mage_PageCache_Model_Processor' pero no puede anularse, porque se inicializa con' new ..' (al menos al principio ... la segunda vez que se usa un siglet ...) – WonderLand

+0

alguien puede decirme, ¿Qué debo escribir en lugar de "su identificador único"? thx :) – Chester

1

Magento's FPC es una bestia complicada.

que he superado esta utilizando el siguiente tutorial:

http://oggettoweb.com/blog/customizations-compatible-magento-full-page-cache/

Esto podría ser lo que usted se refiere como "Perforación", pero es la única forma que he encontrado para superarla .

+0

Sí, eso es perforar. Intenté seguir las instrucciones del enlace, pero sigo recibiendo: "Error fatal: se alcanzó el nivel máximo de anidación de la función de '200', abortando!" (El número no importa. He intentado aumentar el máximo y simplemente sigue golpeándolo) cuando FPC está habilitado. Parece que hay un bucle perdido en alguna parte. Si apago FPC, todo vuelve a funcionar bien. –

+1

Es por eso que las respuestas de enlace único son malas. La URL está muerta, tu respuesta es inútil. –

+0

https://web.archive.org/web/20140218205557/http://oggettoweb.com/blog/customizations-compatible-magento-full-page-cache/ –

4

Acabo de terminar de luchar con Magento EE FPC que no muestra los mensajes principales en las páginas CMS en caché. Los mensajes principales funcionaban bien en la categoría de caché y en las páginas de productos, pero no en las páginas de CMS. Encontré pasando cierto parámetro a una página que puede forzar que se generen las páginas en lugar de que el servidor salga de la memoria caché.

encontrado en: app/código/core/Empresa/pagecache/modelo/Procesador/default.php

/** 
* Disable cache for url with next GET params 
* 
* @var array 
*/ 
protected $_noCacheGetParams = array('___store', '___from_store'); 

Por lo que es posible hacer un enlace que tiene una cadena de consulta HTTP GET que pasar por alto la FPC.

http://www.domain.com/?___store 

Esto ayudó a resolver un problema que tenía era un plugin se redirige a una URL de referencia con un mensaje de sesión, pero si el remitente era una página de CMS el mensaje no se mostrará hasta que una página no CMS fue visto .

+1

Las tiendas con cientos de miles de productos experimentarán grandes cargas de servidor si se pasa por alto el FPC, lo que lo convierte en un vector potencial para los ataques DDOS. ¿Hay alguna forma de prevenir este comportamiento? – Alex

+0

Estoy de acuerdo con que esto podría ser un problema potencial para catálogos grandes. Parece que un módulo personalizado para alterar este comportamiento sería el camino. –

+0

En general, cuando se trata de mensajes de caché EE FPC es porque probablemente está tratando de darles salida con getGroupedHtml(). Debe usar solo toHtml() para asegurarse de que Enterprise sostenga que perforar para que la mensajería funcione correctamente. – wlvrn

Cuestiones relacionadas