何よりもまず、PHP Architect から PDF/E-Bookを購入することを強くお勧めします。これは 20 米ドルですが、私が見つけた唯一の単純な「Magento のしくみ」リソースです。また、自分の Web サイトで Magento のチュートリアルを書き始めました。
第二に、選択肢があり、経験豊富なプログラマーではない場合、または経験豊富なプログラマー (理想的には PHPとJava) にアクセスできない場合は、別のカートを選択してください。Magento はよく設計されていますが、他のプログラマーがその上にモジュールを構築できるショッピング カート ソリューションになるように設計されています。賢いがプログラマーではない人が簡単に理解できるように設計されていません。
第三に、Magento MVC はRuby on Rails、Django、CodeIgniter、CakePHPなどとは大きく異なります。最近 PHP 開発者に人気のある MVC モデルです。これはZendモデルに基づいていると思います。全体が非常に Java OOP に似ています。注意が必要なコントローラーが2 つあります。module/frontName コントローラー、次に MVC コントローラー。
第 4 に、Magento アプリケーション自体は、使用するのと同じモジュール システムを使用して構築されているため、コア コードをざっと調べてみることは有用な学習戦術です。また、Magento で行うことの多くは、既存のクラスをオーバーライドすることです。ここで取り上げるのは、オーバーライドではなく、新しい機能の作成です。コード サンプルを見るときは、この点に注意してください。
最初の質問から始めて、特定の URL に応答するようにコントローラー/ルーターをセットアップする方法を示します。これは小さな小説になります。モデル/テンプレート関連のトピックについては後で時間がかかるかもしれませんが、今のところはありません。ただし、SQL に関する質問について簡単に説明します。
Magento はEAVデータベース アーキテクチャを使用します。可能な限り、システムが提供するモデル オブジェクトを使用して、必要な情報を取得するようにしてください。すべてが SQL テーブルにあることは知っていますが、生の SQL クエリを使用してデータを取得することは考えないほうがよいでしょう。
最終免責事項。私は Magento を約 2、3 週間使用しています。これは、Stack Overflow を支援するのと同じくらい、頭の中でこれを理解するための演習です。
モジュールを作成する
Magento へのすべての追加とカスタマイズは、モジュールを通じて行われます。したがって、最初に行う必要があるのは、新しいモジュールを作成することです。app/modules
次のように名前付きで XML ファイルを作成します。
cd /path/to/store/app
touch etc/modules/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
MyCompanyName は変更のための一意の名前空間です。会社の名前である必要はありませんが、推奨される規則は my magento です。HelloWorld
モジュールの名前です。
アプリケーションのキャッシュをクリアする
モジュール ファイルが配置されたので、Magento にそれを知らせる必要があります (そして作業を確認します)。管理アプリケーションで
- [システム] -> [キャッシュ管理] に移動します
- [すべてのキャッシュ] メニューから [更新] を選択します
- [キャッシュ設定を保存] をクリックします。
ここで、Magento がモジュールについて認識していることを確認します
- システム - >構成に移動します
- 詳細をクリックします
- 「モジュール出力を無効にする」設定ボックスで、「MyCompanyName_HelloWorld」という名前の新しいモジュールを探します
パフォーマンスの低下に耐えられる場合は、開発/学習中にアプリケーションのキャッシュをオフにすることをお勧めします。キャッシュをクリアするのを忘れて、なぜ変更が表示されないのか疑問に思うほどイライラすることはありません。
ディレクトリ構造をセットアップする
次に、モジュールのディレクトリ構造をセットアップする必要があります。これらすべてのディレクトリが必要になるわけではありませんが、ここですべてを設定しても問題はありません。
mkdir -p app/code/local/MyCompanyName/HelloWorld/Block
mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers
mkdir -p app/code/local/MyCompanyName/HelloWorld/Model
mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper
mkdir -p app/code/local/MyCompanyName/HelloWorld/etc
mkdir -p app/code/local/MyCompanyName/HelloWorld/sql
そして、構成ファイルを追加します
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
構成ファイル内に、以下を追加します。これは基本的に「空の」構成です。
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
物事を単純化しすぎて、この構成ファイルを使用すると、実行するコードを Magento に伝えることができます。
ルーターの設定
次に、モジュールのルーターをセットアップする必要があります。これにより、次の形式で URL を処理していることをシステムに知らせます。
http://example.com/magento/index.php/helloworld
したがって、構成ファイルに次のセクションを追加します。
<config>
<!-- ... -->
<frontend>
<routers>
<!-- the <helloworld> tagname appears to be arbitrary, but by
convention is should match the frontName tag below-->
<helloworld>
<use>standard</use>
<args>
<module>MyCompanyName_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
<!-- ... -->
</config>
ここで言っているのは、「helloworld の frontName を持つ任意の URL ...
http://example.com/magento/index.php/helloworld
frontName コントローラー MyCompanyName_HelloWorld を使用する必要があります。
したがって、上記の構成が整っている場合、上記の helloworld ページをロードすると、404 ページが表示されます。これは、コントローラー用のファイルを作成していないためです。今それをしましょう。
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
ページを読み込んでみてください。進捗!404 の代わりに、PHP/Magento 例外が発生します。
Controller file was loaded but class does not exist
作成したばかりのファイルを開き、次のコードを貼り付けます。クラスの名前は、ルーターで指定した名前に基づいている必要があります。
<?php
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here";
}
}
今セットアップしたのは、module/frontName コントローラーです。これは、モジュールのデフォルトのコントローラーであり、デフォルトのアクションです。コントローラーまたはアクションを追加する場合、Magento URL のツリーの最初の部分は不変であり、常にこのようになることを覚えておく必要があります。http://example.com/magento/index.php/frontName/controllerName/actionName
したがって、このURLに一致させたい場合
http://example.com/magento/index.php/helloworld/foo
FooController が必要です。これは次の方法で実行できます。
touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php
<?php
class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo 'Foo Index Action';
}
public function addAction(){
echo 'Foo add Action';
}
public function deleteAction(){
echo 'Foo delete Action';
}
}
デフォルトのコントローラ IndexController とデフォルトのアクション indexAction は暗黙的に指定できますが、その後に何かがある場合は明示的に指定する必要があることに注意してください。したがってhttp://example.com/magento/index.php/helloworld/foo
、コントローラー FooController とアクション indexAction に一致し、IndexController のアクション fooAction には一致しません。fooAction が必要な場合は、コントローラーの IndexController で、次のようにこのコントローラーを明示的に呼び出す必要があります。これ
http://example.com/magento/index.php/helloworld/index/foo
は、URL の 2 番目の部分が常にコントローラー名であるためです。この動作は、Magento にバンドルされている Zend Framework の継承です。
次の URL にアクセスして、echo ステートメントの結果を確認できるはずです。
http://example.com/magento/index.php/helloworld/foo
http://example.com/magento/index.php/helloworld/foo/add
http://example.com/magento/index.php/helloworld/foo/delete
これで、Magento がコントローラーにディスパッチする方法についての基本的なアイデアが得られるはずです。ここから、既存の Magento コントローラー クラスを調べて、モデルとテンプレート/レイアウト システムの使用方法を確認することをお勧めします。