Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
1

Информация о заказе в виде таблицы

18.05.2017, 09:04. Показов 7563. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Стоит задача отправить на почту покупателя письмо с информацией о заказе в виде таблицы.
Существует статья (ссылка удалена), в которой описано, что формирование ORDER_LIST происходит в компоненте оформления заказа sale.order.ajax в файле component.php.
Действительно, зайдя в стандартный sale.order.ajax в файле component.php идет формирование информации о заказе в виде строки:
PHP
1
2
3
4
5
6
7
foreach ($arBasketList as $arItem)
                    {
                        $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT");
 
                        $strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]);
                        $strOrderList .= "\n";
                    }
Информация о заказе приходит в таком виде: MeegoComfort - 1.00 шт.: 14 400 руб.
Но на сайте используется не стандартный sale.order.ajax и в папке нет файла component.php.
Подскажите, пожалуйста, каким образом в нестандартном sale.order.ajax сделать так, чтобы применялся component.php только измененный (чтобы информация о заказе приходила не в виде строки, а в виде таблицы)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2017, 09:04
Ответы с готовыми решениями:

Информация о новом заказе
Здравствуйте! Подскажите, кто знает. Изучаю создание интернет магазина на Битрикс, делаю все...

Информация о заказе на почту
Доброго времени суток! При оформлении заказа необходимо отправить информацию о заказе на почту....

Вычислить и вывести на экран в виде таблицы значения функции, заданной в виде ряда Тейлора
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, ...

Как результат вывести не в виде матрице, а в виде таблицы?
Подскажите, плиз, как здесь результат вывести не в виде матрице, а в виде таблице. Ни как не...

19
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
18.05.2017, 09:45 2
component.php это устаревший подход. Новые компоненты идут с class.php

Добавлено через 1 минуту
А главное вы не туда смотрите... Информация не "приходит в виде строки". Она у вас массив. Приведенный вами кусок кода это из template.php (скорее всего)

Добавлено через 1 минуту
Или это кусок кода для формирования письма вы привели? Так тогда и правьте его как вам надо.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
18.05.2017, 10:26  [ТС] 3
voral, Приведенный вами кусок кода это из template.php (скорее всего) - приведенный кусок кода из component.php (находится bitrix/components/bitrix/sale.order.ajax/component.php)
Т.е. $strOrderList
PHP
1
$strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]);
передается в $arFields
PHP
1
2
3
4
5
6
7
8
9
10
11
$arFields = Array(
                        "ORDER_ID" => $arOrder["ACCOUNT_NUMBER"],
                        "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
                        "ORDER_USER" => ( (strlen($arUserResult["PAYER_NAME"]) > 0) ? $arUserResult["PAYER_NAME"] : $USER->GetFormattedName(false)),
                        "PRICE" => SaleFormatCurrency($totalOrderPrice, $arResult["BASE_LANG_CURRENCY"]),
                        "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
                        "EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()),
                        "ORDER_LIST" => $strOrderList,
                        "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
                        "DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"],
                    );
Если $strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]); сделаю в виде таблицы, при последующем обновлении платформы разве не обновится файл component.php? (т.е. затрутся измененные мною данные или нет?)
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
18.05.2017, 10:46 4
Такс. давайте по порядку.
Если у вас нестандартный компонент sale.order.ajax то почему он в bitrix/components/bitrix/sale.order.ajax/component.php
Конечно же если систему обновить он у вас станет стандартным. (при этом в новом копоненте нет component.php) если он у вас есть.... То какая у вас версия модуля sale ?

Посмотрел на древнем проекте. Да действительно такой код есть. И если вам необходимо его изменить - копируйте компонент в свое пространство имен и работаете уже с ним. (о чем, кстати, и написано в той теме)...

