2010-10-24 18 views
7

मैं AJAX का उपयोग कर होम पेज पर मैजेंटो में AJAX का उपयोग करके लोकप्रिय उत्पाद सूची दिखाने की कोशिश कर रहा हूं, मैं इसे 5 या "एन" उत्पादों के लिए कर सकता हूं, लेकिन जो भी मैं चाहता हूं वह पेजिनेशन टूलबार है परिणाम सेट के साथ जोड़ा जाना चाहिए।Magento कस्टम ब्लॉक

यह मैं क्या लोकप्रिय उत्पादों को दिखाने के लिए जोड़ा है,

// Magento layout 
$magento_block = Mage::getSingleton('core/layout'); 
$productsHtml = $magento_block->createBlock('catalog/product'); 
$productsHtml->setTemplate('catalog/product/popular.phtml'); 
echo $productsHtml ->toHTML(); 

और popular.phtml तहत

<?php 

    $_productCollection = Mage::getModel('catalog/product')->getCollection() 
    ->addPriceData() 
    ->addAttributeToSort('ordered_qty', 'DESC') 
    ->addAttributeToSort('name', 'ASC') 
    ->setPageSize($limit) 
    ->setPage($p, $limit)  
    ->addAttributeToSelect(array('entity_id', 'entity_type_id', 'attribute_set_id', 'type_id', 'sku', 'category_ids', 'created_at', 'updated_at','has_options', 'sync', 'name', 'stock_status', 'wc_review_iwc_rating', 'wc_review_wa_rating', 'wc_review_bh_rating', 'small_image', 'status', 'pre_arrival', 'description', 'short_description', 'price', 'is_salable', 'stock_item', 'gift_message_available', 'featured')); 

?> 

तो यह मुझे खास पृष्ठ और सीमा की लोकप्रिय उत्पादों देता है, लेकिन मैं कर सकता था पेजिनेशन टूलबार लोड नहीं करें (लोकप्रिय.phtml या ब्लॉक लेआउट फ़ंक्शन बनाने के माध्यम से टूलबार को सीधे जोड़कर), गलत कहां है? क्या कोई मुझे कृपया बता सकता है।

धन्यवाद

उत्तर

10

एक Mage_Catalog_Block_Product_List ब्लॉक बनाने और अपने आप को लोकप्रिय उत्पादों का संग्रह सेट करने का प्रयास करें।

$collection = Mage::getModel('catalog/product')->addAttributeToFilter('your popular products'); 
// do not load the collection yet, otherwise the toolbar will not work 

$listBlock = Mage::getSingleton('core/layout')->createBlock('catalog/product_list'); 
$listBlock->setCollection($collection)->setTemplate('your/alternative/catalog/product/list.phtml'); 

उत्पाद सूची ब्लॉक हमेशा टूलबार ब्लॉक को प्रारंभ करता है। ? आप < का उपयोग करके टेम्पलेट में उपकरण पट्टी प्रदर्शित कर सकते हैं $ इस- गूंज PHP> getToolbarHtml()>

संपादित करें: यहाँ Magento 1.4.1.1 में एक नमूना दृश्यपटल कार्रवाई की एक काम उदाहरण है:

public function productListAction() 
{ 

    $collection = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToSelect('*'); 

    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); 

    $this->loadLayout(); 

    $listBlock = $this->getLayout()->createBlock('catalog/product_list') 
      ->setTemplate('catalog/product/list.phtml') 
      ->setCollection($collection); 

    $this->getLayout()->getBlock('content')->append($listBlock); 

    $this->renderLayout(); 
} 

मुझे उम्मीद है कि यह स्पष्ट हो जाएगा।

+0

