Получить и вывести данные из профиля покупателя в кабинете пользователя 1С-Битрикс

Просмотров: 1016

Задача: вывести пользователю информацию по всем, его, профилям покупателя в компоненте sale.personal.profile.list без перехода в детальное описание/редактирование профиля.

Получить и вывести данные из профиля покупателя в кабинете пользователя 1С-Битрикс

Получить значения полей из профиля покупателя

Для начала нужно получить значения заполненных полей из профиля покупателя. Это можно сделать методом OrderUserProperties::getProfileValues, зная ID профиля.

В компоненте sale.personal.profile.list этот ID хранится в ключе массива $arResult["PROFILES"]['ID']. Что бы получить значения используем код:

use Bitrix\Sale;
foreach ($arResult["PROFILES"] as $val) {
    $profileData = Sale\OrderUserProperties::getProfileValues(
            (int)$val['ID']
    );
    print_r($profileData);
}

В распечатке массива $profileData получим значения заполненных полей, где ключем будет ID свойства заказа.

Получить названия свойств заказ по их ID

Теперь нужно получить названия свойств заказа по их ID. Для этого используем метод CSaleOrderProps::GetList.

Прогоняем массив $profileData с помощью foreach и внутри этого цикла, зная ID свойства заказа (из ключа), получаем название свойства.

В выводе, внутри foreach выводим название и значение свойства. Полный код:

use Bitrix\Sale;
foreach ($arResult["PROFILES"] as $val) {
    $profileData = Sale\OrderUserProperties::getProfileValues(
        (int)$val['ID']
    );
    echo $val['NAME'] . '
'; foreach ($profileData as $k => $property) { $db_props = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "ID" => $k ), false, false, array() ); if ($props = $db_props->Fetch()) { echo $props["NAME"] . '
'; echo $property; } } }
По феншую, стоит проделать все это в result_modifier.php донаполнив массив $arResult["PROFILES"]. Что бы не усложнять заметку привел как есть.

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

Михаил Базаров 13.05.2023
Тоже самое на D7
Код
use Bitrix\Sale\OrderUserProperties;
use Bitrix\Sale\PropertyValueCollection;

foreach ($arResult["PROFILES"] as $val) {
    $profileData = OrderUserProperties::getProfileValues((int)$val['ID']);
    echo $val['NAME'] . '<br>';
    foreach ($profileData as $k => $property) {
        $props = PropertyValueCollection::create(CSaleOrderProps::class)->getItemByValueId($k);
        if ($props) {
            echo $props->getName() . '<br>';
            echo $property;
        }
    }
}