0

管理バックエンドで設定された属性に基づいてカスタム電子メール アドレスに電子メールを送信しようとしています。Magento の経験がなく、これは私を少し超えています。必要なものを入手するための注文のロジックをどこに持っていくべきかわかりません(そして、いくつかのアイテムが注文され、中古/新品/ポスターである場合、3つのメールを送信する必要があるため、foreachになります

各アイテムを選び出し、その属性を取得して、foreach を実行する必要があることはわかっていますが、Magento のスキルを失ってしまいました。

私はこの質問の回答から始めて、良いスタートを切りました: マジェントでカテゴリベースの注文メールを送信する方法は?

(編集 1 & 2: Observer.php ファイルの内容を変更)

(編集 3: config.xml、Data.php、Company_Module.xml コンテンツを追加)

{MagentoDir}app/etc/modules/Company_Module.xml ファイル:

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <active>true</active>
            <codePool>core</codePool>
        </Company_Module>
    </modules>
</config>

{MagentoDir}app/code/local/Company/Module/etc/config.xml ファイル:

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <version>0.1.0</version>
        </Company_Module>
    </modules>
    <global>
        <models>
            <company_module>
                <class>Company_Module_Model</class>
            </company_module>
        </models>
        <helpers>
            <cmod>
                <class>Company_Module_Helper</class>
            </cmod>
        </helpers>
        <events>
            <sales_order_place_after>
                <observers>
                    <sales_order_place_after_observer>
                        <class>company_module/observer</class>
                        <method>handleOrder</method>
                    </sales_order_place_after_observer>
                </observers>
            </sales_order_place_after>
        </events>
    </global>
</config>

{MagentoDir}app/code/local/Company/Module/Helper/Data.php ファイル:

<?php

class Company_Module_Helper_Data extends Mage_Core_Helper_Abstract
{

}

?>

{MagentoDir}app/code/local/Company/Module/Model/Observer.php ファイル:

<?php

class Company_Module_Model_Observer
{
    public function handleOrder($observer)
    {
        $order = $observer->getEvent()->getOrder();   
        // logic to find what was ordered
        $items = $order->getAllVisibleItems();

        $attributeType = array();
        foreach($items as $itemId => $item)
        {
            $product = Mage::getModel('catalog/product')->load($item->getProductId());

            //Once we have the product, we search the attribute set
            $attributeSetId = $product->getAttributeSetId();

            // get attribute
            $type = $product->getDataSource();

            var_dump($type);
            Mage::log('My text' . $type);

            // get item info and create array for each attribute
            $attributeType[$type][] = array(
                'name'      => $item->getName(),
                'unitPrice' => $item->getPrice(),
                'sku'       => $item->getSku(),
                'ids'       => $item->getProductId(),
                'qty'       => $item->getQtyToInvoice()
            );
        }

        foreach($attributeType as $orderType => $orderGroup)
        {
            // send email based on what was ordered
            $emailTemplate = Mage::getModel('core/email_template')->loadDefault('my_template');                            
            $emailTemplateVariables = array();
            $emailTemplateVariables['order'] = json_encode($orderGroup);        
            $emailTemplate->setSenderName('Site');
            $emailTemplate->setSenderEmail('sales@site.com');

            switch ($orderType)
            {
                case 'used':
                    $emailTemplate->setTemplateSubject('Used order at Site');
                    $emailTemplate->send('me@site.com', 'Site', $emailTemplateVariables);
                    break;
                case 'poster':
                    $emailTemplate->setTemplateSubject('Poster order from Site');
                    $emailTemplate->send('me@site.com', 'Site', $emailTemplateVariables);
                    break;
                default:
                    $emailTemplate->setTemplateSubject('New order at Site');
                    $emailTemplate->send('me@site.com', 'Site', $emailTemplateVariables);
                    break;
            }
        }
    }
}

?>

3 つの個別のメール アドレスになります。テストのために私に送信されます。

(編集 4: システム ログ ファイルの内容)

{MagenetoDir}var/log/system.log

2013-08-02T16:55:07+00:00 DEBUG (7): Dhtechnologies_Ediconnectorbase_Model_Observer::processDocuments finished
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): Entity: line 1: parser error : attributes construct error  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): <xml version="1.0"?>  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string():                   ^  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): Entity: line 1: parser error : Couldn't find end of Start Tag xml line 1  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): <xml version="1.0"?>  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string():                   ^  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): Entity: line 1: parser error : Extra content at the end of the document  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string(): <xml version="1.0"?>  in /www/html/lib/Varien/Simplexml/Config.php on line 510
2013-08-02T16:56:01+00:00 ERR (3): Warning: simplexml_load_string():                   ^  in /www/html/lib/Varien/Simplexml/Config.php on line 510

ウォークスルーを読みました: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method

私は問題をグーグルで検索しました。

4

2 に答える 2

0

これを試して:

class Company_Module_Model_Observer  
{
    public function handleOrder($observer)
    {
        $order = $observer->getEvent()->getOrder();
        $items = $order->getAllVisibleItems();
        foreach($items as $item){
            $product = Mage::getModel('catalog/product')->load($item->getProductId());
            //Once we have the product, we search the attribute Data Source
            $dataSource = $product->getDataSource();
            var_dump($dataSource);
        }
于 2013-07-30T15:32:36.207 に答える