如何为magento中的特定URL设置控制器?

时间:2013-06-22 18:53:36

标签: php magento magento-1.7 url-routing

我想这样做的原因是因为我想要两个不同的网址来使用同一个控制器。即/mymodule/mycontroller/mymodule/mycontroller2应使用相同的控制器Mypackage_Mymodule_Mycontroller

是否可以在config.xml中执行此操作?或者我是否必须操纵路由器?

我更喜欢设置配置文件而不是操纵路由器。在ZendFramework应用程序中,这可以在routes.ini中完成,如下所示

routes.myroute.route = "/mymodule/mycontroller2"
routes.myroute.defaults.module = "mymodule"
routes.myroute.defaults.controller = "mycontroller"

Magento有类似的方式吗?

出于搜索引擎优化的原因,我不想使用重写。

非常感谢提前

2 个答案:

答案 0 :(得分:2)

你可以这样做(编辑)三种方式:

  1. mycontroller2延长mycontroller并根据需要覆盖/扩展操作方法 - 但这似乎不是您想要的。

  2. 使用稍微弃用的基于配置的URL重写,允许您将一个控制器指向另一个控制器(参考Mage_Core_Controller_Varien_Action::_rewrite()

    <global>
        <routers>
            <mymodule><!-- match your routers config node -->
                <rewrite>
                    <mycontroller2><!-- match your controller name -->
                        <override_actions>true</override_actions>
                        <to>mymodule/mycontroller</to>
                    </mycontroller2>
                </rewrite>
            </mymodule>
        </routers> 
    </global>
    

    此外,您需要创建一个虚拟控制器操作来处理所有重写(这是这个不推荐的重写样式的大问题)。根据您的要求,以下内容应该有效:

    <?php
    
    class My_Module_MyController extends Mage_Core_Controller_Front_Action
    {
        public function __call($doesnt,$matter)
        {
            //empty...
        }
    }
    
  3. 我刚刚确定您可以完全跳过配置:

    class My_Module_Mycontroller2Controller extends Mage_Core_Controller_Front_Action
    {
        public function __call($action,$matter)
        {
            $method = preg_split('/Action/',$action);
            $this->_forward(
                $method[0],
                'mycontroller',
                'mymodule'
            );
        }
    }
    

答案 1 :(得分:0)

我猜你不想使用htaccess重写。所以只是为了确保万一你不知道它:Magento内置了一个很好的重写系统。很抱歉只发布一个supid链接,但通过查看它你就可以轻松解决这个任务......

http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/how_to_work_with_magento_url_rewrite_rules