モジュールを作ってみた
ためしにMagentoのカスタムモジュールを作成しました。
モジュールの動作は「とあるURLが叩かれた時に、DBのデータを呼び出す」です。
実行するURLはこれです。
[サイトURL]/mymodule/test
MagentoはこういったURLが来たとき、mymoduleをモジュール名
testはコントローラ名と判断します。
もし、[サイトURL]/mymodule/test/aaa というURLだった場合
aaaはアクション名と判断します。
それではまずはコントローラーを作りました。
▼Controller ## app/code/local/Sasakure/Mymodule/controllers/TestController.php ## <?php class Sasakure_Mymodule_TestController extends Mage_Core_Controller_Front_Action { function indexAction() { $test = Mage::getModel('mymodule/test'); $test->load(1); } }
コントローラーはMage_Core_Controller_Front_Actionを継承するのがお約束です。
今回はアクション名の指定がありません。そんな時はindexAction()が実行されます。
getModelで設定ファイルを読み込み、そこに指定してある通りにモデルオブジェクトを取得しています。
設定ファイルはModelと同じモジュールディレクトリのconfig.xmlです。
パラメータのmymodule/testは後で説明します。
▼config.xml (globalタグだけ抜粋) ## app/code/local/Sasakure/Mymodule/etc/config.xml ## <global> <models> <mymodule> <class>Sasakure_Mymodule_Model</class> <resourceModel>mymodule_mysql4</resourceModel> </mymodule> <mymodule_mysql4> <class>Sasakure_Mymodule_Model_Mysql4</class> <entities> <test><table>sasakure_test</table></test> </entities> </mymodule_mysql4> </models> </global>
今回指定したモデル名である
これがコントローラーでgetModel('mymodule/test')のスラッシュの左側です。
このクラス名 + スラッシュの右側のtestが利用するクラス名になっています。
、、、たぶん
なのでこんな感じに作ります。
▼Model ## app/code/local/Sasakure/Mymodule/Model/Test.php ## class Sasakure_Mymodule_Model_Test extends Mage_Core_Model_Abstract { protected function _construct() { $this->_init('mymodule/test'); } }
ModelはMage_Core_Model_Abstractを継承するのがお約束です。
initで指定しているのは、このModelで使用するリソースです。
スラッシュの左側がconfig.xmlのモデル名、右側がエンティティ名です。
これもお約束として覚えておきます。
それではまた、config.xmlの説明に戻ります。 忘れないうちにテーブルを作ってしまいます。 あとでloadするように1件インサートしておきました。 ではconfig.xmlで指定したようにMySQLを操作するためのモデルを設けます。 MySQLを操作するためにはMage_Core_Model_Mysql4_Abstractを継承するのがお約束です。 データの取得方法にはCollectionクラスを用意する方法もあります。 最後にモジュールを有効にすればOKです。 覚える事が色々とあります。 正直、僕みたいにテキトーな開発をしてきた人間にはカスタマイズ出来ません。 このエントリを見て、そんな時間の無駄が少しでもなくなれば幸いです。
今回使用するリソースはデータベース(MySQL)にあるため、Mysqlを操作するためのクラスも必要なんです。
タグには使用するテーブル名を記載しています。
CREATE TABLE `sasakure_test` (
`sasakure_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Sasakure Id',
`memo` varchar(255) NOT NULL COMMENT 'Memo',
PRIMARY KEY (`sasakure_id`)
);
INSERT INTO sasakure_test (memo) VALUES ('KKKKKK');
本来はsqlディレクトリにmysql4-install-0.1.0.phpを作成してテーブルを作ったりするみたいですが、
まだよくわかっていないので、直接SQLを実行して作りました。
▼Model/Mysql4
## app/code/local/Sasakure/Mymodule/Model/Mysql4/Test.php ##
<?php
class Sasakure_Mymodule_Model_Mysql4_Test extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct() {
$this->_init('mymodule/test', 'sasakure_id');
}
}
initではModelの時と同じようにリソースを指定します。更にプライマリーキーも指定します。
僕はまだよくわかっていませんが、いくつかのテーブルをjoinしたりする際に使う、、、ぽいです、、
▼モジュールを有効に
app/etc/modules/Sasakure_Mymodule.xml
<?xml version="1.0"?>
<config>
<modules>
<Sasakure_Mymodule>
<active>true</active>
<codePool>local</codePool>
</Sasakure_Mymodule>
</modules>
</config>
こういったルールを覚えるまでは大変ですが、PHPの基礎やMVCモデル、データモデルについて
ちゃんと学んできた人には普通の事なのかもしれませんね。
ここまで理解するのに数ヶ月かかった(T_T)
でも、間違っていたらご指摘お願いしますw