Magento - 自动将空父类别重定向到第一个子类别

时间:2014-05-11 13:27:56

标签: magento categories url-redirection

我需要将不包含产品的网页重定向到包含产品的第一个子类别网址(如果存在子类别)

由于我只有在类别不包含产品时才需要这样做,我无法通过.htaccess

进行此操作

有没有人对如何在Magento实现这一点有任何想法? 我通过谷歌找不到太多运气。

2 个答案:

答案 0 :(得分:0)

Haven没检查过。你应该把它放在你的view.phtml中。

$currentCategory = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
$productCheck  = Mage::getModel('catalog/category')->load($currentCategory)
                                                   ->getProductCollection();

if (count($productCheck) < 1) {
    echo '<script type="text/javascript"> 
        window.location = "' . Mage::getUrl('somewhere') . '"
    </script>';
}

答案 1 :(得分:0)

您可以使用观察者。您可以编辑/创建本地目录模块并尝试:

1)在config.xml上定义观察者:

<?xml version="1.0"?>
<config>
    <!--(...)-->
    <global>
        <!--(...)-->
        <events>
            <catalog_controller_category_init_after>
                <observers>
                    <yourcompany_catalog>
                        <type>singleton</type>
                        <class>yourcompany_catalog/observer</class>
                        <method>categoryRedirect</method>
                    </yourcompany_catalog>
                </observers>
            </catalog_controller_category_init_after>
        </events>
        <!--(...)-->
    </global>
    <!--(...)-->
</config>

2)你的观察者方法可以是这样的:

<?php
class GraspingMagento_SocialShare_Model_Observer
{

    /**
     * @param Varien_Event_Observer $observer
     * @return void
     */
    public function categoryRedirect(Varien_Event_Observer $observer)
    {
        /** @var Mage_Catalog_Model_Category $category */
        $category = $observer->getData('category');

        if ($category->getProductCollection()->count() > 0) {
            // Category has products, no need to redirect
            return;
        }

        /** @var Mage_Catalog_Model_Resource_Category_Collection $childrenCategories */
        $childrenCategories = $category->getChildrenCategories();

        /** @var Mage_Catalog_CategoryController $controller */
        $controller = $observer->getControllerAction();

        foreach ($childrenCategories as $childCategory) {
            /** @var Mage_Catalog_Model_Category $childCategory */
            if ($childCategory->getProductCollection()->count() > 0) {
                $controller->getResponse()->setRedirect($childCategory->getData('request_path'));
                break;
            }
        }
    }
} 

这将验证您当前的类别没有产品。如果没有,它将尝试找到包含产品的直接子项,并重定向到它。