마 젠토 스토어에서 헤더의 홀 펀칭


10

magento에서 헤더의 구멍 뚫기를 구현했으며 고객별로 작업을 수행했지만 diff 카트 항목 수에서도 작동하도록 하여이 한 수준 더 깊이 들어갈 수있는 기능이 필요합니다.

여기 내 코드가 있습니다.

    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();
    }

}

Magento의 홀 펀칭 스레드에서 읽은 내용을 이해하면 FPC 캐시가 요청을 처리 할 때 Mage 앱이 초기화되지 않으므로 기본적으로 자리 표시 자 속성을 추가하는 방법이 작동하지 않습니다.

Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();

작동하지 않습니까?

그리고 그것이 어떻게되어야하더라도, 내가 die()전화를 걸었지만 아무 일도 없었던 것처럼 전혀 실행되지 않는 것 같습니다 .

그래서 내가 무엇을 놓치고 있습니까? 카트 항목 수를 검색하여 캐시 ID를 작성하는 데 사용할 수있는 방법은 무엇입니까?

진행 : 나는 찾았다

Enterprise_PageCache_Model_Cookie::COOKIE_CART

카트 업데이트시 한 번만 변경됩니다. 그 후에는 그대로 유지됩니다. 이것은 이상합니다. 솔루션처럼 느껴지지만 그 행동은 그렇지 않습니다.

장바구니 항목도 세션에서 찾을 수 없습니다. 따라서 현재이 작업을 수행하는 유일한 방법은 업데이트 할 때마다 카트 수량을 세션에 저장 한 다음에 사용하는 것입니다 _getIdentifier().

관찰자가 장바구니와 일치하지 않는 것을 발견했습니다. 또한 업데이트는 이벤트가 전달되지만 제거를 위해 전달되지 않습니다. 그래서 나는 관찰자를 갖는 것과 일관성이 있다면 어떻게 든 견적의 가격 업데이트에 내 관찰자를 추가 할 수 있다고 생각합니까?

또한 장바구니 (따옴표) 변경시 전체 페이지 캐시 무효화를 읽었 지만 사용하여 처리하지 않습니다.

Enterprise_PageCache_Model_Cookie::COOKIE_CART

문제가 그 안에 있다고 생각하지만 내 경우에는 잘 작동하지 않습니다. 무엇 / 어떻게? 확실하지 않습니다.

또한 현재 실행중인 EE의 현재 버전에는 고급 폴더가 없습니다 Model/Container. 나는 사용하고있다EE 1.10.1.1

어떤 제안?


확실하지 않지만이 질문은 Stack Overflow와 관련이 있지만이 사이트와는 관련이 없다고 생각합니다.
Sergei Guk

2
Holepunching은 전통적인 의미가 아닌 여기에서 사용되는 것 같습니다. 전문 용어를 사용하지 않고 구현하려는 기능을 설명 할 수 있습니까?
Ralph Tice

1
고객 장바구니 ID를 추가하여 _getIdentifier블록이 고객 장바구니 또는 고유 한 장바구니의 항목 수에 고유하지 않습니까?
B00MER

@SergeiGuk 글쎄 그것은 Magento와 밀접한 관련이 있습니다
j0k

@RalphTice 장바구니에 표시되는 항목 수를 사용자에게 표시하는 장바구니 값 표시기를 헤더에 구현하려고합니다. 그 값은 사용자마다 다르므로 캐시하지 않으려 고합니다.
Nirav Sheth

답변:


3

사용하는 Enterprise_PageCache_Model_Cookie::COOKIE_CART것이 올바른 방법이지만 일부 변경이 필요할 수 있습니다.

Enterprise_PageCache_Model_Observer::registerQuoteChange모든 견적 저장시 (항목 번호 변경 포함) 호출되고 컨텍스트에서도 호출 Mage::app()되므로 모든 세션 데이터에 액세스 할 수 있습니다. 이 관찰자를 덮어 쓰고 더 많은 데이터를 추가 $this->_getCookie()->setObscure하면 필요할 때마다 값이 변경됩니다.


이 일을 할 의향이 있습니까?
Nirav Sheth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.