पेजिनेशन और सॉर्टिंग काम नहीं कर रहा है


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) जोड़ सकते हैं;
अहसान होरानी

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(*)वर्तमान संग्रह फिल्टर के साथ एक अलग प्रदर्शन करेगा ।
जन पापेनब्रोक २४'१६ को

धन्यवाद @ जान पापेनब्रोक। यह आसान है। हालांकि जो बड़ा बिंदु मैं बना रहा था, वह बना रहा। यदि आप संग्रह को लोड करने का कारण बनते हैं, तो यह पेजिंग और छंटाई के साथ हस्तक्षेप करेगा जो बाद में संग्रह पर लागू होता है अगर इसे लोड नहीं किया गया है।
मैट बी

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

यदि आपके पास कोई प्रश्न है तो मुझे बताएं।


यह अभी भी काम नहीं कर रहा है। इसे जोड़ने के बाद यह सफेद स्क्रीन प्रदर्शित करता है।
पीयूष

यह सिर्फ कॉपी और पेस्ट दोस्त की तरह नहीं होगा
कीयुल शाह

0

प्रबंधित श्रेणी अनुभाग पर जाएं और सेट करें "हां" के लिए एंकर विकल्प।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.