Использование хуков в 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);
});

Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.