【问题标题】:301 Redirect Simple Products to Grouped Parent in Magento301将简单产品重定向到Magento中的分组父级
【发布时间】:2012-07-11 18:59:39
【问题描述】:

我正在将我们目录中的一些简单产品组合到分组产品中。我需要创建从当前简单产品页面到新分组产品页面的 301 重定向。

这是我所拥有的示例:

  1. 产品 a、b 和 c 是相似的简单产品,每个产品都有 他们自己的网址。
  2. 分组产品 z 具有关联的 a、b 和 c。
  3. a、b 和 c 的可见性更改为“单独不可见”。
  4. 访问产品 c 的旧链接会导致“404 Not Found”错误。

我希望第 4 步生成带有分组产品网址的“301 永久移动”。我知道我可以手动更改 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:

如果我修改“核心”文件而不是“本地”版本,则可以。关于为什么会这样的任何想法?

【问题讨论】:

    标签: magento magento-1.6


    【解决方案1】:

    尝试根据this site重写控制器,但我认为你不必重写控制器。我建议你重写 helper。

    【讨论】:

    • 您的回答主要包含一个链接。虽然这在理论上可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。
    • 我认为这可能是一个很好的方向,但我不清楚它是否允许我将简单的产品请求重定向到分组父级(如果存在)。
    【解决方案2】:

    如果您的代码从核心工作,可能您没有使用成功的产品控制器进行扩展,请检查您的模块是否已加载,还要检查其他模块/扩展是否以某种方式未扩展与您要扩展的控制器相同的控制器。

    【讨论】:

      【解决方案3】:

      您有两个选择: 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>
      

      你的观察者里面的代码:

      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-&gt;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;
                      }
                  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 2010-12-31
        相关资源
        最近更新 更多