如何确定Magento自定义扩展URL

时间:2013-09-09 01:16:16

标签: php magento url-routing

我在为我的扩展程序创建的某个网页找到正确的网址时遇到任何问题。我刚刚收到404。

以下是我所拥有的基础知识。我正在尝试extension/share/,但我得到了404。

控制器/ EventController.php

<?php

class My_Extension_EventController extends Mage_Core_Controller_Front_Action
{

/**************  Some Code *****************/

}

阻止/ Share.php

<?php
class My_Extension_Block_share extends Mage_Core_Block_Template
{

/**************  Some Code *****************/

}

extensionlayout.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="root">
            <action method="setTemplate"><template>page/1column.phtml</template></action>
        </reference>
    </default>
    <my_extension_event_share>
        <reference name="content">
            <block name="extension.share" type="my_extension/share" template="extension/share.phtml"/>
        </reference>
    </my_extension_event_share>
</layout>

2 个答案:

答案 0 :(得分:0)

好的,所以我想出来了。我没有正确格式化我的布局。

    <my_extension_share_index>
        <reference name="content">
            <block name="extension.share" type="my_extension/share" template="extension/share.phtml"/>
        </reference>
    </my_extension_share_index>

上面的代码告诉Magento URL应该是extension / share /

希望有人帮助。 :)

$Magento = "Trial and Error with huge headache!"

答案 1 :(得分:0)

Magento中的URL有3个组件:

  1. 模块名称(必填)
  2. 控制器名称(可选)
  3. 操作名称(可选)
  4. 这些由URL分隔:domain.com/modulename/controllername/actionname

    模块名称在扩展配置文件/etc/config.xml中定义。在以下示例中, myext 是模块名称:

    <config>
        .
        .
        .
        <frontend>
            <routers>
                <myext>
                    <use>standard</use>
                    <args>
                        <module>My_Extension</module>
                        <frontName>myext</frontName>
                    </args>
                </emgs>
                .
                .
                .
    

    控制器名称和操作名称是可选的,如果不包含,则默认为index。所以以下网址是相同的:

    • domain.com/myext/
    • domain.com/myext/index/index /

    控制器名称是包含控制器代码的PHP文件的文件路径和文件名。例如, car_pedal 是此文件的控制器名称:

    ../My/Extension/controllers/Car/PedalController.php 
    

    所以,现在网址为 domain.com/myext/car_pedal /

    最后,动作名称是控制器中定义的功能。例如, brake 是以下示例中的操作名称:

    <?php
    class My_Extension_Car_PedalController extends Mage_Core_Controller_Front_Action
    {  
        public function brakeAction()
        {      
            .
            .
            .
        }
    }
    

    现已形成完整的网址: domain.com/myext/car_pedal/brake 。当Magento收到URL时,它会将控制传递给函数brakeAction。这是MVC中的C,Model-View-Controler。

    根据我们想要在brakeAction中做什么,响应可以是纯文本,例如,对AJAX的响应:

    public function brakeAction()
    {      
        return $this->getResponse()->setBody('Not Implemented Yet');
    }
    

    或者我们可以构建一个基于Magento块的完整HTML页面。这是MVC中的V. Magento中的视图可以在3个地方定义:

    1. 布局为XML代码(可选)
    2. 阻止类作为PHP代码(必需)
    3. 设计模板为HTML和PHP代码,.phtml文件(可选)
    4. 你所做的就是利用了上述所有3项。你的问题实际上是如何在控制器动作的布局中构造句柄,这样你就可以这样做:

      public function brakeAction()
      {      
          $this->loadLayout();
          $this->renderLayout();
      }
      

      瞧,自动生成包含页眉,页脚,正文等的完整HTML页面并返回浏览器。

      在我的例子中,句柄是:

      <layout version="0.1.0">    
          <myext_index_index>
              <!-- for indexAction in My_Extension_IndexController -->
          </myext_index_index>
          <myext_car_pedal_index>
              <!-- for indexAction in My_Extension_Car_PedalController  -->
          </myext_car_pedal_index>
          <myext_car_pedal_brake>
              <!-- for brakeAction in My_Extension_Car_PedalController  -->
          </myext_car_pedal_brake>
      </layout>
      

      我希望有所帮助。