开发者

Help with Magento and related products

开发者 https://www.devze.com 2023-02-03 04:09 出处:网络
I have a customer product page that literally lives beside the catalog/product/view.phtml page.It\'s basically identical to that page with a few small exceptions.It\'s basically a \'product of the day

I have a customer product page that literally lives beside the catalog/product/view.phtml page. It's basically identical to that page with a few small exceptions. It's basically a 'product of the day' type page so I can't combine it with the regular product page since I have to fetch the data from the DB and perform a load to get the product information

$_product = Mage::getModel('catalog/product')->load($row['productid']);

To make a long story short, everything works (including all children html blocks) with the singular exception of the related products.

After the load I save the product into the registry with

Mage::register('product', $_product); 

and then attempt to load the related products with:

echo $this->getLayout()->createBlock('catalog/product_view')->setTemplate('catalog/product/list/related.phtml')->toHtml();`
开发者_运维百科

All of which give back the error:

Fatal error: Call to a member function getSize() on a non-object in catalog/product/list/related.phtml on line 29`, 

and line 29 is

<?php if($this->getItems()->getSize()): ?>`.

Any help getting the relateds to load would be appreicated.


I didn't quite follow what you're trying to do, but I know why you're getting your errors. You're creating a block whose class-alias/class is

catalog/product_view
Mage_Catalog_Block_Product_View

but you're setting this block's template as

 catalog/product/list/related.phtml

The stock catalog/product/list/related.phtml template was built to be used with a catalog/product_list_related Block only, and not a catalog/product_view Block.

If you take a look at the class definition for a catalog/product_list_related Block (which is a Mage_Catalog_Block_Product_List_Related), you can see that there's a getItems() method.

public function getItems()
{
    return $this->_itemCollection;
}

which returns a collection. The collection is set in the _prepareData method

protected function _prepareData()
{
    $product = Mage::registry('product');
    /* @var $product Mage_Catalog_Model_Product */

    $this->_itemCollection = $product->getRelatedProductCollection()
    ...

This collection is never set with a catalog/product_view Block, which is why you're getting your errors.

In your code above, if you switch to creating a catalog/product_list_related block, your errors should go away.


public function relatedproductsAction(){

    $this->loadLayout();
    $relatedBlock = "";

    $rec_prod_id = Mage::getSingleton('checkout/session')->getLastAddedProductId(true);
    $_product = Mage::getModel('catalog/product')->load($rec_prod_id);
    Mage::register('product', $_product);


    $relatedBlock = $this->getLayout()->createBlock('catalog/product_list_related')->setTemplate('catalog/product/related.phtml')->toHtml();

    echo $relatedBlock;
    exit;

}

Getting html of related block through ajax call, right after when product is added to cart. might be relatively helpful.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号