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

}

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

2 に答える 2

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/になります。

最後に、アクション名はコントローラー内で定義された関数です。たとえば、次の例ではBrakeがアクション名です。

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

完全な URL が形成されました: domain.com/myext/car_pedal/brake。URL が Magento によって受信されると、コントロールが関数 BrakeAction に渡されます。これは、MVC の C、Model-View-Controller です。

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 ファイル (オプション)

あなたがしたことは、上記の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 に答える