Holepunching của tiêu đề trong cửa hàng magento


10

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?


Không chắc chắn, nhưng tôi nghĩ rằng câu hỏi này liên quan nhiều hơn đến Stack Overflow, nhưng không phải trang web này ...
Sergei Guk

2
Holepunching dường như được sử dụng ở đây theo nghĩa phi truyền thống, bạn có thể giải thích tính năng bạn đang cố gắng thực hiện mà không sử dụng thuật ngữ không?
Ralph Tice

1
Tại sao không thêm id giỏ hàng của khách hàng vào _getIdentifierkhố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ọ?
B00mer

@SergeiGuk Chà nó liên quan nhiều đến Magento
j0k

@RalphTice Tôi đang cố gắng thực hiện một chỉ báo giá trị giỏ hàng trong tiêu đề cho người dùng biết họ có bao nhiêu mặt hàng trong giỏ hàng của họ. Vì giá trị đó là khác nhau cho mỗi người dùng, tôi không muốn nó được lưu trữ.
Nirav Sheth

Câu trả lời:


3

Sử dụng Enterprise_PageCache_Model_Cookie::COOKIE_CARTlà cách đúng đắn để đi, nhưng bạn có thể cần thực hiện một số thay đổi.

Enterprise_PageCache_Model_Observer::registerQuoteChangeđược gọi trên mỗi lần lưu trích dẫn (bao gồm thay đổi số mục) và nó cũng được gọi trong ngữ cảnh trên Mage::app()để bạn có thể truy cập tất cả dữ liệu phiên. Ghi đè người quan sát này và thêm nhiều dữ liệu vào $this->_getCookie()->setObscuređể giá trị thay đổi bất cứ khi nào bạn cần.


Bất kỳ ví dụ nào bạn có thể sẵn sàng chia sẻ để làm điều này?
Nirav Sheth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.