การแบ่งหน้าและการเรียงลำดับไม่ทำงาน


10

สำหรับโมดูลที่กำหนดเองของฉันฉันได้รับผลิตภัณฑ์จากผู้ผลิต สำหรับเทมเพลตฉันได้คัดลอกlist.phtmlแล้ว

ในการแบ่งหน้าไฟล์เทมเพลตจะปรากฏขึ้น แต่จะแสดงผลิตภัณฑ์ทั้งหมดแทนที่จะเป็นขีด จำกัด ที่เลือกต่อหน้า การเรียงลำดับไม่ทำงานเช่นกัน

ฉันจะทำให้มันทำงานได้อย่างไร?

มันเป็นไฟล์บล็อกของฉัน:

protected function _getProductCollection() 
{
    if (is_null($this->_productCollection)) {
        $layer = $this->getLayer();
        $brand_id = $this->getRequest()->getParam('id');
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('*');
        $collection->addFieldToFilter(array(
            array('attribute' => 'manufacturer', 'eq' => $brand_id)
        ));
    }

    return $collection;
}

คำตอบ:


2

ใช้ตัวอย่างด้านล่างเพื่อเพิ่มการแบ่งหน้าและการเรียงลำดับในคอลเล็กชันที่กำหนดเองของคุณ สำหรับทุกรายการคอลเลกชันที่กำหนดเองคุณต้องสร้างเพจเจอร์แถบเครื่องมือที่กำหนดเองเช่นกัน

    $itemsLimit         =   $_GET["limit"] ? $_GET["limit"] : Mage::getStoreConfig('catalog/frontend/grid_per_page');   //Set items to show per page
    $currPage               =   $_GET["p"] ? $_GET["p"] : 1;                //Set current page      
   /*   Set Pagination for Custom Loaded Collection */                              
    $toolbar = Mage::getBlockSingleton('catalog/product_list')->getToolbarBlock();
    $toolbar->setCollection($_productCollection);

    /*  Set Pager   */
    $pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
    $pager->setAvailableLimit(array($itemsLimit=>$itemsLimit));
    $pager->setCollection($_productCollection);
    $toolbar->setChild('product_list_toolbar_pager', $pager);
    $toolbar->setData('_current_limit', $itemsLimit);

หลังจากนี้ให้แทนที่

$this->getToolbarHtml(); by $toolbar->toHtml(); 

เพื่อแสดงเพจเจอร์ด้านล่างและแถบเครื่องมือการเรียงลำดับบนสุด

สำหรับการเรียงลำดับให้ทำก่อนโหลดคอลเล็กชัน:

$_productCollection->addAttributeToSort($_GET["order"], $_GET["dir"]');

ฉันหวังว่านี่จะช่วยแก้ปัญหาของคุณ


นอกจากนี้คุณสามารถเพิ่ม $ _productCollection-> setPageSize ($ itemsLimit) -> setCurPage ($ currPage);
Ahsan Horani

1

คุณต้องใช้ตัวกรองต่อไปนี้ด้วย:

    ->addAttributeToSort($_GET['order'],$_GET['dir'] )
    ->setPageSize($limit)
    ->setCurPage($_GET['p'])

ดังนั้นรหัสที่สมบูรณ์ของคุณจะกลายเป็น:

    protected function _getProductCollection() 
    {
        if (is_null($this->_productCollection)) 
        {
            $layer = $this->getLayer();
            $brand_id = $this->getRequest()->getParam('id');
            $collection = Mage::getModel('catalog/product')->getCollection();
            $collection->addAttributeToSelect('*');
            $collection->addFieldToFilter(array(array('attribute'=>'manufacturer','eq'=>$brand_id),
    ))
$collection->addAttributeToSort($_GET['order'],$_GET['dir'] );
    $collection->setPageSize($_GET['limit']);
    $collection->setCurPage($_GET['p']);



        }

        return $collection;
    }

1

นี่อาจไม่ใช่สถานการณ์ในกรณีของคุณ แต่อาจช่วยคนอื่นที่กำลังมีปัญหานี้ getProductCollection()ฉันมีปัญหานี้ในขณะที่มีการเปลี่ยนแปลงการทดสอบที่กำหนดเองใน

ฉันสามารถแก้ไขได้โดยลบรหัสบันทึกที่ฉันเพิ่มซึ่งระบุจำนวนการรวบรวมที่ส่งคืน ฉันเชื่อว่าสิ่งใดก็ตามที่ซักถามผลการโหลดคอลเลกชันในgetProductCollection()วิธีการจะบังคับให้คอลเลกชันโหลดผลิตภัณฑ์ของจริงก่อนกำหนดและจะป้องกันการแก้ไขดาวน์สตรีมสำหรับการสั่งซื้อคอลเลกชันและข้อ จำกัด ผลลัพธ์จากการใช้สำหรับการควบคุมเพจจิ้ง


1
$collection->getSize()จะยังคงสามารถเข้าสู่ระบบการนับคอลเลกชันโดยไม่ต้องโหลดรายการเก็บรวบรวมการใช้ มันจะดำเนินการแยกSELECT COUNT(*)กับตัวกรองคอลเลกชันปัจจุบัน
Jan Papenbrock

ขอบคุณ @Jan Papenbrock นั่นเป็นประโยชน์ จุดที่ใหญ่กว่าที่ฉันพยายามทำ หากคุณทำให้คอลเลกชันโหลดมันจะรบกวนเพจและการเรียงลำดับซึ่งจะนำไปใช้กับคอลเลกชันในภายหลังหากยังไม่ได้โหลด
Matt B

0

คุณต้องแทนที่_prepareLayout()และตั้งค่าข้อมูลดังต่อไปนี้

protected function _prepareLayout()
{
    parent::_prepareLayout();
    $pager = $this->getLayout()->createBlock('page/html_pager')->setCollection($this->getDatasets());
    $this->setChild('pager', $pager);
    $this->getDatasets()->load();
    return $this;
}

แจ้งให้เราทราบหากคุณมีข้อสงสัยใด ๆ


มันยังไม่ทำงาน หลังจากเพิ่มสิ่งนี้มันจะแสดงหน้าจอสีขาว
Piyush

มันจะไม่เพียง แต่คัดลอกและวางเพื่อน
Keyul Shah

0

ไปที่การจัดการหมวดหมู่และตั้งค่าเป็นตัวเลือก Anchor เป็น "ใช่"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.