Tôi đã triển khai tiêu đề trong magento và mặc dù tôi đã làm cho nó hoạt động trên cơ sở của mỗi khách hàng, tôi cần khả năng để tiến sâu hơn một cấp này bằng cách làm cho nó hoạt động với số lượng mục hàng khác.
Đây là mã của tôi.
class AD_PageCache_Model_Container_Header extends Enterprise_PageCache_Model_Container_Abstract {
protected function _getIdentifier() {
return $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER, '');
}
// public function getCacheKeyInfo() {
// $info = parent::getCacheKeyInfo();
// die('boo');
// $info['cart_count'] = Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
// return $info;
// }
protected function _getCacheId() {
//return 'CONTAINER_HEADER_' . md5($this->_placeholder->getAttribute('cache_id') . $this->_placeholder->getAttribute('cart_count') ) . '_' . $this->_getIdentifier();
return 'CONTAINER_HEADER_' . md5( $this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier() );
}
protected function _renderBlock() {
$blockClass = $this->_placeholder->getAttribute('block');
$template = $this->_placeholder->getAttribute('template');
$block = new $blockClass;
$block->setTemplate($template);
return $block->toHtml();
}
}
Sự hiểu biết của tôi từ những gì tôi đã đọc từ các chủ đề linh hoạt trên Magento là ứng dụng Mage không được khởi tạo khi bộ đệm FPC đang phục vụ yêu cầu, vì vậy về cơ bản, phương pháp thêm thuộc tính giữ chỗ không thể hoạt động, vì
Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
sẽ không làm việc, phải không?
Và mặc dù nó phải như thế nào, nhưng dường như nó không chạy, giống như tôi đã die()
gọi một cuộc gọi trong đó nhưng không có gì xảy ra.
Vì vậy, những gì tôi đang thiếu? Và làm cách nào tôi có thể truy xuất các mục trong giỏ hàng để có thể sử dụng nó để xây dựng ID bộ đệm?
Tiến độ: Tôi tìm thấy
Enterprise_PageCache_Model_Cookie::COOKIE_CART
nhưng điều này chỉ thay đổi một lần khi cập nhật giỏ hàng. Sau đó nó vẫn như cũ. Điều này thật kỳ lạ, cảm giác này giống như giải pháp nhưng hành vi của nó lại nói khác.
Tôi cũng không thể tìm thấy các mặt hàng giỏ hàng trong phiên. Vì vậy, cách duy nhất tôi hiện đang thấy để làm điều này là lưu số lượng giỏ hàng trong phiên bất cứ khi nào nó cập nhật và sau đó sử dụng số đó _getIdentifier()
.
Tôi thấy rằng các nhà quan sát không nhất quán cho giỏ hàng. Ngoài ra, cập nhật các sự kiện được gửi đi nhưng để loại bỏ, thì không. Vì vậy, tôi đoán rằng tôi có thể thêm người quan sát của mình để cập nhật giá của trích dẫn bằng cách nào đó, nếu điều đó phù hợp trong việc có người quan sát?
Ngoài ra, tôi đã đọc thay đổi toàn bộ bộ đệm ẩn trang trên bộ đệm (trích dẫn) nhưng nó xử lý bằng cách sử dụng
Enterprise_PageCache_Model_Cookie::COOKIE_CART
trong trường hợp của tôi không hoạt động tốt, mặc dù tôi nghĩ vấn đề nằm ở bên trong nó. Cái gì / như thế nào? Tôi không chắc.
Ngoài ra, phiên bản EE hiện tại mà chúng tôi đang chạy thậm chí không có thư mục Nâng cao
Model/Container
. tôi đang dùngEE 1.10.1.1
Bất kỳ đề xuất?
_getIdentifier
khối để duy nhất cho giỏ hàng của khách hàng, hoặc thậm chí số lượng mặt hàng trong giỏ hàng của họ?