public function process() { function addToXml($xml, $parent, $nodeName, $text) { $node = $parent->appendChild($xml->createElement($nodeName)); $node->appendChild($xml->createTextNode($text)); return $node; } header("Content-Type: text/xml"); header("Expires: Thu, 19 Feb 1998 13:24:18 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: post-check=0,pre-check=0"); header("Cache-Control: max-age=0"); header("Pragma: no-cache"); $xml = new \DOMDocument('1.0', 'windows-1251'); $xml->formatOutput = true; $root = $xml->createElement('КоммерческаяИнформация'); $root->setAttribute("ВерсияСхемы", "2.03"); $root->setAttribute("ДатаФормирования", date('Y-m-d')); $root = $xml->appendChild($root); $carts = \Ecommerce\Cart::getList(['where' => ['cart_status_id', empty(\App::$cur->Exchange1c->config['uploadStatusId']) ? '3' : \App::$cur->Exchange1c->config['uploadStatusId'], 'IN']]); foreach ($carts as $cart) { $doc = $xml->createElement('Документ'); $statusDateTime = new \DateTime($cart->complete_data); $items = $cart->cartItems; if (!$items) { continue; } $goodss = $xml->createElement('Товары'); $sum = 0; foreach ($items as $cartitem) { $goods = $goodss->appendChild($xml->createElement('Товар')); $id1c = \App::$cur->migrations->findParse($cartitem->price->offer->item_id, 'Ecommerce\\Item'); if ($id1c) { addToXml($xml, $goods, 'Ид', $id1c->parse_id); } addToXml($xml, $goods, 'Наименование', $cartitem->item->name); $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт'); $one->setAttribute("Код", "796"); $one->setAttribute("НаименованиеПолное", "Штука"); $one->setAttribute("МеждународноеСокращение", "PCE"); addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cartitem->final_price); addToXml($xml, $goods, 'Количество', $cartitem->count); addToXml($xml, $goods, 'Сумма', $cartitem->final_price * $cartitem->count); $sum += $cartitem->final_price * $cartitem->count; $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов')); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры'); addToXml($xml, $req, 'Значение', 'Товар'); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры'); addToXml($xml, $req, 'Значение', 'Товар'); } foreach ($cart->extras as $extra) { $goods = $goodss->appendChild($xml->createElement('Товар')); addToXml($xml, $goods, 'Наименование', $extra->name); $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт'); $one->setAttribute("Код", "796"); $one->setAttribute("НаименованиеПолное", "Штука"); $one->setAttribute("МеждународноеСокращение", "PCE"); addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $extra->price); addToXml($xml, $goods, 'Количество', $extra->count); addToXml($xml, $goods, 'Сумма', $extra->price * $extra->count); $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов')); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры'); addToXml($xml, $req, 'Значение', 'Товар'); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры'); addToXml($xml, $req, 'Значение', 'Товар'); } if ($cart->delivery && $cart->delivery->price && $sum < $cart->delivery->max_cart_price) { $sum += $cart->delivery->price; $goods = $goodss->appendChild($xml->createElement('Товар')); addToXml($xml, $goods, 'Наименование', 'Доставка'); $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт'); $one->setAttribute("Код", "796"); $one->setAttribute("НаименованиеПолное", "Штука"); $one->setAttribute("МеждународноеСокращение", "PCE"); addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cart->delivery->price); addToXml($xml, $goods, 'Количество', 1); addToXml($xml, $goods, 'Сумма', $cart->delivery->price); $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов')); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры'); addToXml($xml, $req, 'Значение', 'Услуга'); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры'); addToXml($xml, $req, 'Значение', 'Услуга'); } addToXml($xml, $doc, 'Ид', $cart->id); addToXml($xml, $doc, 'Номер', $cart->id); addToXml($xml, $doc, 'Дата', $statusDateTime->format('Y-m-d')); addToXml($xml, $doc, 'ХозОперация', 'Заказ товара'); addToXml($xml, $doc, 'Роль', 'Продавец'); addToXml($xml, $doc, 'Валюта', 'руб'); addToXml($xml, $doc, 'Курс', '1'); addToXml($xml, $doc, 'Сумма', $sum); $agents = $doc->appendChild($xml->createElement('Контрагенты')); $agent = $agents->appendChild($xml->createElement('Контрагент')); $user = $cart->user; addToXml($xml, $agent, 'Ид', $user->id); addToXml($xml, $agent, 'ИдРодителя', $user->parent_id); addToXml($xml, $agent, 'Наименование', $user->name()); addToXml($xml, $agent, 'Роль', $user->role->name); addToXml($xml, $agent, 'ПолноеНаименование', $user->name()); $reg = $agent->appendChild($xml->createElement('АдресРегистрации')); addToXml($xml, $reg, 'Представление', ''); $presents = $agent->appendChild($xml->createElement('Представители')); $present = $presents->appendChild($xml->createElement('Представитель')); $presentAgent = $present->appendChild($xml->createElement('Контрагент')); addToXml($xml, $presentAgent, 'Отношение', 'Контактное лицо'); addToXml($xml, $presentAgent, 'Ид', $user->id); addToXml($xml, $presentAgent, 'Наименование', $user->name()); addToXml($xml, $doc, 'Время', $statusDateTime->format('H:i:s')); addToXml($xml, $doc, 'Комментарий', $cart->comment); $goodss = $doc->appendChild($goodss); $reqs = $doc->appendChild($xml->createElement('ЗначенияРеквизитов')); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Метод оплаты'); if ($cart->payType) { addToXml($xml, $req, 'Значение', $cart->payType->name); } else { addToXml($xml, $req, 'Значение', 'Наличный расчет'); } $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Заказ оплачен'); addToXml($xml, $req, 'Значение', $cart->payed ? 'true' : 'false'); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Доставка разрешена'); addToXml($xml, $req, 'Значение', $cart->delivery ? 'true' : 'false'); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Отменен'); addToXml($xml, $req, 'Значение', 'false'); if (!empty(\App::$primary->exchange1c->config['queryCartFieldGroups'])) { $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); foreach (\App::$primary->exchange1c->config['queryCartFieldGroups'] as $group) { addToXml($xml, $req, 'Наименование', $group['name']); $string = ''; foreach ($group['parts'] as $part) { switch ($part['type']) { case 'text': $string .= $part['text']; break; case 'field': $value = \Ecommerce\Cart\Info::get([['useradds_field_id', $part['field']], ['cart_id', $cart->id]]); $string .= $value->value; break; } } addToXml($xml, $req, 'Значение', $string); } } foreach ($cart->infos as $value) { $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', $value->name); addToXml($xml, $req, 'Значение', $value->value); } $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Статус заказа'); addToXml($xml, $req, 'Значение', $cart->status->name); $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита')); addToXml($xml, $req, 'Наименование', 'Дата изменения статуса'); addToXml($xml, $req, 'Значение', $statusDateTime->format('Y-m-d H:i:s')); $doc = $root->appendChild($doc); } echo $xml->saveXML(); $this->end(); }
function indexAction() { function addToXml($xml, $parent, $nodeName, $text) { $node = $parent->appendChild($xml->createElement($nodeName)); $node->appendChild($xml->createTextNode($text)); return $node; } $imp = new DOMImplementation(); $dtd = $imp->createDocumentType('yml_catalog', '', 'shops.dtd'); $xml = $imp->createDocument('', '', $dtd); $xml->encoding = 'UTF-8'; $xml->formatOutput = true; $root = $xml->createElement('yml_catalog'); $root->setAttribute("date", date('Y-m-d H:i')); $root = $xml->appendChild($root); $shop = $xml->createElement('shop'); addToXml($xml, $shop, 'name', \App::$cur->config['site']['name']); addToXml($xml, $shop, 'company', \App::$cur->config['site']['company_name']); addToXml($xml, $shop, 'url', 'http://' . INJI_DOMAIN_NAME); $currencies = $xml->createElement('currencies'); $currency = $currencies->appendChild($xml->createElement('currency')); $currency->setAttribute('id', 'RUR'); $currency->setAttribute('rate', '1'); $currency->setAttribute('plus', ''); $shop->appendChild($currencies); $categories = $xml->createElement('categories'); foreach (Ecommerce\Category::getList() as $category) { $xmlCategory = addToXml($xml, $categories, 'category', $category->name); $xmlCategory->setAttribute('id', $category->id); if ($category->parent_id) { $xmlCategory->setAttribute('parentId', $category->parent_id); } } $shop->appendChild($categories); addToXml($xml, $shop, 'local_delivery_cost', '300'); $offers = $xml->createElement('offers'); foreach (App::$cur->ecommerce->getItems() as $item) { $offer = $offers->appendChild($xml->createElement('offer')); addToXml($xml, $offer, 'url', 'http://' . INJI_DOMAIN_NAME . '/ecommerce/view/' . $item->id); addToXml($xml, $offer, 'price', $item->getPrice()->price); addToXml($xml, $offer, 'currencyId', 'RUR'); addToXml($xml, $offer, 'categoryId', $item->category_id); addToXml($xml, $offer, 'delivery', 'true'); addToXml($xml, $offer, 'local_delivery_cost', '300'); addToXml($xml, $offer, 'vendor', 'vendor'); addToXml($xml, $offer, 'model', 'model'); addToXml($xml, $offer, 'description', $item->description); addToXml($xml, $offer, 'manufacturer_warranty', 'true'); addToXml($xml, $offer, 'country_of_origin', 'Китай'); foreach ($item->options as $option) { $param = addToXml($xml, $offer, 'param', $option->value); $param->setAttribute('name', $option->item_option_name); if ($option->item_option_postfix) { $param->setAttribute('unit', $option->item_option_postfix); } } } $shop->appendChild($offers); $root->appendChild($shop); header("Content-Type: text/xml"); header("Expires: Thu, 19 Feb 1998 13:24:18 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: post-check=0,pre-check=0"); header("Cache-Control: max-age=0"); header("Pragma: no-cache"); echo $xml->saveXML(); }