वह सामान्य उत्पाद प्रदर्शन के साथ काम कर रहा है। लेकिन मैं इसे कस्टम PHP फ़ाइल से प्रदर्शित करना चाहता हूं। यहां तक ​​कि मैंने इस तरह toolbar.phtml लोड करने का प्रयास किया। $ लेआउट = मैगे :: getSingleton ('कोर/लेआउट'); $ टूलबार = $ लेआउट-> createBlock ('कैटलॉग/product_list_toolbar'); // रेंडर टूलबार एचटीएमएल echo $ टूलबार-> toHtml(); यह 1.4.1 में काम नहीं कर रहा है लेकिन 1.3 में काम किया है।मुझे पेजिनेशन टूलबार का उपयोग करना है। लेकिन यह काम नहीं कर रहा है। – Elamurugan

+0

हाय vinai, मैंने आपका सुझाव किया लेकिन दुर्भाग्य से यह काम नहीं करता है। मुख्य विचार, ईई 1.9 पर काम कर रहा हूं, और मैंने इसे देखा। \t $ संग्रह = मेज :: getModel ('कैटलॉग/उत्पाद') -> loadByAttribute ('sku', $ sku); \t $ listBlock = Mage :: getSingleton ('core/layout') -> createBlock ('catalog/product_list'); \t $ listBlock-> setCollection ($ संग्रह) -> सेट टेम्पलेट ('कैटलॉग/उत्पाद/सूची/list.phtml'); \t var_dump ($ listBlock-> getCollection()); (वापसी पूर्ण) \t // echo $ listBlock -> toHTML(); (फाटल त्रुटि के माध्यम से)। – Elamurugan

+0

मेज :: getModel ('कैटलॉग/उत्पाद') -> loadByAttribute() संग्रह को वापस नहीं करता है, लेकिन एक Mage_Catalog_Model_Product। मैंने ऊपर पोस्ट को संपादित किया है और चीजों को और स्पष्ट करने के लिए नियंत्रक कार्रवाई को जोड़ा है। – Vinai

2

आपको अपने संग्रह से टूलबार को आरंभ करना चाहिए। क्या आपने this page देखा है?

+0

नहीं, मेरी समस्या अलग है, मैं इसे कस्टम php फ़ाइल से प्रदर्शित करना चाहता हूं। तो जब मैंने टूलबार.एफटीएमएल को इस तरह से लोड करने का प्रयास किया तो यह काम नहीं कर रहा है। $ magento_block = Mage :: getSingleton ('core/layout'); \t $ productsHtml2 = $ magento_block-> createBlock ('catalog/product_list_toolbar'); \t $ productsHtml2 -> setTemplate ('सूची/उत्पाद/सूची/toolbar.phtml'); \t echo $ productsHtml2 -> toHTML(); यह घातक त्रुटि देता है। घातक त्रुटि: किसी सदस्य फ़ंक्शन को कॉल करें() w: \ wamp \ www \ wc2 \ app \ design \ frontend \ enterprise \ espresso \ template \ catalog \ product \ list \ toolbar.phtml में किसी गैर-ऑब्जेक्ट पर लाइन 34 पर getSize() – Elamurugan

+0

ठीक है अब toolbar.phtml में देखें। क्या आप देखते हैं कि कौन सा चर "गैर-ऑब्जेक्ट" है? यह $-> getCollection() प्राप्त करने का वापसी मूल्य है। आपको इस संग्रह को सेट करने का एक तरीका खोजना होगा। विनई के कोड को देखो, वह सेट कोलेक्शन() सेट करने के लिए एक कॉल लिखता है, ऐसा कुछ करने की कोशिश करें! – greg0ire

4

दूसरों के संदर्भ में मैंने विनई के कोड के अनुसार जो जोड़ा है, वह है।

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*'); 
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);  
    $magento_block = Mage::getSingleton('core/layout'); 
    $productsHtml = $magento_block->createBlock('catalog/product_list'); 
    $productsHtml ->setTemplate('catalog/product/list.phtml')->setCollection($collection); 
    echo $productsHtml ->toHTML(); 

यह पेजिनेशन टूलबार को पूरी तरह से प्रस्तुत करता है।

संबंधित मुद्दे