2011-09-22 12 views
1

名前と製品情報を外部データベースに渡すために使用するカスタムモジュールをMagentoで作成しました。これらの変数は、注文が送信された後に外部データベースに渡す必要があります。ここで私は(3つのファイル)これまで持っているものです。注文データを外部データベースにエクスポートするMagentoカスタムモジュール

これは、次のディレクトリにあります。config.xmlファイル、次のとおりです。アプリ/コード/ローカル/仕入/ Modhereの/ etc/

<?xml version="1.0"?> 
<config> 
    <global> 
    <models> 
     <Companyname_Modhere> 
      <class>Exp_Data_Model</class> 
     </Companyname_Modhere> 
    </models> 
    <events> 
     <sales_order_payment_pay> 
     <observers> 
      <companyname_modhere_observer> 
      <type>singleton</type> 
      <class>Exp_Data_Model_Order_Observer</class> 
      <method>external_notification_trigger</method> 
      </companyname_modhere_observer> 
     </observers> 
     </sales_order_payment_pay>  
    </events> 
    </global> 
</config> 

アプリの/ etc /モジュール/

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Companyname_Modhere> 
     <codePool>local</codePool> 
     <active>true</active> 
    </Companyname_Modhere> 
    </modules> 
</config> 

これはObserver.phpファイルで、どこがトラブルを抱えている:これは、次のディレクトリにありますCompanyname_Modhere.xmlファイルです。これは、次のディレクトリにあります: アプリ/コード/ローカル/仕入/ Modhere /モデル/

<?php 
class Exp_Data_Model_Order_Observer 
{ 
    public function __construct() 
    { 
    } 

    public function external_notification_trigger($observer) 
    { 

    $orderId = $observer->getPayment()->getOrder()->getId(); 
    $orderNumber = $observer->getPayment()->getOrder()->getIncrementId(); 

    return $this; 
    } 
} 

をそれに沿って渡すことができるように、私は、ファーストネーム、姓、数量、およびPRODUCTNAMEを保存するには、このモジュールを必要とします他のデータベースに転送します。正しい軌道にいるのですか?

答えて

4

私はあなたのためにあなたの例を整理しました。あなたは 'version'要素がありませんでしたし、モジュール名に誤ってマッチするクラス名がありました。これはまだ100%ではありませんが、観察者の問題をもっと近づけてうまく解決するはずです。

/app/etc/modules/Companyname_Modhere.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Companyname_Modhere> 
      <codePool>local</codePool> 
      <active>true</active> 
      <depends> 
       <Mage_Core /> 
       <Mage_Sales /> 
      </depends> 
     </Companyname_Modhere> 
    </modules> 
</config> 

/app/code/local/Companyname/Modhere/etc/config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <version>1.0.0</version> 
    </modules> 
    <global> 
     <models> 
      <Companyname_Modhere> 
       <class>Companyname_Modhere_Model</class> 
      </Companyname_Modhere> 
     </models> 
     <events> 
      <sales_order_payment_pay> 
       <observers> 
        <Companyname_Modhere> 
         <type>singleton</type> 
         <class>Companyname_Modhere/Observer</class> 
         <method>orderPaid</method> 
        </Companyname_Modhere> 
       </observers> 
      </sales_order_payment_pay>  
     </events> 
    </global> 
</config> 

/アプリケーション/コード/ローカル/Companyname/Modhere/Model/Observer.php

<?php 
class Companyname_Modhere_Model_Observer 
{ 
    public function orderPaid(Varien_Event_Observer $observer) 
    { 
     $order = $observer->getPayment()->getOrder(); 

     $data = array(); 
     $data['id'] = $order->getIncrementId(); 
     $data['first_name'] = $order->getCustomerFirstname(); 
     $data['last_name'] = $order->getCustomerLastname(); 
     $data['items'] = array(); 
     foreach ($order->getAllItems() as $orderItem) { 
      $item = array(); 

      $item['sku'] = $orderItem->getSku(); 
      $item['qty'] = $orderItem->getQtyOrdered(); 

      $data['items'][] = $item; 
     } 

     // TODO: Do something with your data array 
    } 
} 
+1

感謝。これは非常に役に立ちます。 Observer.phpファイルでは、顧客と製品の情報を収集し、それを他のデータベースに渡す必要があります。コードの最後の部分をどのように進めるかに関するアドバイスはありますか? – linnse

+0

私は答えにもう少し詳しく述べました。それを再度読んでください。 –

+0

ありがとう!私は本当に助けに感謝します。 Magentoに 'get'関数/メソッドが組み込まれていますか? (ちょうど大きな絵を理解しようとする)。 – linnse

0

あなたは.TXT/CSV/XML/PHPファイルにエクスポートして、データベースとそこからそれをつかむことができます。このような

何か:

// choose correct path 
    $path = $_SERVER['DOCUMENT_ROOT'] . '/magento/folder/orders/'; 
    if (!is_dir($path)) { 

     mkdir($path); 
    } 

    // create filename 
    $orderId = Mage::getSingleton('checkout/type_onepage') 
     ->getCheckout()->getLastOrderId(); 
    $order = Mage::getModel('sales/order')->load($orderId); 
    $orderNo = $order->getIncrementId(); 

    // format 20090403_141048_order_100000007_7.xml 
    $filename = date('Ymd_His') . '_order_' . $orderNo . '_' . $orderId . '.txt'; 

    // create content 
    $content = 'content here....'; // create TXT Data here 

    // write file to server 
    file_put_contents($path . $filename, $content); 
関連する問題