การเจาะรูส่วนหัวในร้านวีโอไอพี


10

ฉันใช้การเจาะรูส่วนหัวในวีโอไอพีและแม้ว่าฉันจะทำให้มันทำงานบนพื้นฐานของลูกค้าต่อฉันต้องการความสามารถในการใช้ระดับนี้ลึกลงไปหนึ่งระดับโดยการทำให้มันทำงานกับสินค้าในตะกร้าสินค้าต่าง ๆ ด้วย

นี่คือรหัสของฉัน

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

}

ความเข้าใจของฉันจากสิ่งที่ฉันได้รับการอ่านจากการทำเกลียวในวีโอไอพีคือแอป Mage ไม่เริ่มต้นเมื่อแคช FPC ให้บริการตามคำขอดังนั้นโดยทั่วไปวิธีการเพิ่มแอตทริบิวต์ตัวยึดจึงไม่สามารถทำงานได้เนื่องจาก

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

จะไม่ทำงานใช่ไหม

และถึงแม้ว่ามันจะเป็นไปได้อย่างไร แต่มันก็ไม่ได้ดูเหมือนว่าจะทำงานได้ทั้งหมดเช่นฉันdie()โทรเข้าที่นั่น แต่ไม่มีอะไรเกิดขึ้น

แล้วฉันจะพลาดอะไร และฉันจะเรียกรายการรถเข็นนับได้อย่างไรเพื่อที่จะสามารถใช้สร้างรหัสแคชได้

ความคืบหน้า: ฉันพบ

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
ทำไมไม่ผนวกรหัสรถเข็นของลูกค้าไว้ด้วย_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.