サイトカレンダをスキップ

«
2017年 10月
»
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

-

ログイン

ログイン

QRコード

QR code


 掲示板目次 > Magento全般 > カスタマイズ質問 新規投稿 返信投稿
 カスタムシステムメニューの項目の保存の仕組み
 
admsmith777
 2012年3月 6日 23:20 JST (参照数 13549回)  
掲示板 Junior
Junior

状態: オフライン


登録日: 2012年2月24日
投稿数: 22
管理画面の「システム > 設定」画面のうち、自作のモジュールを作成することで左メニューに独自メニューと独自メニューをクリックした後に右画面に項目が表示されるカスタマイズはできました。

項目を入力して「保存」ボタンを押した後の詳細な動きがつかめません。config.xml の resource タブ?でテーブルを設定するまではつかめたのですが、どのクラスでどのように書けばテーブルに項目の値が保存されるか分かりません。

だいたいで結構です。キーワード、ファイル名だけでも良いですので、これを見てみて!みたいなヒントをくれると助かります。

 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2012年3月 6日 23:46 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
resourceを定義したらそれに対応するresourceModelとそのCollectionクラスを定義しないといけません。テーブル名を定義しただけではダメです。

自前のテーブルを使わない場合は不要なのですが、自前のテーブルを使う場合はそれに使うSQLを含めたメソッドやクラス定義をresourceModelにしていかないとちゃんとデータが入らないし、読み出せないという落ちにはまります。

ちなみにやけっぱちになってSQL直書きとかするとセキュリティホールになるので辞めたほうがいいですね。

他のエクステンションとかを参考にするのがいいと思うので、AW_Blogとかよくできてますから参考にされるとよいでしょう。

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
hirokazu_nishi
 2012年3月 7日 12:00 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
あー。すいません。ちょっと読み間違いしてました。

システム>設定 のやつはcore_config_dataに保存されるので、SQLは不要ですね。
(いじればそういうのも作れますが)

基本は項目を増やすにはsystem.xmlに定義を書けばOKです。
あとはよろしくやってくれるはずですよ。

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
admsmith777
 2012年3月 7日 13:17 JST  
掲示板 Junior
Junior

状態: オフライン


登録日: 2012年2月24日
投稿数: 22
hirokazu_nishi さん。お返事ありがとうございます。

そうなんです、「System > Configuration」の左画面で保存される場所が、どの例を見てもエクステンションが用意したデータベースではなさそうだったので今回のような質問をさせてもらいました。なるほど!core_config_data テーブルに記憶されることを確認できました。

それはそうと、エクステンション(モジュール) に対してcore_config_data テーブルに用意されたpath カラムのデータが消えるタイミングは何時でしょう?「System > Configration > ADVANCED > Advanced」でエクステンション(モジュール) を無効にできますが、core_config_data テーブルの該当モジュールの定義?のvalue カラム値が 1 になっただけで、path カラムのデータも消えることはありません。

 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2012年3月 7日 13:31 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
あー。基本消えないんですよね。
たまり続ける一方であると。

なので、黙認するか、Mage_Core_Model_Resource_Config_Dataのインスタンスを呼び出して、明示的に削除するかです。

とはいえ「使ってない」を立証するのもめんどくさい話ではありますね。

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
admsmith777
 2012年3月 7日 13:37 JST  
掲示板 Junior
Junior

状態: オフライン


登録日: 2012年2月24日
投稿数: 22
そうなんですか・・。エクステンションをパッケージとしてインストール→削除すればきれいになるのかな?っとも期待してましたが、そうでもないんですね。Mage_Core_Model_Resource_Config_Data クラスは一度見てみます。

ところで、先の「System > Configration > ADVANCED > Advanced」の機能ですが、モジュールを無効としても、「System > Configuration」に作成した自作メニューは消えませんでした。そもそもこのモジュールを有効&無効とする機能はどのようなこと前提に利用するのでしょうか?

 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2012年3月 7日 13:42 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
その機能は、モジュールのHTMLパーツの出力を停止するだけのものです。

本当に無効にするのであれば、 app/etc/modules にあるエクステンションの名前のXMLを編集し、true 担っているところを false に変え、キャッシュをクリアする必要があります。

