Пример вывода названия документа перед показом версии документа (с версии 6.0.5):
class Document_Version_Observer
{
static public function onBeforeExecute($object, $args)
{
?><h1><?php echo htmlspecialchars($object->Document->name)?></h1><?php
}
}
Потребовалось выводить размеры изображений производителей магазина в XML, т.к. автоматически они туда не передаются. Пример реализации:
class Shop_Producer_Observer
{
static public function onBeforeGetXml($object, $args)
{
$file_small_path = $object->getSmallFilePath();
$file_large_path = $object->getLargeFilePath();
original,
с Вашего позволения пару замечаний:
1. Получить полные пути к малому и большому изображению лучше методами getSmallFilePath() и getLargeFilePath()
2. addXmlTag() можно писать цепочкой:
А где весь список событий узнать? Хотя бы просто список без комментариев?
repairmanjack
10 ноября 2012 г.
Re: События (хуки)
mrspd,
в исходном коде
hostcms
Модератор10 ноября 2012 г.
Re: События (хуки)
repairmanjack,
если Вы посмотрите код Shop_Item_Controller_Edit, то увидите, что после вызова
parent::setObject($object);
идет как раз модификация формы и Вы, соответственно, добавляете свою вкладку после нужно поля, а наш стандартный код после Вашего добавления добавляет еще и свои вкладки после того же поля, соответственно Ваше смещается. Попробуйте навесить на onBeforeExecute. mrspd, Вы можете посмотреть в коде системы, поискав по строке "Core_Event::notify". Обращаю внимание, что текущий список событий не является исчерпывающим и по согласованию мы можем добавить новые требуемые события.
bystritskiy.igor
30 ноября 2012 г.
Re: События (хуки)
На неделе пробовал поработать с событиями (хуками), делал отправку смс-уведомлений при поступлении заказа в магазине.
Пример реализации:
1. в bootstrap.php, после блока if (Core_Auth::logged()) {...} добавляем код:
//здесь уже на основе API смс-провайдера отправляем смс.
echo "id заказа: " . $object->id . "<br>";
echo "время заказа: " . $object->datetime . "<br>";
echo "сумма заказа: " . sprintf("%.2f", $fShopOrderItemSum) . " " . $oShop->Shop_Currency->name;
}
}
}
3. И самое главное, в файле modules\shop\payment\system\handler.php служба поддержка внесла множество изменений, которые вероятно будут доступны в следующих обновлениях.
Например: Core_Event::notify('Shop_Payment_System_Handler.onAfterProcessOrder', $this); и т.п. Получить новый файл можно повторно установив обновление 6.0.5. Модератор.
hostcms
Модератор7 декабря 2012 г.
Re: События (хуки)
Ограничение способа оплаты в зависимости от выбранного типа доставки (доступно с версии 6.0.6 или после повторной установки обновления 6.0.5). Код вносится в блок "case 3:" типовой дин. страницы корзины:
// Форма оплаты
case 3:
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0));
$Shop_Payment_System_Controller_Show = new Shop_Payment_System_Controller_Show($oShop);
// -- ADD
class Shop_Payment_System_Controller_Observer
{
static public function onBeforeShow($object, $args)
{
if (isset($_SESSION['hostcmsOrder']['shop_delivery_condition_id']))
{
// Условие доставки
$shop_delivery_condition_id = $_SESSION['hostcmsOrder']['shop_delivery_condition_id'];
// Если тип доставки имеет код 1
if ($oShop_Delivery->id == 1)
{
// Добавляем способ оплаты только "Робокасса"
$object->clearEntities()
->addEntity(
Core_Entity::factory('Shop_Payment_System', 9)
);
}
}
}
}