Как использовать модель Event-Observer, отправить номер заказа во внешний файл PHP и включить этот внешний файл PHP в Observer.php в Magento? - PullRequest
0 голосов
/ 17 марта 2012

Я использую модель Magento Event-Observer в событии sales_order_place_after , чтобы получить идентификатор заказа (инкрементный идентификатор) из Magento, то есть в событии , как только клиент нажмет кнопку PLACEЗАКАЗ .Для этого я создал config.xml & Observer.php .

/ xampp / htdocs / localhost / magento / app / code / local / Sample / Event / etc / config.xml

config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Sample_Event>
            <version>0.1.0</version>
        </Sample_Event>
    </modules>
    <global>
        <events>
            <sales_order_place_after>
                <observers>
                    <Sample_Event_Model_Observer>
                        <type>singleton</type>
                        <class>Sample_Event_Model_Observer</class>
                        <method>Mytestmethod</method>
                    </Sample_Event_Model_Observer>
                </observers>
            </sales_order_place_after>
        </events>
    </global>
</config>

/ xampp / htdocs / localhost / magento / app / code / local / Sample / Event / Model / Observer.php Observer.php

<?php

 include("connection/Final/Function1.php");


class Sample_Event_Model_Observer 
{
    public function Mytestmethod($observer) 
   {
      $event = $observer->getEvent();       
    $eventmsg = "Current Event Triggered : <I>" . $event->getName() . "</I>";
      echo Mage::getSingleton('checkout/session')->addSuccess($eventmsg);

    $Id = $observer->getEvent()->getOrder()->getId();   
    $incrementid = $observer->getEvent()->getOrder()->getIncrementId();

    $ordermsg1 = "Current order Id : <I>" . $Id . "</I>";
        echo Mage::getSingleton('checkout/session')->addSuccess($ordermsg1);
    $ordermsg2 = "Current increment Id : <I>" . $incrementid . "</I>";
        echo Mage::getSingleton('checkout/session')->addSuccess($ordermsg2);

       /* $cURL = curl_init();   //this isn't work for me
        curl_setopt($cURL, CURLOPT_URL, "http://localhost/magento/connection/Final/Function1.php?order_id=<?php echo $incrementid ?>"); 
        curl_setopt($cURL, CURLOPT_HEADER, 0); 
        curl_exec($cURL); 
        curl_close($cURL); 
       */ 

        $p = new testDatabase();      //this isn't work for me
        $p -> setId($incrementid);
        $p -> dbConnect();  
    }
}

?>

В Observer.php я получаю номер заказа (инкрементный идентификатор), как только клиент размещает заказ.Теперь моя цель состоит в том, чтобы передать этот номер заказа внешнему php-файлу Function1.php, функция которого зависит от номера заказа (инкрементный идентификатор). Function1.php

<?php 

    //$orderID = $_GET['incrementid']; 
    //echo $orderID;    
class testDatabase 
{    
    public function setId($getId) //get Order Id i.e. Increment id from Observer.php which is not working for me
    {
        $incrementid=$getId;
        echo **$incrementid**;
    }   
    public function dbConnect()   //connect to magento database
    {   
      $db_name = "magento";
        $con = mysql_connect("localhost", "magento", "password");

        If (!$con)
        {
            die('Could not connect: ' . mysql_error());
        }
        $seldb = mysql_select_db($db_name, $con);
        If ($seldb) 
        {
            echo "Database Found ";
        }
        else 
        {
            echo "Database NOT Found ";
        } 
     }

    public function dbInsert()  //insert into magento's newly created custom table based on **increment id**.
      {
       echo "<br />";
      $query = "INSERT INTO mysql_outbound(po_number , created_at , buyer_customer_firstname , buyer_customer_lastname , buyer_customer_email , 
shipping_description , ship_to_firstname, ship_to_lastname, ship_to_company, ship_to_street, ship_to_city, ship_to_region, 
ship_to_country_id, ship_to_postcode, ship_to_telephone, bill_to_firstname, bill_to_lastname, bill_to_company, bill_to_street, bill_to_city, 
bill_to_region, bill_to_country_id, bill_to_postcode, bill_to_telephone, dealer_group_code, customer_group_code, dealer_firstname, 
dealer_lastname, customer_firstname, customer_lastname, increment_id, order_primary) 
SELECT sfop.`po_number`,sfo.`created_at`,sfo.`customer_firstname` , sfo.`customer_lastname` , sfo.`customer_email` , sfo.`shipping_description` , 
sfoa. firstname, sfoa. lastname, sfoa. company, sfoa. street, sfoa. city, sfoa. region, sfoa.country_id, sfoa. postcode, sfoa. telephone, sfoa1. firstname,
sfoa1. lastname, sfoa1. company, sfoa1. street, sfoa1. city, sfoa1. region, sfoa1.country_id, sfoa1. postcode, sfoa1. telephone, cg. customer_group_code,
cg1. customer_group_code, cev. value, cev1. value, cev2. value, cev3. value, sfo.`increment_id`, 
(select mo.order_primary from mysql_outbound mo where mo.increment_id = sfo.increment_id)
FROM `sales_flat_order_payment` sfop, `sales_flat_order` sfo, `sales_flat_order_address` sfoa,`sales_flat_order_address` sfoa1,`customer_entity` ce,`customer_entity` ce1,
`customer_group`  cg,`customer_group`  cg1,`customer_entity_varchar` cev, `customer_entity_varchar` cev1,`customer_entity_varchar` cev2,
`customer_entity_varchar` cev3
WHERE sfo.`entity_id` = sfop.`parent_id` 
    AND sfo.`shipping_address_id` = sfoa.`entity_id`
    AND sfo.`billing_address_id` = sfoa1.`entity_id`
    AND sfo. ge_dealer_id =  ce. entity_id
    AND ce. group_id = cg. customer_group_id
    AND sfo. ge_customer_id = ce1. entity_id
    AND ce1. group_id = cg1. customer_group_id
    AND sfo. ge_dealer_id = cev.entity_id
    AND cev. attribute_id = 5
    AND sfo. ge_dealer_id = cev1.entity_id
    AND cev1. attribute_id = 7
    AND sfo. ge_customer_id = cev2.entity_id
    AND cev2. attribute_id = 5
    AND sfo. ge_customer_id = cev3.entity_id
    AND cev3. attribute_id = 7
    AND sfo.`increment_id` = **$incrementid**";  //will need to pass increment id here

