Magento で次のことを実現するにはどうすればよいでしょうか?
コントローラー/ビュー/モデルのアプローチを使用して、「Hello World」メッセージを表示します。つまり、そこにアクセスすると、
http://example.com/myController
「Hello World」という文字列が表示されます。この文字列を Web サイトのテンプレート (ヘッダー、フッターなど) 内に表示できると便利です。このコントローラ (または必要に応じて新しいコントローラ) に、モデルと対話し、クエリを実行して
Select * FROM articles where id='10'
行 (列を含むid, title, content
) をコントローラに返すメソッドを追加するにはどうすればよいですか? 次に、コントローラを使用してビューを含め、この行を表示します。 そのため、 (または同様のもの) にアクセスすると、http://example.com/myController/show_row
ビュー内に行が表示されます。 (凝った操作は必要ありません。 または同様のものを使用するだけでecho $row->id;
十分です。)
Magento のコード構造に関するその他の情報も非常に役立ちます。
ベストアンサー1
まず第一に、私は購入を強くお勧めしますPHP Architect の PDF/E ブック20ドルですが、私が見つけた「Magentoの仕組み」をわかりやすく説明した唯一のリソースです。また、私のウェブサイトでの Magento チュートリアル。
次に、選択肢があり、経験豊富なプログラマーでない場合、または経験豊富なプログラマー (理想的には PHPとJava のプログラマー) にアクセスできない場合は、別のカートを選択します。Magento は優れた設計ですが、他のプログラマーがモジュールを構築できるショッピング カート ソリューションとして設計されています。賢いがプログラマーではない人が簡単に理解できるようには設計されていません。
3つ目に、Magento MVCはルビーオンレール、ジャンゴ、コードイグナイター、ケーキPHPなど、最近PHP開発者の間で人気のMVCモデルです。ゼンドモデルであり、全体的に Java OOP に非常に似ています。注意する必要があるコントローラーが2 つあります。module/frontName コントローラーと MVC コントローラーです。
4 番目に、Magento アプリケーション自体は、使用するのと同じモジュール システムを使用して構築されているため、コア コードを調べることは、学習に役立つ戦術です。また、Magento で行う作業の多くは、既存のクラスのオーバーライドです。ここで説明するのは、オーバーライドではなく、新しい機能の作成です。コード サンプルを確認するときは、この点に留意してください。
まず最初の質問から始め、特定の URL に応答するコントローラー/ルーターの設定方法を説明します。これはちょっとした小説になります。モデル/テンプレート関連のトピックについては後で時間があるかもしれませんが、今のところはありません。ただし、SQL に関する質問については簡単に説明します。
MagentoはEAVAデータベース アーキテクチャ。可能な場合は常に、システムが提供するモデル オブジェクトを使用して必要な情報を取得するようにしてください。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>
ここで言っているのは、「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";
}
}
今設定したものは、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 は一致しません。コントローラ IndexController で fooAction を使用する場合は、次のようにこのコントローラを明示的に呼び出す必要があります。URLhttp://example.com/magento/index.php/helloworld/index/foo
の 2 番目の部分は、常に controllerName であるためです。この動作は、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 コントローラー クラスを調べて、モデルとテンプレート/レイアウト システムをどのように使用すべきかを確認することをお勧めします。