2014-02-16 257 views

回答

2

我昨天写了一个简单的扩展,就是在1.8中完成的。设立观察员的事件controller_action_predispatch

我的观察者文件看起来像这样

class CommerceExtensions_GroupedProductRedirect_Model_Observer extends Varien_Event_Observer 
{ 
    public function redirectProductView($observer) 
    { 
    $id = Mage::app()->getRequest()->getParam('id'); 
    $product = Mage::getModel('catalog/product')->load($id); 
    if($product->getTypeId() == 'simple' && $product->getVisibility() == 1){ 
     $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId()); 
     if(!empty($parentIds)){ 
     $parentProduct = Mage::getModel('catalog/product')->load($parentIds[0]); 
     Mage::app() 
      ->getResponse() 
      ->setRedirect($parentProduct->getProductUrl(), 301) 
      ->sendResponse(); 
     } 
    }   
    } 
} 

这是我在我的config.xml

<controller_action_predispatch_catalog_product_view> 
    <observers> 
     <commerceextensions_groupedproductredirect_observer> 
     <class>CommerceExtensions_GroupedProductRedirect_Model_Observer</class> 
     <method>redirectProductView</method> 
     </commerceextensions_groupedproductredirect_observer> 
    </observers> 
    </controller_action_predispatch_catalog_product_view> 

它只会重定向,如果孩子的产品被设置为单独不可见,并且具有父母分组的产品。这可以很容易地适应与配置或捆绑产品,我只是不使用这些类型在我自己的网站,但只要你可以得到父产品ID,没有问题。

您应该可以将这两个部分添加到您的模块,它将完美工作。我还最终为这些儿童产品的评论页做了一个。它基本上与一些适应性相同的代码。

+0

在您的站点使用本网站时,请删除此部分Mage :: getStoreConfig('groupedproductredirect/active/overall'),因为它只是从我的自定义模块中为该扩展设置主开关。 –

+0

当我将这段代码添加到观察者文件时,我得到:解析错误:语法错误,意外的T_CLASS,期望在107行/home/unicohom/public_html/app/code/core/Mage/Admin/Model/Observer.php中的T_FUNCTION行107 – user3315004

+0

你可能增加了一个额外的}。给我一点时间,我会根​​据你的需要给你一个经过编辑的答案。 –