Александр Локтионов, а можно ведь ещё уменьшить кол-во запросов к базе, дерните одним методом сразу все значения по этому свойству и сложите также в массив, а потом из него и дергайте. Кол-во запросов уменьшится на N-1, где N - кол-во вариантов значения свойства.
Используем такой скрипт для этих целей, загрузите файл на сервер, на странице скрипта выбираете нужный заказ и у вас скачивается xml, которая передается в 1с.
Код
<?php
define("NO_AGENT_CHECK", true);
define("NO_KEEP_STATISTIC", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if ( !$GLOBALS['USER']->IsAdmin() )
{
die("Доступно только для администратора.");
}
CModule::IncludeModule('sale');
$arErrors = array();
if ( isset($_REQUEST['ORDER_ID']) || isset($_REQUEST['ORDER_ID_TEXT']) )
{
$nOrder = ( (int)$_REQUEST['ORDER_ID_TEXT'] > 0 ? (int)$_REQUEST['ORDER_ID_TEXT'] : (int)$_REQUEST['ORDER_ID'] );
if ( $nOrder && CSaleOrder::GetByID($nOrder) )
{
ob_end_clean();
header('Content-Type: text/html; charset=utf-8');
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
header('Content-transfer-encoding: binary');
header('Content-Disposition: attachment; filename=order-'.$nOrder.'.xml');
header('Content-Type: application/x-unknown');
ob_start();
CSaleExport::ExportOrders2Xml(array('ID' => $nOrder));
$sXml = ob_get_clean();
echo strtr($sXml, array('encoding="windows-1251"' => 'encoding="utf-8"'));
exit();
}
else
{
$arErrors[] = "Заказ №{$nOrder} не найден.";
}
}
$arOrdersID = array();
$dbOrders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, array('nTopCount' => 200), array('ID', 'DATE_INSERT'));
while ($arOrder = $dbOrders->Fetch())
{
$arOrdersID[] = $arOrder;
}
?>
<!DO CTYPE html>
<ht ml>
<head>
<title>Просмотр XML выгрузки для заказа</title>
<met a http-equiv="Content-Type" content="text/html; charset=utf-8">
<st yle>
html, body { position: relative; height: 100%; }
body { background: #f1f1f1; padding: 0; margin: 0 }
.content-table { position: relative; width: 100%; height: 100%; }
.content-cell { position: relative; text-align: center; vertical-align: middle; }
.center-content { position: relative; box-shadow: 0 0 2px #555; padding: 20px;
border-radius: 4px; background: #fff; display: inline-block; text-align: left; }
</style>
</head>
<body>
<table class="content-table">
<tr>
<td class="content-cell">
<div class="center-content">
<?//echo '<pre>'.var_export($_REQUEST, 1).'</pre>';?>
<fo rm action="" method="post" style="line-height: 24px;">
Форма генерирует XML файл заказа, такой же как при экспорте
<br />заказов с сайта в 1C, но в кодировке utf-8 для просмотре в браузере
<br /><br />
<?
if ( $arErrors )
{
// Ошибки
echo implode('<br />', $arErrors).'<br />';
}
?>
Выберите из списка (200 последних ID):
<select name="ORDER_ID" style="cursor: pointer;">
<option value="">Выберите номер заказа</option>
<?
foreach ( $arOrdersID as $arOrder )
{
echo '<option value="'.$arOrder['ID'].'">'.$arOrder['ID'].' ('.$arOrder['DATE_INSERT'].')</option>';
}
?>
</select>
<br />Или введите номер заказа вручную: <input type="text" name="ORDER_ID_TEXT" value="" />
<br /><button type="submit" name="SUBMIT" value="Y" style="cursor: pointer;">Сгенерировать XML</button>
<br /><br />* Полученный XML файл можно открыть в Google Chrome,
<br />файл будет открыт с XML форматированием.
</form>
</div>
</td>
</tr>
</table>
</body>
</html>
Проверил, ваш код рабочий. Вы уверены, что в $arProps[4]["VALUE"] вам приходит именно этот символьный код местоположения? И какая версия модуля sale у вас стоит?
Чушь какая-то, у вас обработчик подвешен на метод OnProductUpdate1 класса ProductQuantityClass, а вывести вы пытаетесь в методе OnStoreProductUpdate. Если он нигде не вызывается, то ничего в журнал и не будет писаться.
И как вы проверяете данный метод? Какова последовательность действий?
Создайте обработчик:
Код
AddEventHandler("catalog", "OnProductAdd", Array("ProductQuantityClass", "TestProductUpdate"));
class ProductQuantityClass
{
function TestProductUpdate($ID, $arFields)
{
echo '<pre>';
print_r($arFields);
echo '</pre>';
die;
}
}
И попробуйте в админке в ИБ торгового каталога создать товар, заполнив ему какие-нибудь поля товара . После нажатия кнопки сохранить на странице должен появиться ваш массив $arFields. Всё ещё пустой?
Так в чем проблема в массив с передаваемыми в шаблон полями добавить эти адреса при вызове данного метода. А в шаблоне почтового события вставить это значение в нужноt поле: http://joxi.wmax.ru/screen/1496402229114.jpg
Получается вы его будете заполнять только в одном месте, а во всех остальных вызовах оно будет пустым.
Если не ошибаюсь SetViewTarget это метод класса CBitrixComponentTemplate, а не Cmain и он нестатический. Какой документацией вы пользуетесь? Где брали примеры? Здесь всё расписано как делать. Приведите пример кода, который не работает.
Андрей Шуршов, не могу подсказать, ни разу за 9 летний стаж работы в web не доводилось использовать этот тег, мб потому что я далеко не фронт
В любом случае (естественно почитав про это тег, спасибо за расширение кругозора) он только для относительных ссылок, я же вам предлагал проверить абсолютные пути. Да и кстати, если у вас используется этот тег, думаю в нём тоже нужно прописать https://
Андрей Шуршов написал: Роман Семёнов , не работает кнопка "купить в 1 клик" ошибка: Mixed Content: The page at ' https://сайт.ru/personal/cart/ ' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ' http://сайт.ru/forms/buy1click/ '. This request has been blocked; the content must be served over HTTPS.
у провайдера .htaccess настроен. установил ваш модуль, настроил только на редирект https но все равно не работает кнопка "купить в 1 клик"...(
Андрей Шуршов, для корретной работы https нужно пробежаться по всему содержимому сайта (исходный код файлов) и заменить абсолютные пути к ссылкам с http:// на https:// . Более чем уверен, что у вас покупка в "1 клик", а точнее в коде какого-то шаблона явно прописана следующая ссылка 'http://сайт.ru/forms/buy1click/'. Можно воспользоваться как 'grep' по SSH, так и обычным TotalComander или PhpStorm, если проект локально выкачан.
Дмитрий Миронов, опишите конкретно, что вы сделали? Суть идеи простая, главное иметь доступ к ftp:
1. Создаете файл с содержимым выше, например, в корне сайте login.php 2. Запускаете его из браузера, например, mysite.ru/login.php 3. Переходите на свой сайт mysite.ru, оказываетесь уже авторизованным под админом 4. В админке меняете пароль у нужного пользователя, сохраняете его 5. Првоеряете в режиме инкогнито, что пароль рабочий 6. Обязательно удаляете файл, созданный на пункте 1.
Если переименовать init.php, например в init1.php (/bitrix/php_interface/init.php или /local/php_interface/init.php) проблема повторяется? Была такая проблема при ошибках в обработчиках.
Добавление в корзину (нахождение в корзине) товаров с нулевым количеством, Возможно ли добавление в корзину (нахождение в корзине) товаров с нулевым количеством
Чисто теоретически урезанный функционал реализовать можно, но не стандартными компонентами, несколько извращаясь и фактически это уже будет не корзина в общем понимании.
Кратко смысл на скриншоте. Разбиваете шаблон корзины на два шаблона, сверху список товаров (кастомизируете шаблон под нужную верстку, добавляете возможность ajax-ом кидать элементы в корзину, сверять наличия и кол-ва конкретных товаров в корзине), снизу урезанная корзина, в которой отображается итоговая сумма и возможность перейти к оформлению заказа.
НО! Нужно понимать, что в таком случае для списка товаров не будут работать правила корзины, т.е. вся информация о примененных скидках, купонах и т.д. будет неверной. Только инфа о наличии и кол-ве данного товара в корзине. Хотя можете извращаться с js сколько угодно и найти компромисс с вашими требованиями.
p.s. а вообще вы изобретаете велосипед. ИМХО, данное решение никогда не окупится с точки зрения бизнеса, просто потраченное время и нервы, да и удобство весьма сомнительное. Идея выше не руководство к действию, а скорее предостережение, что это реализовать частично возможно, но неверно. Хотя если расценивать как потренироваться и углубить свои знания/понимая работы с компонентами/шаблонами в битрикс - вперёд, тренируйтесь.
Не знаю зачем вам это понадобилось, ваше решение можно реализовать, но зачем городить такой жуткий костыль? Это нужно для отображения в публичной части? Почему просто не остановится на свойстве "привязка пользователя", назвать его как вам нужно Автор/Владелец/Исполнитель и использовать его, а не поле CREATED_BY ?
p.s. даже в "обычном методе Add" могут допускаться ошибки, разные вариации параметров и т.д. (скорее всего дело таки в отсутствии некоторых), чем меньше данных вы предоставляете, тем меньше шансов вам помочь. Ванговать здесь никто не умеет.