5

私はこれに2日間を費やしました、私はすべてを試したように感じます、それでも私は壁にぶつかり続けます。

見積もりと注文に追加したい2つの属性(module_job_id、module_channel_id)があります。私がなんとか取得したのは、quote属性が正常に機能し、データベースに保存されていることを確認でき、正常に取得できることです。

残っているのは、値を見積もりから注文に移動することだけです。私は何が間違っているのですか?

これが私のモジュール設定ファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<config>

    <modules>
        <Company_Module>
            <version>0.1.9</version>
        </Company_Module>
    </modules>

    <global>
        <fieldsets>
            <sales_convert_quote>
                <module_job_id>
                    <to_order>*</to_order>
                </module_job_id>

                <module_channel_id>
                    <to_order>*</to_order>
                </module_channel_id>
            </sales_convert_quote>
        </fieldsets>

        <resources>
            <company_module>
                <setup>
                    <module>Company_Module</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </company_module>
        </resources>

    </global>
</config>

インストールファイルsql/company_module / mysql4-install-0.1.0.php:

<?php
    $installer = $this;
    $installer->startSetup();

    $installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_job_id',
        'VARCHAR(255) NULL DEFAULT NULL');
    $installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'module_channel_id',
        'VARCHAR(255) NULL DEFAULT NULL');

    $installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_job_id',
        'VARCHAR(255) NULL DEFAULT NULL');
    $installer->getConnection()->addColumn($installer->getTable('sales/order'), 'module_channel_id',
        'VARCHAR(255) NULL DEFAULT NULL');

    $installer->addAttribute('order', 'module_job_id', array('type' => 'varchar'));
    $installer->addAttribute('quote', 'module_job_id', array('type' => 'varchar'));

    $installer->addAttribute('order', 'module_channel_id', array('type' => 'varchar'));
    $installer->addAttribute('quote', 'module_channel_id', array('type' => 'varchar'));

    $installer->endSetup();

インストールファイルでaddAttributeとaddColumnsの可能なすべての組み合わせを試しました。その結果、sales_flat_quoteとsales_flat_orderの両方の列として両方の属性を取得しました。ただし、eav_attributeにはどの属性もありません。それでいいのかわかりません。

私が試したもう1つのことは、sales_convert_quote_to_orderオブザーバーでorder属性値を明示的に設定することです。これは機能しませんでした:

public function salesConvertQuoteToOrder($observer)
{
    $order = $observer->getEvent()->getOrder();

    $order->setModuleJobId('123');
    $order->setModuleChannelId('456');
}

それが重要かどうかはわかりませんが、これらは私のシステムのエンティティタイプです(注文のみ、見積もりなし...):

mysql> SELECT entity_type_id, entity_type_code FROM eav_entity_type;
+----------------+------------------+
| entity_type_id | entity_type_code |
+----------------+------------------+
|              3 | catalog_category |
|              4 | catalog_product  |
|              7 | creditmemo       |
|              1 | customer         |
|              2 | customer_address |
|              6 | invoice          |
|              5 | order            |
|              8 | shipment         |
+----------------+------------------+

また、eav_entityは空です。それも大丈夫だといいのですが。

mysql> select * from eav_entity;
Empty set (0.00 sec)

これはMagento1.6.2.0にあります。ヒープに感謝します!

4

2 に答える 2

6

Magento 1.6.2.0 では、注文は sales_flat_order に保存され、見積もりは sales_flat_quote に保存されます。彼らはもはや eav 構造を使用していないので、問題ないと思います。クラス Mage_Sales_Model_Convert_Quote を見て、デバッグ コードを追加する必要があります。

public function toOrder(Mage_Sales_Model_Quote $quote, $order=null)
{
    if (!($order instanceof Mage_Sales_Model_Order)) {
        $order = Mage::getModel('sales/order');
    }
    /* @var $order Mage_Sales_Model_Order */

    $order->setIncrementId($quote->getReservedOrderId())
        ->setStoreId($quote->getStoreId())
        ->setQuoteId($quote->getId())
        ->setQuote($quote)
        ->setCustomer($quote->getCustomer());

    Mage::helper('core')->copyFieldset('sales_convert_quote', 'to_order', $quote, $order);

    Mage::dispatchEvent('sales_convert_quote_to_order', array('order'=>$order, 'quote'=>$quote));

    //I add my debug code here using Mage::log, you can debug using your own method
    Mage::log($order->getData());

    return $order;
}

そこに module_job_id と module_channel_id が設定されているかどうかを確認します。

于 2012-07-31T05:37:54.527 に答える
2

私のために働いた次のコードを確認してください(ただし、私のMagentoのインストールは1.7.0.2です)。問題はモデル リソースにあると思います。

アプリ/コード/ローカル/最終/テスト/etc/config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<config>
<modules>
    <Final_Test>
        <version>0.0.1</version>
    </Final_Test>
</modules>
<frontend>
    <routers>
        <test>
            <use>standard</use>
            <args>
                <module>Final_Test</module>
                <frontName>test</frontName>
            </args>
        </test>
    </routers>
</frontend>
<global>
    <models>
        <test>
            <class>Final_Test_Model</class>
            <resourceModel>test_resource</resourceModel>
        </test>
        <test_resource>
            <class>Final_Test_Model_Resource</class>
            <deprecatedNote>test_mysql4</deprecatedNote>
        </test_resource>
    </models>
    <resources>
        <test_setup>
            <setup>
                <module>Final_Test</module>
                <class>Final_Test_Model_Resource_Setup</class>
            </setup>
        </test_setup>
    </resources>
    <fieldsets>
        <sales_convert_quote>
            <final_test1>
                <to_order>*</to_order>
            </final_test1>
            <final_test2>
                <to_order>*</to_order>
            </final_test2>
        </sales_convert_quote>
        <sales_convert_order>
            <final_test1>
                <to_quote>*</to_quote>
            </final_test1>
            <final_test2>
                <to_quote>*</to_quote>
            </final_test2>
        </sales_convert_order>
    </fieldsets>
</global>
</config> 

インストーラーは Mage_Sales_Model_Resource_Setup のインスタンスである必要があるため、前述のクラスを単純に拡張する独自のクラスを作成しました

アプリ/コード/ローカル/最終/テスト/モデル/リソース/Setup.php

<?php
    class Final_Test_Model_Resource_Setup extends Mage_Sales_Model_Resource_Setup{

    }
?>

最後に、インストーラースクリプトは次のようになります

アプリ/コード/ローカル/最終/テスト/sql/test_setup/install-0.0.1.php

<?php
$installer=$this;
$installer->startSetup();
$entitiesToAlter = array('quote','order');
$attributes = array(
    'final_test1' => array(
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'default' =>5
        ),
    'final_test2' => array(
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'default' =>0
        )
    );

foreach ($entitiesToAlter as $entityName) {
    foreach ($attributes as $attributeCode => $attributeParams) {
        $installer->addAttribute($entityName, $attributeCode, $attributeParams);
    }
}
$installer->endSetup();
?>

その sql フォルダーの下にある Mage_Sales_Model_Resource_Setup および Mage_Sales モジュール インストーラー ファイルを参照して、何が起こっているかをよりよく理解することができます。

于 2012-11-04T19:49:49.230 に答える