我将目录中的一些简单产品与分组产品相结合。我需要从当前的简单产品页面创建301重定向到新的分组产品页面。
以下是我的例子:
我希望第4步使用分组的产品网址生成“301 Moved Permanently”。我知道我可以手动更改URL重写列表中的条目,但我正在寻找一种更自动化的方法。
有人能帮我指出正确的方向吗?
更新
我更新了文件app / code / local / Mage / Catalog / controllers / ProductController.php:
protected function _initProduct()
{
$categoryId = (int) $this->getRequest()->getParam('category', false);
$productId = (int) $this->getRequest()->getParam('id');
$params = new Varien_Object();
$params->setCategoryId($categoryId);
$parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($productId);
if(isset($parentIds[0])){
$parent = Mage::getModel('catalog/product')->load($parentIds[0]);
die($parent->getProductUrl());
}
return Mage::helper('catalog/product')->initProduct($productId, $this, $params);
}
我希望能够杀死任何简单的产品页面视图,但事实并非如此。看起来产品控制器没有被设置为不可见的产品。这是对的吗?
更新2:
如果我修改“核心”文件而不是“本地”版本,则可行。关于为什么会这样的想法?
答案 0 :(得分:1)
尝试根据this site重写控制器,但我认为你不必重写控制器。我建议你改写帮手。
答案 1 :(得分:0)
如果您的代码在核心工作,也许您没有使用成功的产品控制器进行扩展,请检查您的模块是否已加载,同时检查其他模块/扩展是否与您想要扩展的控制器不同。
答案 2 :(得分:0)
您有两种选择: 1.)如果作为分组一部分的产品的可见性设置为“单独不可见”(简单或可下载),则可以按照本教程使用观察者模式进行操作。magento-grouped-product-redirect-tutorial 底线是:
使用此活动:
<events>
<catalog_controller_product_init_after>
<observers>
<company_catalog>
<class>company_catalog/observer</class>
<method>redirectGrouped</method>
</company_catalog>
</observers>
</catalog_controller_product_init_after>
</events>
和Observer中的代码:
public function redirectGrouped(Varien_Event_Observer $observer)
{
$product = $observer->getEvent()->getProduct();
$groupedTypeInstance = Mage::getModel('catalog/product_type_grouped');
$parentIds = $groupedTypeInstance->getParentIdsByChild($product->getId());
foreach ($parentIds as $parentId) {
$parent = Mage::getModel('catalog/product')->load($parentId);
if ($parent
&& $parent instanceof Mage_Catalog_Model_Product
&& $parent->getTypeId() == 'grouped'
) {
$redirect = Mage::getStoreConfig(
'catalog/grouped_options/redirect_enabled',
Mage::app()->getStore()->getId()
);
if ($redirect) {
Mage::app()->getResponse()->setRedirect($parent->getProductUrl());
}
break;
}
}
}
2。)如果你的产品具有“不可见的单独”的可见性,你会注意到上述解决方案不起作用。不幸的是,Magento在我们使用的事件之前检查可见性并返回false。
所以我们能做的是:
重写/app/code/core/Mage/Catalog/Helper/Product.php
并在函数public function initProduct($productId, $controller, $params = null)
:if (!$this->canShow($product))
添加使用与上面相同的代码,因为它正常工作。
$groupedTypeInstance = Mage::getModel('catalog/product_type_grouped');
$parentIds = $groupedTypeInstance->getParentIdsByChild($product->getId());
foreach ($parentIds as $parentId) {
$parent = Mage::getModel('catalog/product')->load($parentId);
if ($parent
&& $parent instanceof Mage_Catalog_Model_Product
&& $parent->getTypeId() == 'grouped'
) {
$redirect = Mage::getStoreConfig(
'catalog/grouped_options/redirect_enabled',
Mage::app()->getStore()->getId()
);
if ($redirect) {
Mage::app()->getResponse()->setRedirect($parent->getProductUrl());
}
break;
}
}