エクステンションをアップデート・デグレードする際には所定のスクリプトが走るように設計されているのですが、アンインストールの際にはそういう挙動を示さないので、手動でどうにかするしかないですね。
(商用エクステンションだとどうしてもそうなります)

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
admsmith777
 2012年3月 7日 19:43 JST  
掲示板 Junior
Junior

状態: オフライン


登録日: 2012年2月24日
投稿数: 22
hirokazu_nishi お返事ありがとうございます。

アンインストールの際に情報が残るのは気持ち悪いですね;

さて、勉強ついでにエクステンションをインストールする際にテーブルを作成するようconfig.xml を定義してみました。部分的な抜粋ですが、次のようなコードを用意しました。

# confix.xml

<global>
<models>
<mymodule01>
<class>MyPackage_MyModule01_Model</class>
<resourceModel>mymodule01_mysql4</resourceModel>
</mymodule01>
<mymodule01_mysql4>
<class>MyPackage_MyModule01_Model_Mysql4</class>
<entities>
<table01>
<table>mypackage_mymodule01_table01</table>
</table01>
</entities>
</mymodule01_mysql4>
</models>
</global>
<resources>
<mymodule01_setup>
<setup>
<module>MyPackage_MyModule01</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule01_setup>
<mymodule01_write>
<connection>
<use>core_write</use>
</connection>
</mymodule01_write>
<mymodule01_read>
<connection>
<use>core_read</use>
</connection>
</mymodule01_read>
</resources>

# sql/mymodule01_setup/mysql4-install-1.0.php

<?php

$installer = $this;

$installer->startSetup();

try {
$installer->run( "
DROP TABLE IF EXISTS {$this->getTable('mymodule01/table01'Wink};

CREATE TABLE {$this->getTable('mymodule01/table01'Wink} (
`id` int( 11 ) unsigned NOT NULL AUTO_INCREMENT,
`column01` varchar( 255 ) NOT NULL default '',
PRMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

INSERT INTO {$this->getTable('mymodule01/table01'Wink} (`id`, `column01` ) values ( NULL, 'test' );
" );
} catch( Exception $e ) {
}

$installer->endSetup();


そして、nishi さんに教えていただいたように、Model/Mysql4/Table01.php と Model/Mysql4/Table01/Collection.php を用意したのと、Model/Mysql4 以下はAW_Blog のような構成としてみました。f

mysql4-install-1.0.php が実行されるか不安だったので、普通のモジュールではなく、パッケージ化して、magento connect からtgz ファイルをアップロードしてインストールしました。

しかし、mypackage_mymodule01_table01 テーブルが作成されない状況です。思い当たる節として何かありませんか?


 
プロフィール メール
引用して書き込む
hirokazu_nishi
 2012年3月 7日 22:35 JST  
掲示板 管理者
管理者

状態: オフライン


登録日: 2008年2月 9日
投稿数: 470
たぶん、Setup用のクラスがないからです。

<setup>
<module>MyPackage_MyModule01</module>
</setup>


のところに、<class>タグがなく、本来そこでSetup用のクラスが指定されるんですが、指定されてないので、インストールスクリプトが実行されてないのではないかと思います。

Magento技術サポート・日本語化エクステンション・セキュリティ診断提供中です。日本語ガイドブックの販売・レンタルサーバサービス開始しました。 http://principle-works.jp/
 
プロフィール メール ホームページ
引用して書き込む
admsmith777
 2012年3月 8日 09:58 JST  
掲示板 Junior
Junior

状態: オフライン


登録日: 2012年2月24日
投稿数: 22
hirokazu_nishiさん、お返事ありがとうございます。

言われた通り、class タグを追加し空のクラスファイルも作ってみましたが、やはりインストールスクリプトが動いていないようです。AW_Blog の該当箇所では、class タグがなかったので、なにか別の問題のような気もしています。

というか、動いているか、動いているけどもエラーとなっているか判断すらできないんですね。system.log にも反応しませんでした。インストール、もしくはアップデートスクリプトのログなどを取る手段はご存知ないでしょうか?

 
プロフィール メール
引用して書き込む
内容生成: 7.60 秒
新規投稿 返信投稿


通常 通常
注目トピック 注目トピック
ロック済 ロック済
新着 新着
注目トピック 新着 注目トピック 新着
ロック済トピック 新着 ロック済トピック 新着
ゲストユーザの投稿を見る 
ゲストユーザ投稿可能 
HTML許可 
バッドワードをチェック