0

我在为我的扩展程序创建的一个页面找到正确的 url 时遇到任何问题。我刚收到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 *****************/

}

扩展布局.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>
4

2 回答 2

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!"
于 2013-09-09T02:18:33.963 回答
0

Magento 中的 URL 包含 3 个组件:

  1. 模块名称(必填)
  2. 控制器名称(可选)
  3. 动作名称(可选)

这些在 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。所以下面的 URL 是一样的:

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

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

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

所以,现在 URL 是domain.com/myext/car_pedal/

最后,动作名称是控制器中定义的函数。例如,刹车是以下示例中的动作名称:

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

现在形成了完整的 URL:domain.com/myext/car_pedal/brake。当 Magento 接收到 URL 时,它会将控制权传递给函数刹车动作。这是 MVC 中的 C,Model-View-Controler。

根据我们要在刹车动作中做什么,响应可以是纯文本,例如,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 文件(可选)

您所做的就是利用了上述所有 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>

我希望这会有所帮助。

于 2013-09-09T06:20:56.147 回答