簡體   English   中英

如何確定Magento自定義擴展URL

[英]How to determine Magento custom extension url

在為擴展程序創建的頁面之一中找到正確的網址時,我遇到任何問題。 我剛收到404。

這是我所擁有的基本知識。 我正在嘗試extension/share/但得到了404。

controllers / 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>

好的,我知道了。 我的布局沒有正確格式化。

    <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應為擴展名/共享/

希望能對某人有所幫助。 :)

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

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>
            .
            .
            .

控制器名稱和操作名稱是可選的,如果不包含,則默認為索引。 因此,以下URL是相同的:

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

控制器名稱是包含控制器代碼的PHP文件的文件路徑和文件名。 例如, car_pedal是此文件的控制器名稱:

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

因此,現在的網址是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時,它將把控件傳遞給函數brakeAction。 這是MVC中的C,模型-視圖-控制器。

根據我們要在制動動作中執行的操作,響應可以是純文本,例如,對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文件(可選)

您所做的全部利用了以上三個方面。 您的問題確實是如何在控制器動作的布局中構造句柄,因此您可以簡單地執行以下操作:

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>

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM