何よりもまず、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
次のようにnamedで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は、変更に固有の名前空間です。会社名である必要はありませんが、推奨される規則は私のマジェントです。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>
ここで言っているのは、「frontNameがhelloworldの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";
}
}
ここで設定したのは、モジュール/ 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番目の部分は、現在も、これも常にcontrollerNameであるためです。この動作は、MagentoにバンドルされているZend Frameworkの継承です。
これで、次のURLにアクセスして、エコーステートメントの結果を確認できるようになります。
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コントローラークラスを突いて、モデルとテンプレート/レイアウトシステムの使用方法を確認することをお勧めします。