I know Magento1.9 is really, really old, but some people still insist on using it... So, here is my question...
I have a module that creates a new product collection based on some POST parameters and renders them on a custom page. What I want now is to also add layered navigation to that page. However, my attempts so far have been unsuccessful...
Here is my code so far:
config.xml
<?xml version="1.0"?>
<config>
<modules>
<ID_SearchResults>
<version>0.1.0</version>
</ID_SearchResults>
</modules>
<frontend>
<routers>
<searchresults>
<use>standard</use>
<args>
<module>ID_SearchResults</module>
<frontName>searchresults</frontName>
</args>
</searchresults>
</routers>
<layout>
<updates>
<searchresults>
<file>searchresults.xml</file>
</searchresults>
</updates>
</layout>
</frontend>
<global>
<helpers>
<id_searchresults>
<class>ID_SearchResults_Helper</class>
</id_searchresults>
</helpers>
<models>
<searchresults>
<class>ID_SearchResults_Model</class>
</searchresults>
</models>
<blocks>
<searchresults>
<class>ID_SearchResults_Block</class>
</searchresults>
</blocks>
</global>
</config>
IndexController.php
<?php
class ID_SearchResults_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$post_params = Mage::app()->getRequest()->getPost();
$this->loadLayout();
$this->getLayout()->getBlock("head")->setTitle( $this->__("Search results for: '%s'", $post_params['search']) );
$breadcrumbs = $this->getLayout()->getBlock("breadcrumbs");
$breadcrumbs->addCrumb("home", array(
"label" => $this->__("Home"),
"title" => $this->__("Home"),
"link" => Mage::getBaseUrl()
));
$breadcrumbs->addCrumb("titlename", array(
"label" => $this->__("Search results for: '%s'", $post_params['search']),
"title" => $this->__("Search results for: '%s'", $post_params['search'])
));
$this->_initLayoutMessages('catalog/session');
$this->_initLayoutMessages('checkout/session');
$this->renderLayout();
}
}
Data.php
<?php
class ID_SearchResults_Helper_Data extends Mage_Core_Helper_Abstract
{
public function getAvailableOrders()
{
return array(
// attribute name => label to be used
'price' => $this->__('Price')
);
}
public function getProductCollection()
{
$post_params = Mage::app()->getRequest()->getPost();
$product_ids = array_map(
function($item) {
return (int)filter_var($item, FILTER_SANITIZE_NUMBER_INT);
},
explode(',', $post_params['sbl_search_data'])
);
$layer = Mage::getSingleton('catalog/layer');
if( $product_ids[0] === 0 ) {
if( !is_null(Mage::registry('product-ids')) ) {
$product_ids = Mage::registry('product-ids');
}
}
$product_ids = array(36896,36892,36886);
if ( count($product_ids) > 0 ) {
if( is_null(Mage::registry('product-ids')) ) {
Mage::register('product-ids', $product_ids);
}
$collection = Mage::getResourceModel('catalog/product_collection');
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection->addAttributeToSelect($attributes);
$collection->addAttributeToFilter('status', 1);
$collection->addIdFilter($product_ids);
$this->_productCollection = $collection;
$layer->setCollection($this->_productCollection);
} else {
$productCollection = $layer->getProductCollection();
$this->_productCollection = $productCollection;
$layer->setCollection($this->_productCollection);
}
return $this->_productCollection;
}
}
List.php
<?php
class ID_SearchResults_Block_Product_List extends Mage_Catalog_Block_Product_List
{
protected function _beforeToHtml()
{
$toolbar = $this->getToolbarBlock();
// called prepare sortable parameters
$collection = $this->getProductCollection();
// use sortable parameters
if ($orders = $this->getAvailableOrders()) {
$toolbar->setAvailableOrders($orders);
}
if ($sort = $this->getSortBy()) {
$toolbar->setDefaultOrder($sort);
}
if ($dir = $this->getDefaultDirection()) {
$toolbar->setDefaultDirection($dir);
}
if ($modes = $this->getModes()) {
$toolbar->setModes($modes);
}
// set collection to toolbar and apply sort
$toolbar->setCollection($collection);
$this->setChild('toolbar', $toolbar);
Mage::dispatchEvent('catalog_block_product_list_collection', array(
'collection' => $this->getProductCollection()
));
$this->getProductCollection()->load();
return parent::_beforeToHtml();
}
}
I am sure there is something obvious I missed here, but it's been so long I since I worked with magento 1.9 that I just can't see it...
Anyone can steer me in the right direction???
thanks!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…