php - Magento : Get data from Varien_Data_Collection -
hiho everybody! hope you'll give me clue because i'm still noob magento.
i try display list of products in array. in mage/catalog/block/product/list.php
, created new varien_data_collection()
in pushed products objects (with ->additem($product)
).
then return custom collection , list.php
class work display list of products.
when call page in browser, had right number of displayed products , when click on see product page, right page.
however, data (like product name, price, etc) empty. guess methods used list class catch these data fail varien_data_collection
object.
to illustrate, here code sample :
// getting particular product $mainproduct = mage::getmodel('catalog/category')->load($currentcat->getid()); $mainproduct = $mainproduct->getproductcollection(); $mainproduct = $mainproduct->addattributetofilter('product_id', $_get['cat_id']); // creating custom collection $mycollection = new varien_data_collection(); foreach ($mainproduct $product) { // getting particular product's related products in array $related = $product->getrelatedproductids(); if ($this->array_contains($related, $_get['cat_id'])) { // if suits me, add in custom collection $mycollection->additem($product); } } return $mycollection;
and in list page :
when var_dump($mycollection)
, can see ['name']
, ['price']
, etc fields not referenced. ['product_id']
, many other fields don't care about.
my ultimate question : how can return collection containing these products data list class ? know poorly explained english limited , try best :(
calling ->getproductcollection()
against category returns skeleton data each product in created collection. if want full data each of products, need load them, in foreach
loop have:
$product = mage::getmodel('catalog/product')->load($product->getid());
however way in building collection not best working practice - should never have create own varien_data_collection
object, instead should creating product collection follows:
$collection = mage::getmodel('catalog/product')->getcollection();
then before load collecion (which foreach
loop or calling ->load()
against collection 2 examples), can filter collection according requirements. can either using native magento methods, 1 of using (addattributetofilter()
) or prefer pull select object collection , apply filtering way:
$select = $collection->getselect();
you can run of zend_db_select
class methods against select object filter collection.
http://framework.zend.com/manual/1.12/en/zend.db.select.html
when collection has been loaded, products inside contain full product data.
Comments
Post a Comment