            $result = mysql_query($query);
     }

    public function dbFetch()       //fetch data from magento
    {
        global $str; 
        echo "<br />";
            $a = mysql_insert_id();
        echo $a;
        echo "<br />";    
            $result2 = mysql_query("SELECT * FROM mysql_outbound where order_primary = $a");
        while($row = mysql_fetch_array($result2))
        {   
            $str = "'". $row["po_number"] . "',". "'" . $row[created_at] . "'," . "'" . $row["buyer_customer_firstname"] . "',". "'" . $row["buyer_customer_lastname"] . "'," . "'" . $row["buyer_customer_email"] . "'," . "'" . $row["shipping_description"]. "'," . "'" . $row["ship_to_firstname"] . "'," . "'" . $row["ship_to_lastname"] ."'," . "'" . $row["ship_to_company"] . "'," . "'" . $row["ship_to_street"] ."'," ."'" . $row["ship_to_city"] . "'," ."'" . $row["ship_to_region"] . "'," ."'" . $row["ship_to_country_id"] ."'," ."'" . $row["ship_to_postcode"]."'," ."'" . $row["ship_to_telephone"] . "'," ."'" . $row["bill_to_firstname"] . "'," ."'" . $row["bill_to_lastname"] ."'," ."'" . $row["bill_to_company"]."'," ."'" . $row["bill_to_street"] . "'," ."'" . $row["bill_to_city"] ."'," ."'" . $row["bill_to_region"] . "'," ."'" . $row["bill_to_country_id"] ."'," ."'" . $row["bill_to_postcode"] . "'," ."'" . $row["bill_to_telephone"] . "'," ."'" . $row["dealer_group_code"] ."'," ."'" . $row["customer_group_code"]."'," ."'" . $row["dealer_firstname"] . "'," ."'" . $row["dealer_lastname"] ."'," ."'" . $row["customer_firstname"] . "'," ."'" . $row["customer_lastname"] ."'," ."'" . $row["increment_id"] . "'," . $row["order_primary"];
            } 
    }

     public function dbDisconnect()     //close mysql connection
     {   
        echo "<br />";
          If($this->con)   
          {   
               If(mysql_close())   
               {   
                $this->con = false;   
                return true;
               }   
               else  
               {   
                return false;   
               }   
           }
        }

}

Теперь я хочу включить этот файл Function1.php в Observer.php, чтобы, как только клиент нажал кнопку PLACE ORDER, вкладка Function1Файл .php получит № заказа и выполнит в нем запросы.Я просто хотел вставить данные в пользовательскую таблицу, которую необходимо отправить во внешнюю систему, т.е. в Oracle.Поскольку мы не хотим прикасаться к основным таблицам Magento, поэтому создали пользовательскую таблицу для этой же ..

Теперь мои вопросы:

  1. Как передать № заказа из Observer.phpto Function1.php?
  2. Как включить Function1.php в Observer.php, чтобы после размещения заказа клиент выполнял этот файл, получая № заказа для выполнения работы?

Пожалуйста, предоставьте мне свою помощь или пример кода для того же ...

Я пытался соединиться с созданием объекта и доступом к функциям, но не смог этого сделать.

Также пытался использовать cURLно это также не сработало для меня ...

Ожидание ответов и предложений ...

1 Ответ

0 голосов
/ 17 марта 2012

Ну, я бы начал с того, что сделаю ваш внешний класс частью модуля Magento.Затем вы можете создать свой собственный ресурс / помощники для подключения к другой базе данных.

В вашем модуле config.xml

 <mymodule_setup>
    <connection>
    <host>< ![CDATA[hostname]]></host>
    <username>< ![CDATA[username]]></username>
    <password>< ![CDATA[password]]></password>
    <dbname>< ![CDATA[dbname]]></dbname>
    <model>mysql4</model>
    <initstatements>SET NAMES utf8</initstatements>
    <type>pdo_mysql</type>
    <active>1</active>
    </connection>
</mymodule_setup>
<mymodule_write>
    <connection>
    <use>mymodule_setup</use>
    </connection>
</wp_write>
<mymodule_read>
    <connection>
    <use>mymodule_setup</use>
    </connection>
</mymodule_read>

Затем вы можете получить доступ к этой БД в любом месте из Magento с помощью

$read = Mage::getSingleton('core/resource')->getConnection('mymodule_read');
$write = Mage::getSingleton('core/resource')->getConnection('mymodule_write');

Это даст вам экземпляр Zend DB , с которым вы можете делать все, что захотите.Это избавит вас от необходимости возиться с передачей данных из Magento в другое место, включая внешние классы и т. Д.

...