Но Вы собираетесь подключать этот компонент для создания письма? Это как микроскопом гвозди забивать.
Привожу вам ссылку на статью по работе с корзиной. Там все есть, что нужно для получения списка товаров в заказе. А уж если очень хочется использовать штатный компонент. Почему не bitrix:sale.personal.order.detail.mail или bitrix:sale.personal.order.detail ?
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
18.05.2017, 11:10  [ТС] 5
voral, спасибо что откликнулись
1) Стандартный компонент находится bitrix/components/bitrix/sale.order.ajax/component.php и вот как раз в component.php идет формирование "ORDER_LIST", который в последующем используется в почтовом шаблоне.
2) Нестандартный компонент sale.order.ajax находится bitrix/templates/market/components/bitrix/sale.order.ajax, но в данном компоненте нет component.php.
Если файл был бы, то можно было $strOrderList сделать как таблицу. Возможно ошибаюсь?

Копируйте компонент в свое пространство имен и работаете уже с ним - компонент скопирован давно, только в нем нет component.php.

Версия Интернет-магазин (sale) 14.0.6
Редакция: 1С-Битрикс: Управление сайтом 14.0.15.
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
18.05.2017, 13:04 6
bitrix/templates/market/components/bitrix/sale.order.ajax это не компонент. Это шаблон компонента. Он не скопирован.
вам нужно скопировать каталог /bitrix/components/bitrix/sale.order.ajax/ в каталог (например)
/bitrix/components/marisha/sale.order.ajax/
а еще лучше в /local/components/marisha/sale.order.ajax/

соответственно подключать не bitrix:sale.order.ajax а marisha:sale.order.ajax а шаблоны соответственно редактировать не в /bitrix/templates/market/components/bitrix/sale.order.ajax

а в bitrix/templates/market/components/marisha/sale.order.ajax

или прямо в /local/components/marisha/sale.order.ajax/templates/

Добавлено через 1 минуту
А Битрикс у вас уже очень устарел. Надеюсь вы в курсе закона ФЗ-54. Изучите вопрос, возможно вам есть смысл подумать об обновлении до последней версии

