2011-12-06 9 views
10

Jak wyłączyć lub pominąć FPC dla pojedynczej strony? Nie chcę używać dziurkowania, ponieważ na stronie znajduje się kilka bloków, które muszę mieć dynamiczne i wolałbym zmodyfikować jedną konfigurację/klasę, aby określić, że cała strona nie powinna być buforowana (podobnie do zachowania kasy).Wyłącz/Wyłącz Magento Pełna pamięć podręczna na jednej stronie

Moje zrozumienie ZKP było takie, że nie był on używany dla "użytkowników sesji" (zalogowanych, dodanych do koszyka itp.). Jednak widzę, że FPC wpływa na strony, gdy użytkownik jest zalogowany. Jeśli wyłączyłem FPC, strona działa zgodnie z oczekiwaniami.

Odpowiedz

17

Oto rozwiązanie do wyłączania FPC dla konkretnego kontrolera (może być również rozszerzony na określone działanie).

Najpierw utwórz obserwatora słuchać na razie 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'); 
    } 
} 

Następnie dodać następujące do pliku config.xml dla modułu. To idzie w sekcji <frontend>:

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

Teraz Magento będzie służyć swoją stronę za każdym razem, Bypass FPC dla żądania.

+0

co jeśli chcę go użyć na stronie CMS? Mogę użyć części xml w aktualizacji xml na stronie CMS, ale nie wiem, co napisać w tagu klasy – Nickool

+0

Thx, wykopałem się wokół kodu FPC, jak na razie wygląda to najlepiej.Interesującym punktem wejścia może być 'Mage_PageCache_Model_Processor' ale nie można go przesłonić, ponieważ jest on inicjalizowany przez' new ..' (przynajmniej na początku ... po raz drugi sigleton jest używany ...) – WonderLand

+0

czy ktoś może mi powiedzieć, co powinienem napisać zamiast "Twojego unikalnego identyfikatora"? thx :) – Chester

1

FPC Magento to skomplikowana bestia.

mam przezwyciężyć stosując następujące samouczek:

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

To może być to, co masz na myśli jako „dziurkowanie”, ale jest to jedyny sposób znalazłem go pokonać .

+0

Tak, to jest dziurkowanie. Próbowałem postępować zgodnie z instrukcjami z linku, ale otrzymuję: "Błąd krytyczny: osiągnięto maksymalny poziom zagnieżdżenia funkcji równy" 200 ", przerywanie!" (liczba nie ma znaczenia. Próbowałem zwiększać maksimum i po prostu kontynuuję uderzenie), gdy FPC jest włączone. Wygląda na to, że gdzieś jest gdzieś w szubienicy. Jeśli wyłączyłem FPC, wszystko znowu działa poprawnie. –

+1

Dlatego odpowiedzi pojedynczego łącza są złe. URL jest martwy, twoja odpowiedź jest bezużyteczna. –

+0

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

4

Właśnie skończyły się zapasy z Magento EE FPC, które nie wyświetlają podstawowych wiadomości na buforowanych stronach CMS. Podstawowe wiadomości działały dobrze na stronach kategorii podręcznej i stronach produktów, ale nie na stronach CMS. Znalazłem, przekazując pewien parametr do strony, która może wymusić wygenerowanie tych stron zamiast serwera poza pamięcią podręczną.

znaleźć w: app/code/core/Enterprise/Obsługi KlientaSchowek/model/Procesor/default.php

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

Więc to jest możliwe, aby związek, który ma łańcuch zapytania HTTP GET, które omijają FPC.

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

To pomogło rozwiązać problem miałem mający zostały plugin został przekierowanie do odsyłający URL z komunikatem sesji, ale jeśli wywołującej była strona CMS komunikat nie będzie wyświetlany dopóki strona non-CMS był oglądany .

+1

Sklepy z setkami tysięcy produktów będą obciążone dużymi obciążeniami serwera, jeśli obejdzie się kontrolę FPC, co powoduje, że jest to potencjalny wektor do ataków DDoS. Czy istnieje sposób, aby temu zapobiec? – Alex

+0

Zgadzam się, że to może być potencjalny problem w przypadku dużych katalogów. Wygląda na to, że niestandardowy moduł zmieniający to zachowanie byłby właściwy. –

+0

Generalnie, gdy mamy do czynienia z buforowaniem EE FPC, to dlatego, że prawdopodobnie próbujesz wyprowadzić je za pomocą getGroupedHtml(). Musisz użyć just toHtml(), aby upewnić się, że Enterprise przytrzymuje wykrawanie dla wiadomości działa poprawnie. – wlvrn

Powiązane problemy