[caching] 전체 페이지 캐싱이 켜진 상태에서 제품 페이지에 동적 블록을 포함하려면 어떻게합니까?


1 Answers

일반적으로 전체 페이지 캐시에 저장하려는 페이지를 개인 설정하려는 경우 사용할 수있는 두 가지 방법이 있습니다.

  1. 역방향 프록시에서 지원하는 경우 ESI (Edge Side Includes)를 사용하여 템플릿을 적절하게 마크 업할 수 있습니다. ESI를 사용하면 생성 된 HTML에 개인화 된 컨텐츠가있는 마커를 삽입 할 수 있습니다. 그러면 프록시는 필요할 때 앱 서버의 적절한 컨트롤러 경로에서 개인화 된 컨텐츠 만 요청합니다. Varnish 사용 중이면 ESI를 사용할 수 있습니다. Magento의 Lightspeed 확장 기능은 " Hole Punching" 기능과 비슷한 기능을합니다.
  2. ESI 또는 구멍 펀칭을 사용할 수없는 경우 다른 옵션은 기본 페이지가 전체 페이지 캐시에 캐시되도록하고 약간의 자바 스크립트를 사용하여 별도의 Ajax 요청을 작성하고 필요한 정보를 가져 오는 것입니다.
Question

제품 페이지에 동적 블록을 추가하고 싶습니다. 문제는 제품 페이지에 전체 페이지 캐싱이 있고 속도 문제로 인해 페이지를 캐싱 할 수 없다는 것입니다. 로그인 한 사용자의 계정을 기반으로 각 제품 페이지에 다른 정보를 표시하려고하며 제품마다 다릅니다.

자체 캐시가있는 별도의 블록을 만들었지 만 이전 제품 페이지와 동일한 블록을 표시합니다. 캐시 방법을 변경하여 이전 제품 페이지의 캐시를 저장하지 않으려 고합니다.

처음 몇 번 제품 페이지로 이동하지만 갑자기 Magento 오류 페이지가 표시되기 시작합니다. " http://www.mycompany.com/productpage.html 을 검색하는 동안 웹 사이트에서 오류가 발생했습니다. 다운되거나 유지 보수가 잘못되거나 잘못 구성되었습니다. "

여기까지 제가 한 일이 있습니다. app / code / local / MyCompany / MyModule / PageCache / etc / config.xml을 작성하여 MyCompany_PageCache_Model을 추가했습니다.

그런 다음 app / code / local / MyCompany / MyModule / PageCache / Model / Container / MyFile.php에서 다음 함수를 사용하여 캐싱을 제어하는 ​​파일을 만들었습니다.

protected function _getCacheId()
{
    return 'CONSTANT_CACHE' . md5($this->_placeholder->getAttribute('cache_id'));
}

protected function _saveCache($data, $id, $tags = array(), $lifetime = null)
{
    return false;
}

protected function _renderBlock()
{
    $blockClass = $this->_placeholder->getAttribute('block');
    $template = $this->_placeholder->getAttribute('template');

    $block = new $blockClass;
    $block->setTemplate($template);
    $block->setLayout(Mage::app()->getLayout());
    return $block->toHtml();
}

나는 또한 CONSTANT_CACHE에 대한 내 자리 표시 자와 함께 Catalog / etc 아래에 cache.xml을 만들었습니다.

위의 구문이 올바르지 않습니까? 아니면 더 쉬운 방법이 있습니까?




다음을 수행 할 필요가 없습니다.

  $info['current_product_id'] = Mage::registry('current_product')->getId();

이 방법을 사용할 수 있습니다 :

$this->_getProductId()

Enterprise_PageCache_Model_Container_Abstract에서 구현 됨




Related