Добавлено через 1 минуту
Да, имейте ввиду, что по сравнению с версией 14.0 компонент претерпел очень серьезные изменения.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
18.05.2017, 14:01  [ТС] 7
voral, спасибо огромное
Получается что в итоге выводится "Наименование", "Количество", "Цена".
А каким образом сделать, чтоб выводился ещё и артикул?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$strOrderList = "";
                    $arBasketList = array();
                    $dbBasketItems = CSaleBasket::GetList(
                            array("NAME" => "ASC"),
                            array("ORDER_ID" => $arResult["ORDER_ID"]),
                            false,
                            false,
                            array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "TYPE", "SET_PARENT_ID")
                        );
                    while ($arItem = $dbBasketItems->Fetch())
                    {
                        if (CSaleBasketHelper::isSetItem($arItem))
                            continue;
 
                        $arBasketList[] = $arItem;
                    }
 
                    $arBasketList = getMeasures($arBasketList);
 
                    foreach ($arBasketList as $arItem)
                    {
                        $measureText = (isset($arItem["MEASURE_TEXT"]) && strlen($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : GetMessage("SOA_SHT");
 
                        $strOrderList .= $arItem["NAME"]." - ".$arItem["QUANTITY"]." ".$measureText.": ".SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"])." ------- ";
                        $strOrderList .= "\n";
                    }
 
                    $arFields = Array(
                        "ORDER_ID" => $arOrder["ACCOUNT_NUMBER"],
                        "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
                        "ORDER_USER" => ( (strlen($arUserResult["PAYER_NAME"]) > 0) ? $arUserResult["PAYER_NAME"] : $USER->GetFormattedName(false)),
                        "PRICE" => SaleFormatCurrency($totalOrderPrice, $arResult["BASE_LANG_CURRENCY"]),
                        "BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
                        "EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()),
                        "ORDER_LIST" => $strOrderList,
                        "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
                        "DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"],
                    );
С помощью CSaleBasket::GetList разве возможно получить артикул товара?
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
18.05.2017, 16:26 8
Вам необходимо настроить так, чтобы артикул попадал в корзину (свойство товара добавляемые в корзину) и тогда сможете вытаскивать.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 07:37  [ТС] 9
voral,
Цитата Сообщение от voral Посмотреть сообщение
Вам необходимо настроить так, чтобы артикул попадал в корзину
Подскажите, пожалуйста, где настраивается "свойство товара добавляемые в корзину".
В оформлении заказа подобного "свойство товара добавляемые в корзину" не обнаружено.

В каталоге также "свойство товара добавляемые в корзину" не обнаружено. Есть только "Характеристики товара, добавляемые в корзину", но в списке отсутствует "Артикул" (скрин "Характеристики").

В админке настройка свойства товара "Артикул" выглядит так (скрин "Артикул").
Миниатюры
Информация о заказе в виде таблицы   Информация о заказе в виде таблицы  
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
19.05.2017, 08:32 10
В оформлении заказ, естественно, искать не надо. Т.к. товар уже в корзине.

У вас артикул это свойство товара или торгового предложения? Ниже же есть (в настройках компонента каталога)
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 08:48  [ТС] 11
Цитата Сообщение от voral Посмотреть сообщение
У вас артикул это свойство товара или торгового предложения?
- артикул это свойство товара (символьный код = ARTNUMBER)
Цитата Сообщение от voral Посмотреть сообщение
Ниже же есть (в настройках компонента каталога)
- Вы имеете ввиду "Свойства предложений, добавляемые в корзину"? Но это же для торговых предложений или я ошибаюсь? Да и свойства "ARTNUMBER" в списке всё равно нет.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 09:01  [ТС] 12
Эксперимент:
Проанализировав список "Характеристики товара, добавляемые в корзину" выяснилось, что отображаются свойства у которых Тип = Список, либо у которых Тип = Строка, Множество = Да.

У свойства "Артикул" было Тип = Строка, Множество = Нет

Указав у свойства "Артикул" Множество = Да, свойство появилось в списке "Характеристики товара, добавляемые в корзину" (странно это конечно, но надеюсь будет работать).

Осталось сохранить настройки компонента, но кнопок "Сохранить"/"Отменить" в настройках компонента нет.
Миниатюры
Информация о заказе в виде таблицы  
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
19.05.2017, 10:57 13
Цитата Сообщение от _marisha Посмотреть сообщение
Указав у свойства "Артикул" Множество = Да, свойство появилось в списке "Характеристики товара, добавляемые в корзину" (странно это конечно, но надеюсь будет работать).
Это костыль. Раз не работает - значит на сайте есть проблема.

Цитата Сообщение от _marisha Посмотреть сообщение
Осталось сохранить настройки компонента, но кнопок "Сохранить"/"Отменить" в настройках компонента нет.
Тоже "не хорошо".
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 11:08  [ТС] 14
Цитата Сообщение от voral Посмотреть сообщение
Вам необходимо настроить так, чтобы артикул попадал в корзину (свойство товара добавляемые в корзину) и тогда сможете вытаскивать
- свойство артикул добавлено (скрин во вложении)

Подскажите, пожалуйста, каким образом теперь свойство "Артикул" получить с помощью CSaleBasket::GetList?

Так не получается:
PHP
1
2
3
4
5
6
7
$dbBasketItems = CSaleBasket::GetList(
                                    array("NAME" => "ASC"),
                                    array("ORDER_ID" => $arOrder["ID"]),
                                    false,
                                    false,
                                    array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE", "CURRENCY", "TYPE", "SET_PARENT_ID", "PROPERTY_ARTNUMBER")
                                );
Загвоздка, если сделать у свойства "Артикул" Множество = Да, то в списке товаров при выводе артикула выводится "Array", а не артикул (скрин во вложении)
Вывод происходит следующим образом:
PHP
1
2
<a id="<?= $this->GetEditAreaId($arElement['ID']); ?>"
                   href="<?= $arElement["DETAIL_PAGE_URL"] ?>/"<?= $arElement["PROPERTIES"]["ARTNUMBER"]["VALUE"] ?></a>
Возможно ли сделать так, чтоб выводился именно артикул, а не "Array"?
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 11:09  [ТС] 15
Вывод "Array"
Миниатюры
Информация о заказе в виде таблицы  
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 11:18  [ТС] 16
Цитата Сообщение от voral Посмотреть сообщение
Это костыль. Раз не работает - значит на сайте есть проблема.
- сайт одна большая проблема. Но сделать нужно...
Цитата Сообщение от voral Посмотреть сообщение
Тоже "не хорошо".
- создано обращение в ТП. Но на подобные случаи они обычно отвечают, что необходимо обновляться.
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
19.05.2017, 11:24 17
Вот кусок из проекта (правда новое АПИ битрикс):
PHP
1
2
3
4
5
6
7
8
9
10
// у меня для текущего пользователя. Вам корзину надо вытаскивать из заказа. 
// как работать с заказом я приводи ссылку на  статью выше
$basket = Bitrix\Sale\Basket::loadItemsForFUser(Bitrix\Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());
$basketItems = $basket->getBasketItems();
$isDeleted = false;
foreach ($basket as $basketItem) {
    $basketPropertyCollection = $basketItem->getPropertyCollection();
    $arProps = $basketPropertyCollection->getPropertyValues();
print_r($arProps); // найдите свой артикул
}
Цитата Сообщение от _marisha Посмотреть сообщение
Возможно ли сделать так, чтоб выводился именно артикул, а не "Array"?
Сделайте там print_r($arElement["PROPERTIES"]["ARTNUMBER"]["VALUE"]) и, полагаю, по виденному поймете как достать из массива то, что нужно. (Хотя я бы разбирался почему артикул не добавляется если не множественный)

Добавлено через 1 минуту
Цитата Сообщение от _marisha Посмотреть сообщение
- создано обращение в ТП. Но на подобные случаи они обычно отвечают, что необходимо обновляться.
Подозреваю дело не в обновлениях. И не находится в области ответственности ТП. Вангую, что косяк на вашем сайте индивидуальный. Возможно стили какие то скрывают кнопки.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 11:30  [ТС] 18
voral, Найдена статья "Свойства товара, которые можно положить в корзину", в которой написано: "Тип должен быть «Список» или «Привязка к элементам» (инфоблока)"
Видимо поэтому и не работает с типом "Строка"
Миниатюры
Информация о заказе в виде таблицы  
0
2304 / 1225 / 246
Регистрация: 16.03.2008
Сообщений: 5,838
Записей в блоге: 2
19.05.2017, 11:44 19
Хм... да действительно. Попробовал. Ни когда об этом не задумывался...
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
19.05.2017, 13:51  [ТС] 20
Цитата Сообщение от voral Посмотреть сообщение
Вот кусок из проекта (правда новое АПИ битрикс)
- ссылку Вы приводили.
Сделать так?
PHP
1
2
3
4
5
6
$order = Sale\Order::loadByAccountNumber($arOrder['ID']);
$basketItems = $order ->getBasketItems();
foreach ($order as $basketItem) {
    $basketPropertyCollection = $basketItem->getPropertyCollection();
    $arProps = $basketPropertyCollection->getPropertyValues();
}
Цитата Сообщение от voral Посмотреть сообщение
Вангую, что косяк на вашем сайте индивидуальный. Возможно стили какие то скрывают кнопки.
- здесь вообще мистика какая-то.
В хроме 58.0.3029.110 (64-bit)обычный режим/в режиме инкогнито/в мозиле кнопки не отображаются. Чистка кэша браузера/сайта/перезагрузка компа не помогают.
Зато в Microsoft Edge кнопки отображаются. Также на соседнем компе в хроме (такая же версия) кнопки отображаются.
ТП битрикса ответила, что у них кнопки тоже отображаются.
0
19.05.2017, 13:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2017, 13:51
Помогаю со студенческими работами здесь

Информация о файле в виде диаграммы
Задание: Разработать многооконное MDI приложение, позволяющее представлять информацию из файлов в...

У администратора хранится информация в виде. Записи+файлы
У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего...

Вывод из таблицы MySQL записей в виде html таблицы и дальнейшая их обработка
И снова здравствуйте! На этот раз я со сложным вопросом. Мне нужно вывести определенные записи из...

Вывести из таблицы MySQL все записи в виде html таблицы, не зная имена и колличество столбцов
Всем привет. Подскажите как вывести из таблицы MySQL все записи в виде html таблицы не зная имена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru