Magento の URL には 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 つの場所で定義できます。
- XML コードとしてのレイアウト (オプション)
- ブロック クラスを PHP コードとして (必須)
- 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>
それが役立つことを願っています。