开发者

Magento: Accessing models/blocks from a phtml

Hi I have a situation where I need to look up the number of recently viewed products on catalog/product/view.phtml开发者_如何转开发. In the recently viewed 'product_viewed.phtml' file it calls

$_products = $this->getRecentlyViewedProducts()

to get the recently viewed. How would I access this method from within the catalog/product/view.phtml file?

I don't know where this method is. I've tried searching for it but it doesn't seem to exist. When I write click it in Netbeans and click go to declaration it takes me to

class Mage_Reports_Block_Product_Viewed extends Mage_Reports_Block_Product_Abstract

Actually on the class itself. This class only has _toHtml(), getCount(), and getPageSize() methods.

I just need to know whether there are any recently viewed products.

Any help most appreciated!

Billy


If you look into 'Mage_Reports_Block_Product_Viewed', you will notice:

$this->setRecentlyViewedProducts($this->getItemsCollection());

That 'getItemsCollection' method is defined in the abstract class... And you will notice this abstract class will create a model based on $_indexName defined in the (subclassed) block.

If you just want the collection, you can probably get away with:

$_products = Mage::getModel('reports/product_index_viewed')->getCollection();

And then adding whatever you want to the collection:

$_products
    ->addAttributeToSelect('*')
    ->setAddedAtOrder();
    // optionally add other methods similar to Mage_Reports_Block_Product_Abstract::getItemsCollection

Another approach that might be more suited would be to create the original block:

$productViewedBlock = $this->getLayout()->createBlock('reports/product_viewed');

On which you can simply call whatever you want:

$_collection = $productViewedBlock->getItemsCollection();
$_count = $productViewedBlock->getCount();


The getRecentlyViewedProducts function is a magical getter that gets the data that was set with setRecentlyViewedProducts in app/code/core/Mage/Reports/Block/Product/Viewed.php (which builds it using app/code/core/Mage/Reports/Block/Product/Abstract.php's function _getRecentProductsCollection).

This is complicated stuff that you don't want to reproduce; its better, IMO to make your own Block that extends Mage_Catalog_Block_Product_Abstract that will give you access to the same functionality, and drop your new block into the page you're working on.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