0

管理セクションから注文が行われた後、イベント オブザーバーがログを作成しています。これをログ ファイルではなくデータベースに挿入するにはどうすればよいですか? 誰でも良いチュートリアルを提供できますか。

4

1 に答える 1

2

http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-5-magento-models-and-orm-b​​asics/

まず、config.xml に setup/read/write セクションを追加する必要があります。モジュールがテスト/デモであるとしましょう。セットアップ セクションは次のようになります。

  <models>
     <demo>
        <class>Test_demo_Model</class>
        <resourceModel>Demo_mysql4</resourceModel>
     </demo>
     <demo_mysql4>
        <class>Test_Demo_Model_Mysql4</class>
        <entities>
           <demo>
              <table>test_demo</table>
           </demo>
        </entities>
     </demo_mysql4>
  </models>
  <resources>
     <demo_setup>
        <setup>
           <module>Test_demo</module>
           <class>Test_Demo_Model_Resource_Mysql4_Setup</class>
        </setup>
        <connection>
           <use>core_setup</use>
        </connection>
     </demo_setup>
     <demo_write>
        <connection>
           <use>core_write</use>
        </connection>
     </demo_write>
     <demo_read>
        <connection>
           <use>core_read</use>
        </connection>
     </demo_read>
  </resources>

この時点で、magento がモデルをロードするためにモデルを初期化する必要があります。'demo/ _ ' は、モジュール全体で同じものを維持する限り、'demo/whateveryouwant' にすることができます。「id」は、magento がこのモデルに使用する主キーと識別子です。

//Test/Demo/Model/Mysql4/Comment.php
class Test_Demo_Model_Mysql4_Comment extends Mage_Core_Model_Mysql4_Abstract
{
    protected function _construct()
    {
        $this->init('demo/________', 'id');
    {
}

ここから、データベース インストール スクリプトを作成する必要があります。これは、ファイル Test/Demo/sql/demo_setup/mysql4-install-0.1.0.php を作成するだけで実行できます。ここで、0.1.0 は構成ファイルで使用されるバージョン番号です。次のようになります。

$installer = $this;
$installer->startSetup()
$installer->run("
    #your create table goes here
");
$installer->endSetup();

これが行うことは、テーブルを作成することです。使用できます

CREATE TABLE {$installer ->getTable('demo/_____') as defined in your configuration file to create the table name used in the file. This will also create an entry in the table core_resource that will specify the name and version number. In order to make a modification to the table you'll need to delete the original table as well as it's entry in core_resource. At this point you'll want to create a model to manage the data. Here's an example of that for a table that looks like: 

//comment  -String
//poster   -String
//Id       -int autoincrement
public function addComment($comment, $poster)
{
    $comment = Mage::getModel('Demo/______');
    $comment->setComment($comment);
    $comment->setPoster($poster);
    $comment->save();
}

poster_id などの列名には、setPosterId を使用します。キャメルケースを使用すると、各大文字は事前にアンダースコアを示します。

Poster_Id -> PosterId posterid -> Posterid

データベースから値を取得するには:

//using the same database example as above
public function getAllByPoster($poster)
{
    $collection = Mage::getModel('Demo/________')->getCollection();
    $collection->addFilter('poster', $poster);
    return collection;
}

これにより、特定の投稿者によるすべての投稿が返されます。ただし、1 つ問題があります。このクラスには get コレクションが定義されていません。getAllByPoster からこれらの結果を表示する方法を確認する前に、作成する最後のファイルが 1 つあります。

//Test/Demo/Model/Mysql4/Comment/Collection.php
class Test_Demo_Model_Mysql4_Comment_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
    protected function _construct()
    {
        $this->_init('comments/comment');
    }
}

この時点で、magento のクラスを使用してデータベースを読み書きするために必要なものはすべて揃っています。コレクションを印刷するには、次のようにします。

foreach (Mage::getModel('demo/_____')->getAllByPoster($id) as $something)

それらから取得したい個々の属性を表示します。

于 2012-07-16T15:48:58.803 に答える