bitrix-catalog
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTrade Catalog Module
Trade Catalog模块
Baseline: main 23.0+. Features newer than baseline are marked Since.
Catalog attaches commerce data to iblock elements. Requires + . Cart/orders live in — see skill .
iblockcatalogsalebitrix-salephp
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');Product ID = iblock element ID. Trade row: (). Prices: (). Catalog↔iblock link: ( / ).
b_catalog_productProductTableb_catalog_pricePriceTableb_catalog_iblockCatalogIblockTableCCatalog基准版本:main 23.0+。晚于基准版本的功能会标记Since。
Catalog模块将商务数据关联到iblock元素。需要同时引入和模块。购物车/订单功能位于模块中——可参考技能。
iblockcatalogsalebitrix-salephp
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');产品ID = iblock元素ID。交易记录行:(对应)。价格表:(对应)。Catalog与iblock的关联表:(对应 / )。
b_catalog_productProductTableb_catalog_pricePriceTableb_catalog_iblockCatalogIblockTableCCatalogLinking an Iblock to Catalog
将Iblock关联到Catalog模块
Register the product iblock as a catalog:
php
\CCatalog::Add([
'IBLOCK_ID' => $productIblockId,
'YANDEX_EXPORT' => 'N',
'SUBSCRIPTION' => 'N',
]);Read binding via ORM:
php
$row = \Bitrix\Catalog\CatalogIblockTable::getByPrimary($productIblockId)->fetch();
// IBLOCK_ID, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, VAT_ID, …Iblock catalog kinds (, ):
CCatalogSkucatalog/general/catalog_sku.php| Constant | Meaning |
|---|---|
| Simple catalog (no SKU) |
| Product iblock with separate offers iblock |
| Offers (SKU) iblock |
| Product iblock that itself holds simple products + SKUs |
php
$info = \CCatalogSku::GetInfoByIBlock($iblockId);
// CATALOG_TYPE, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, …将产品iblock注册为目录:
php
\CCatalog::Add([
'IBLOCK_ID' => $productIblockId,
'YANDEX_EXPORT' => 'N',
'SUBSCRIPTION' => 'N',
]);通过ORM读取关联信息:
php
$row = \Bitrix\Catalog\CatalogIblockTable::getByPrimary($productIblockId)->fetch();
// IBLOCK_ID, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, VAT_ID, …Iblock目录类型(定义于,文件路径):
CCatalogSkucatalog/general/catalog_sku.php| 常量 | 含义 |
|---|---|
| 简单目录(无SKU) |
| 产品iblock,关联独立的报价iblock |
| 报价(SKU)iblock |
| 自身包含简单产品+SKU的产品iblock |
php
$info = \CCatalogSku::GetInfoByIBlock($iblockId);
// CATALOG_TYPE, PRODUCT_IBLOCK_ID, SKU_PROPERTY_ID, …Product Types (ProductTable
)
ProductTable产品类型(ProductTable
)
ProductTableVerified in :
catalog/lib/product.php| Constant | Value | Meaning |
|---|---|---|
| 1 | Simple product |
| 2 | Set / bundle |
| 3 | Parent with offers |
| 4 | Offer (SKU variant) |
| 5 | Offer without parent link |
| 6 | SKU parent without offers |
| 7 | Service (no warehouse tracking) |
php
use Bitrix\Catalog\ProductTable;
$product = ProductTable::getByPrimary($elementId, [
'select' => ['ID', 'TYPE', 'QUANTITY', 'AVAILABLE', 'VAT_ID', 'VAT_INCLUDED'],
])->fetch();
ProductTable::update($elementId, [
'QUANTITY' => 10,
'QUANTITY_TRACE' => ProductTable::STATUS_YES,
'CAN_BUY_ZERO' => ProductTable::STATUS_NO,
]);Prefer for add/update when you need catalog automation (availability, parent SKU type, subscriptions). Legacy: .
\Bitrix\Catalog\Model\ProductCCatalogProduct定义于:
catalog/lib/product.php| 常量 | 值 | 含义 |
|---|---|---|
| 1 | 简单产品 |
| 2 | 套装/捆绑商品 |
| 3 | 关联报价的父产品 |
| 4 | 报价(SKU变体) |
| 5 | 无父产品关联的报价 |
| 6 | 无报价的SKU父产品 |
| 7 | 服务类产品(无需仓库跟踪) |
php
use Bitrix\Catalog\ProductTable;
$product = ProductTable::getByPrimary($elementId, [
'select' => ['ID', 'TYPE', 'QUANTITY', 'AVAILABLE', 'VAT_ID', 'VAT_INCLUDED'],
])->fetch();
ProductTable::update($elementId, [
'QUANTITY' => 10,
'QUANTITY_TRACE' => ProductTable::STATUS_YES,
'CAN_BUY_ZERO' => ProductTable::STATUS_NO,
]);当需要目录自动化功能(如可用性、父SKU类型、订阅)时,优先使用进行新增/更新操作。遗留方案:。
\Bitrix\Catalog\Model\ProductCCatalogProductSKU / Offers Pattern
SKU/报价模式
- Product iblock (parents) + offers iblock (variants).
- In the offers iblock: property ,
PROPERTY_TYPE = E(SKU link). PreferLINK_IBLOCK_ID = product iblock(USER_TYPE = SKU).PropertyTable::USER_TYPE_SKU - Register offers iblock as catalog linked to the product iblock:
php
\CCatalog::Add([
'IBLOCK_ID' => $offersIblockId,
'PRODUCT_IBLOCK_ID' => $productIblockId,
'SKU_PROPERTY_ID' => $skuPropertyId, // E-property on offers iblock
]);Parent elements get ; offer elements get . Customer buys a specific offer (or a simple when no SKU).
TYPE_SKUTYPE_OFFERTYPE_PRODUCT- 产品iblock(父产品) + 报价iblock(变体)。
- 在报价iblock中:属性,
PROPERTY_TYPE = E(SKU关联)。优先使用LINK_IBLOCK_ID = 产品iblock ID(对应USER_TYPE = SKU)。PropertyTable::USER_TYPE_SKU - 将报价iblock注册为关联到产品iblock的目录:
php
\CCatalog::Add([
'IBLOCK_ID' => $offersIblockId,
'PRODUCT_IBLOCK_ID' => $productIblockId,
'SKU_PROPERTY_ID' => $skuPropertyId, // 报价iblock上的E类型属性
]);父元素类型为;报价元素类型为。客户购买的是特定报价(若无SKU则购买简单的类型产品)。
TYPE_SKUTYPE_OFFERTYPE_PRODUCTPrices and Price Types
价格与价格类型
- Price type (catalog group): →
b_catalog_group(Bitrix\Catalog\GroupTable,BASE, …). Access:NAME/ legacyGroupAccessTable.CCatalogGroup - Price row: —
Bitrix\Catalog\PriceTable,PRODUCT_ID,CATALOG_GROUP_ID,PRICE, optionalCURRENCY/QUANTITY_FROM.QUANTITY_TO
php
use Bitrix\Catalog\PriceTable;
use Bitrix\Catalog\GroupTable;
$base = GroupTable::getRow(['filter' => ['=BASE' => 'Y']]);
PriceTable::add([
'PRODUCT_ID' => $elementId,
'CATALOG_GROUP_ID' => (int)$base['ID'],
'PRICE' => 1990.00,
'CURRENCY' => 'RUB',
]);
$prices = PriceTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['ID', 'PRICE', 'CURRENCY', 'CATALOG_GROUP_ID'],
])->fetchAll();Legacy write helpers: . VAT fields live on the product (, ).
CPriceVAT_IDVAT_INCLUDED- 价格类型(目录组):→
b_catalog_group(包含Bitrix\Catalog\GroupTable、BASE等字段)。权限控制:NAME/ 遗留方案GroupAccessTable。CCatalogGroup - 价格记录行:— 包含
Bitrix\Catalog\PriceTable、PRODUCT_ID、CATALOG_GROUP_ID、PRICE,可选字段CURRENCY/QUANTITY_FROM。QUANTITY_TO
php
use Bitrix\Catalog\PriceTable;
use Bitrix\Catalog\GroupTable;
$base = GroupTable::getRow(['filter' => ['=BASE' => 'Y']]);
PriceTable::add([
'PRODUCT_ID' => $elementId,
'CATALOG_GROUP_ID' => (int)$base['ID'],
'PRICE' => 1990.00,
'CURRENCY' => 'RUB',
]);
$prices = PriceTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['ID', 'PRICE', 'CURRENCY', 'CATALOG_GROUP_ID'],
])->fetchAll();遗留的写入辅助类:。VAT字段存储在产品表中(、)。
CPriceVAT_IDVAT_INCLUDEDStock and Stores (Overview)
库存与门店(概述)
- Product-level qty: fields
ProductTable,QUANTITY,QUANTITY_RESERVED,QUANTITY_TRACE,CAN_BUY_ZERO.AVAILABLE - Multi-store: (
StoreTable) +b_catalog_store(StoreProductTable:b_catalog_store_product,STORE_ID,PRODUCT_ID,AMOUNT).QUANTITY_RESERVED - Documents / batches: ,
StoreDocumentTable, … — use for warehouse ops, not ad-hoc SQL.StoreBatchTable
php
use Bitrix\Catalog\StoreProductTable;
$amounts = StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['STORE_ID', 'AMOUNT', 'QUANTITY_RESERVED'],
])->fetchAll();TYPE_SERVICE- 产品级库存数量:中的字段
ProductTable、QUANTITY、QUANTITY_RESERVED、QUANTITY_TRACE、CAN_BUY_ZERO。AVAILABLE - 多门店模式:(对应
StoreTable) +b_catalog_store(对应StoreProductTable:包含b_catalog_store_product、STORE_ID、PRODUCT_ID、AMOUNT字段)。QUANTITY_RESERVED - 单据/批次:、
StoreDocumentTable等——用于仓库操作,请勿直接使用SQL进行临时操作。StoreBatchTable
php
use Bitrix\Catalog\StoreProductTable;
$amounts = StoreProductTable::getList([
'filter' => ['=PRODUCT_ID' => $elementId],
'select' => ['STORE_ID', 'AMOUNT', 'QUANTITY_RESERVED'],
])->fetchAll();TYPE_SERVICEBoundary with sale
sale与sale
模块的边界划分
sale| Concern | Module |
|---|---|
| Product card, type, qty, prices, stores | |
| Basket, order, payment, delivery, shipments | |
Basket lines reference catalog product/offer IDs; price resolution and discounts may involve both modules. Do not invent cart APIs inside — use skill .
catalogbitrix-sale| 关注点 | 所属模块 |
|---|---|
| 产品卡片、类型、数量、价格、门店 | |
| 购物车、订单、支付、配送、发货 | |
购物车记录行引用目录产品/报价ID;价格解析和折扣计算可能涉及两个模块。请勿在模块内自行开发购物车API——请使用技能。
catalogbitrix-saleAPI Choice
API选择
| Use | Prefer |
|---|---|
| Read product/price/store rows | |
| Write with catalog side effects | |
| Legacy admin / compatibility | |
Inspect before adopting newer / REST helpers — confirm against the project kernel.
bitrix/modules/catalog/lib/v2| 使用场景 | 优先方案 |
|---|---|
| 读取产品/价格/门店记录 | |
| 写入并触发目录相关副作用 | |
| 遗留后台/兼容性需求 | |
在采用较新的/REST辅助类之前,请先查看目录下的代码,并与项目内核版本进行确认。
v2bitrix/modules/catalog/lib/Performance
性能优化建议
- Batch price/stock updates; avoid per-item in loops/templates.
CCatalogProduct::GetByID - Cache list queries; warm after bulk import.
- Load with ORM collections / joins, not N+1.
- 批量更新价格/库存;避免在循环/模板中逐个调用。
CCatalogProduct::GetByID - 缓存列表查询;批量导入后预热缓存。
- 使用ORM集合/关联查询加载数据,避免N+1查询问题。
Checklist
检查清单
- +
iblockincluded.catalog - Product iblock linked via /
CCatalog::Add.CatalogIblockTable - SKU: offers iblock + +
PRODUCT_IBLOCK_ID.SKU_PROPERTY_ID - Types use .
ProductTable::TYPE_* - Prices via / price types (
PriceTable).GroupTable - Stock via catalog API / , not raw SQL.
StoreProductTable - Cart/orders delegated to (
sale).bitrix-sale
- 已引入+
iblock模块。catalog - 产品iblock已通过/
CCatalog::Add完成关联。CatalogIblockTable - SKU配置:报价iblock + +
PRODUCT_IBLOCK_ID。SKU_PROPERTY_ID - 产品类型使用常量。
ProductTable::TYPE_* - 价格通过/ 价格类型(
PriceTable)管理。GroupTable - 库存通过目录API / 管理,而非直接操作SQL。
StoreProductTable - 购物车/订单功能委托给模块(
sale)。bitrix-sale