2011-12-06 27 views
10

Làm cách nào để vô hiệu hóa hoặc bỏ qua FPC cho một trang? Tôi không muốn sử dụng lỗ đục lỗ vì có một số khối trên trang mà tôi cần phải năng động và tôi muốn thay đổi một cấu hình/lớp để xác định rằng toàn bộ trang không nên được lưu trữ (tương tự như hành vi thanh toán).Tắt/Bỏ qua Bộ đệm ẩn Trang đầy đủ Magento trên một trang

Sự hiểu biết của tôi về FPC là nó không được sử dụng cho "người dùng phiên" (đăng nhập, thêm vào giỏ hàng, v.v ...). Tuy nhiên, tôi thấy FPC ảnh hưởng đến các trang khi người dùng đăng nhập. Nếu tôi tắt FPC, thì trang hoạt động như mong muốn.

Trả lời

17

Đây là giải pháp để vô hiệu hóa FPC cho một bộ điều khiển cụ thể (có thể được mở rộng đến hành động cụ thể).

Đầu tiên tạo một Observer để nghe trên các sự kiện 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'); 
    } 
} 

Sau đó, thêm dòng sau vào tập tin config.xml của bạn cho các mô-đun. Điều này đi vào phầ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> 

Bây giờ Magento sẽ dọn dẹp trang của bạn mỗi lần và bỏ qua FPC để yêu cầu.

+0

nếu tôi muốn sử dụng nó cho trang CMS thì sao? Tôi có thể sử dụng phần xml trong cập nhật xml của trang CMS nhưng tôi không knpw những gì để viết trong lớp học – Nickool

+0

Thx, tôi đào xung quanh mã của FPC, cho đến nay nhìn này là cách tiếp cận tốt nhất.Điểm vào thú vị có thể là 'Mage_PageCache_Model_Processor' nhưng nó không thể ghi đè, vì nó được khởi tạo bằng' mới ..' (ít nhất là ở đầu ... lần thứ hai sigleton được sử dụng ...) – WonderLand

+0

ai đó có thể cho tôi biết, Tôi nên viết gì thay vì "số nhận dạng duy nhất" của bạn? thx :) – Chester

1

FPC của Magento là một con thú phức tạp.

Tôi đã khắc phục điều này bằng cách sử dụng hướng dẫn sau:

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

Đây có thể là những gì bạn đang đề cập đến là "lỗ Dập", nhưng đó là cách duy nhất tôi đã tìm thấy để vượt qua nó .

+0

Vâng, đó là lỗ đục lỗ. Tôi đã thử làm theo các hướng dẫn từ liên kết, nhưng tôi tiếp tục nhận được: "Lỗi nghiêm trọng: Chức năng làm tổ tối đa mức '200' đạt được, hủy bỏ!" (số lượng không quan trọng. Tôi đã cố gắng tăng tối đa và nó chỉ giữ nó) khi FPC được kích hoạt. Hình như có một vòng lặp hoang dã ở đâu đó. Nếu tôi tắt FPC, mọi thứ sẽ hoạt động tốt trở lại. –

+1

Đó là lý do tại sao một câu trả lời liên kết là xấu. URL đã chết, câu trả lời của bạn là vô dụng. –

+0

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

4

Chỉ cần thực hiện đấu vật với Magento EE FPC không hiển thị thông điệp cốt lõi trên các trang CMS được lưu trong bộ nhớ cache. Tin nhắn cốt lõi hoạt động tốt trên danh mục bộ nhớ cache và trang sản phẩm nhưng không hoạt động trên trang CMS. Tôi tìm thấy bằng cách chuyển một tham số nhất định đến trang, bạn có thể buộc các trang đó được tạo thay vì máy chủ ra khỏi bộ nhớ cache.

tìm thấy trong: ứng dụng/code/core/Enterprise/chủBộ nhớ đệm/mẫu/Processor/default.php

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

Vì vậy, nó có thể tạo một liên kết mà có một chuỗi truy vấn HTTP GET rằng sẽ bỏ qua FPC.

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

này đã giúp giải quyết một vấn đề tôi đã có được một plugin đã được chuyển hướng đến một url giới thiệu với một thông điệp phiên nhưng nếu giới thiệu là một trang CMS được thông báo sẽ không được hiển thị cho đến khi một trang không CMS đã được xem .

+1

Các cửa hàng với hàng trăm nghìn sản phẩm sẽ bị tải nặng trên máy chủ nếu FPC bị bỏ qua, điều này khiến cho đây là một vectơ tiềm năng cho các cuộc tấn công DDOS. Có cách nào để ngăn chặn hành vi này không? – Alex

+0

Đồng ý điều này có thể là một vấn đề tiềm ẩn cho các danh mục lớn. Có vẻ như một mô-đun tùy chỉnh để thay đổi hành vi này sẽ là cách. –

+0

Nói chung khi xử lý các thông báo bộ nhớ đệm EE FPC, đó là vì bạn có thể đang cố gắng xuất chúng bằng getGroupedHtml(). Bạn chỉ cần sử dụng toHtml() để đảm bảo rằng Doanh nghiệp giữ chức năng nhấn để nhắn tin hoạt động chính xác. – wlvrn

Các vấn đề liên quan