У меня есть пользовательский файл наблюдатель.php, который создает XML-файл после создания заказа. там есть вся информация о счетах и адресах доставки, но мне тоже нужно экспортировать товары. Я попробовал больше стилей, чтобы он работал, но все равно у меня ничего не получалось. Что я должен добавить в Observer.php, чтобы включить все элементы информации?
<?php
class JULEC_Model_Observer extends Mage_Core_Model_Abstract {
public function exportObjednavky(Varien_Event_Observer $observer) {
$orderIds = $observer->getOrderIds();
for($i = 0; $i < count($orderIds); $i++) {
$order = Mage::getModel('sales/order')->load($orderIds[$i]);
$billing = $order->getBillingAddress();
$shipping = $order->getShippingAddress();
$fileContent = '<?xml version="1.0" encoding="utf-8" ?>
<mrpEnvelope>
<body>
<mrpRequest>
<request command="IMPEO0" requestId="' . date("Y-m-d-H-i-s") . '">
</request>
<data>
<params>
<paramvalue name="cisloSkladu">1</paramvalue>
<paramvalue name="stredisko">0</paramvalue>
<paramvalue name="cisloZakazky">0</paramvalue>
</params>
<objednavka formaUhrady="Dobierka" puvodniCislo="' . $order->getIncrementId() . '" datum="' . date("Y-m-d") . '" cenySDPH="F">
<mena kod="EUR" kurz="1" mnozstvi="1"/>
<adresa id="A' . $order->getIncrementId() . '" ulice="' . implode(' ', $billing->getStreet()) . '" mesto="' . $billing->getCity() . '" psc="' . $billing->getPostcode() . '">
<firma nazev="' . $billing->getLastname() . ' ' . $billing->getFirstname() . '" ico="X' . $order->getIncrementId() . '" dic=""/>
<osoba jmeno="' . $billing->getCompany() . '" prijmeni=""/>
<email>' . $billing->getEmail() . '</email>
<tel>' . $billing->getTelephone() . '</tel>
</adresa>';
$sameAddress = $this->compareAddresses($billing, $shipping);
if(!$sameAddress) {
$fileContent .= '
<adresa_dod id="" ulice="' . implode(' ', $shipping->getStreet()) . '" mesto="' . $shipping->getCity() . '" psc="' . $shipping->getPostcode() . '">
<firma nazev="' . $shipping->getLastname() . ' ' . $shipping->getFirstname() . '" ico="X' . $order->getIncrementId() . '" dic=""/>
<osoba jmeno="' . $shipping->getCompany() . '" prijmeni=""/>
<email>' . $shipping->getEmail() . '</email>
<tel>' . $shipping->getTelephone() . '</tel>
</adresa_dod>
';
}
//need to get here list of items with its values //
$fileContent .= '<ITEMS><item =" ???SKU??? "text=" ??? ITEM NAME ??? "price=" ??? ITEM PRICE ???? "qty=" ??? ITEM QTY ??? "tax=" ??? ITEM TAX RATE ??? " /></ITEMS>
</objednavka>
</data>
</mrpRequest>
</body>
</mrpEnvelope>
';
file_put_contents('var/export_objednavky/' . date("Y-m-d-H-i-s") . '-' . $order->getIncrementId() . '.xml', $fileContent);
}
}
public function compareAddresses($address1, $address2) {
if (!is_null($address1) && !is_null($address2)) {
if ($address1->getFirstname() != $address2->getFirstname())
return false;
if ($address1->getLastname() != $address2->getLastname())
return false;
if ($address1->getCompany() != $address2->getCompany())
return false;
if (implode(' ', $address1->getStreet()) != implode(' ', $address2->getStreet()))
return false;
if ($address1->getCountryId() != $address2->getCountryId())
return false;
if ($address1->getPostcode() != $address2->getPostcode())
return false;
if ($address1->getCity() != $address2->getCity())
return false;
}
return true;
}
}
Если я вас правильно понимаю, вы можете попробовать что-то вроде:
foreach ($order->getAllItems() as $item) {
$itemSku = $item->getSku();
$itemName = $item->getName();
$itemPrice = $item->getPrice()
/* etc */
}
Других решений пока нет …