Меню

Получить цены товаров с помощью D7-ORM в 1С-Битрикс

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

Веб-разработка часто требует работы с базой данных для получения и обработки информации о товарах, в том числе и их цен. В 1С-Битрикс это можно сделать с помощью Object-Relational Mapping (ORM) и соответствующих классов.

Использование ORM для получения цен товаров в 1С-Битрикс

Один из основных компонентов 1С-Битрикс для работы с товарами и каталогами – это модуль каталога (catalog). В этом модуле предоставляются удобные средства для работы с товарами, их свойствами и ценами. Давайте рассмотрим пример использования ORM для получения цен товаров из каталога.

Шаг 1: Подключение необходимых модулей

Прежде всего, необходимо подключить модуль catalog и, возможно, другие модули, которые могут понадобиться для работы с каталогом товаров. Для этого мы используем класс Bitrix\Main\Loader, который позволяет динамически подключать модули в коде.

use Bitrix\Catalog\PriceTable;
use Bitrix\Main\Loader;
Loader::includeModule('catalog');

Шаг 2: Получение цен товаров с помощью ORM

После подключения модуля catalog мы можем использовать класс PriceTable для получения цен товаров из базы данных. Метод getList позволяет получить список цен с определенными условиями.

$prices = PriceTable::getList([
    'select' => [
        'ID',
        'PRODUCT_ID',
        'CATALOG_GROUP_ID',
        'PRICE',
        'CURRENCY'
    ],
    'order' => [
        'PRODUCT_ID' => 'ASC'
    ]
]);

В этом запросе мы указываем, какие поля нам нужны (ID, PRODUCT_ID, CATALOG_GROUP_ID, PRICE, CURRENCY) и как упорядочить результаты (по PRODUCT_ID в порядке возрастания).

Шаг 3: Обработка результатов

Полученные данные можно обрабатывать в цикле, например, выводить на страницу в удобном формате.

while ($price = $prices->fetch()) {
    print_r($price); // Распечатка всех полученных данных
}

Этот код выводит информацию о ценах товаров в формате массива. Вы можете адаптировать его под свои нужды, например, формировать HTML-разметку для вывода на странице или использовать полученные данные для дальнейших вычислений или операций.

Получение цен через API - код целиком

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
use Bitrix\Catalog\PriceTable;
use Bitrix\Main\Loader;

Loader::includeModule('catalog');
// Получаем цены товаров через ORM
$prices = PriceTable::getList([
    'select' => [
        'ID',
        'PRODUCT_ID',
        'CATALOG_GROUP_ID',
        'PRICE',
        'CURRENCY'
    ],
    'order' => [
        'PRODUCT_ID' => 'ASC'
    ]
]);

while ($price = $prices->fetch()) {
    print_r($price);
}

require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
Михаил Базаров 03.02.2024
Код из заметки выведет вообще все товары которые есть в системе, из всех инфоблоков.
Что бы получить из конкретного инфоблока нужно добавить дополнительную фильтрацию в метод.
Алмаз 14.06.2024
А как получить цены с учетом скидок?
Сергей 11.11.2024
Алмаз, перейти на symfony
Михаил Базаров 11.11.2024
Или
Код
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Catalog\PriceTable;
use Bitrix\Main\Loader;
use Bitrix\Catalog\ProductTable;
use Bitrix\Catalog\Discount\DiscountManager;

Loader::includeModule('catalog');

// Получаем товары и их цены
$prices = PriceTable::getList([
    'select' => [
        'ID',
        'PRODUCT_ID',
        'CATALOG_GROUP_ID',
        'PRICE',
        'CURRENCY'
    ],
    'order' => [
        'PRODUCT_ID' => 'ASC'
    ]
]);

while ($price = $prices->fetch()) {
    // Получаем информацию о продукте
    $product = ProductTable::getById($price['PRODUCT_ID'])->fetch();

    // Получаем оптимальную цену с учетом скидок
    $optimalPrice = \CCatalogProduct::GetOptimalPrice(
        $price['PRODUCT_ID'],
        1, // количество
        [], // группы пользователей
        'N', // не учитывать скидки
        [$price], // массив цен
        's1', // сайт
        []
    );

    // Если есть оптимальная цена, выводим ее
    if ($optimalPrice) {
        echo "Product ID: " . $price['PRODUCT_ID'] . "\n";
        echo "Base Price: " . $price['PRICE'] . " " . $price['CURRENCY'] . "\n";
        echo "Discounted Price: " . $optimalPrice['RESULT_PRICE']['DISCOUNT_PRICE'] . " " . $optimalPrice['RESULT_PRICE']['CURRENCY'] . "\n";
        echo "Discount: " . $optimalPrice['RESULT_PRICE']['DISCOUNT'] . "\n";
        echo "--------------------------\n";
    }
}

Стоимость и сроки разработки сайтов и приложений

Окончательная стоимость и сроки разработки сайта формируются после обсуждения деталей на этапе заказа. Как правило, они редко выходят за обозначенные ниже рамки.

Интернет магазин: разработка с нуля от 400 000 руб.
от 5-ти недель

Cоздание интернет-магазина на 1С-Битрикс. Разработка с нуля, оптимизация кода под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Интернет-магазин на готовом решении от 100 000 руб.
от 7-ми дней

Готовое решение — вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Запускается на одном из 200-та (на ваш выбор) готовых решений.

Мобильное приложение от 400 000 руб.
от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Опросник на разработку. После ознакомления, задам уточняющие вопросы и оценю проект по стоимости и срокам разработки.