Использование хуков в REST API
Хуки позволяют получить дополнительную информацию об объектах, использовать ограничения и т.п.
Вывод информации об остатке товара на конкретном складе
Создадим data-атрибут вида dataWarehouse{ID-склада}, для этого напишем обработчик события onCallwarehouseApi модели магазина
Core_Event::attach('shop.onCallwarehouseApi', array('My_Shop_Observer', 'onCallwarehouseApi'));
class My_Shop_Observer
{
static public function onCallwarehouseApi($object, $args)
{
// ID склада, информацию об остатке на котором добавлять
$warehouse_id = 1;
$oShop_Items = $object->Shop_Items;
$oShop_Items
->queryBuilder()
->select('shop_items.*', array('SUM(shop_warehouse_items.count)', 'dataWarehouse' . $warehouse_id))
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id', array(
array('AND' => array('shop_warehouse_items.shop_warehouse_id', '=', $warehouse_id))
)
)
->groupBy('shop_items.id');
return $oShop_Items;
}
}
Вызов warehouseApi для магазина с номером 3 делаем следующим образом: GET /api/v1.0/shops/3/warehouseApi/
Вывод значений свойств для заказов при JSON-запросе
Метод toArray() моделей имеет хук modelname.onAfterToArray, которым можно расширить возвращаемые данные. Создадим обработчик события shop_order.onAfterToArray в котором вернем массив значений в индексе properties: * с версии 7.0.7
Core_Event::attach('shop_order.onAfterToArray', function($oShop_Order, $args) {
$aReturn = $args[0];
$aPropertyValues = $oShop_Order->getPropertyValues(FALSE);
foreach ($aPropertyValues as $oPropertyValue)
{
$aReturn['properties'][] = $oPropertyValue->toArray();
}
return $aReturn;
});
Вывод значений свойств для заказов при XML-запросе
Core_Event::attach('shop_order.onBeforeGetXml', function($oShop_Order, $args) {
$aProperty_Values = $oShop_Order->getPropertyValues(TRUE, array());
// Add all values
$oShop_Order->addEntities($aProperty_Values);
});
Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.