События (хуки)

Модератор
Re: События (хуки)
Пользователям, работающими через хуки с вкладкой доп. св-в, у Tab-а св-в внутри первым уровням лежат Admin_Form_Entity_Section, а у них уже объекты. Обратите внимание, при создании там имена будут с [], а при редактировании могут быть с [], а для уже сохраненных несколько иначе, в распечатке это видно.

Код обработчика:
class Informationsystem_Item_Observer
{
   static public function onBeforeExecute($object, $operation)
   {
      $siteID = CURRENT_SITE;

      $_object = $object->getObject();
      $modelName = $_object->getModelName();
      $oSeparatorField = new Admin_Form_Entity_Separator();

      // Отображение формы, операция NULL
      if (is_null($operation[0]) || $operation[0] == '')
      {
         $oPropTab = $object->getTab('Property');

         $aFields = $oPropTab->getFields();
         foreach ($aFields as $oField)
         {
            if (get_class($oField) == 'Admin_Form_Entity_Section')
            {
               $aChildren = $oField->getChildren();

               foreach ($aChildren as $oChildren)
               {
                  if (isset($oChildren->name))
                  {
                     echo $oChildren->name;
                  }
               }
            }
         }

         /*$oPropField = $oPropTab->getField('property_78[]');
         echo $oPropField->name;*/

      }
   }
}
Модератор
Re: События (хуки)
Хук на добавление цены в других валютах в карточке товара:


if ($Shop_Controller_Show->item)
{
      class Shop_Item_Observer_Prices
      {
         static public function onBeforeGetXml($object, $args)
         {
            $oPrices = Core::factory('Core_Xml_Entity')
               ->name('prices');

            $oShop = $object->Shop;
            $aShop_Currencies = Core_Entity::factory('Shop_Currency')->findAll();

            foreach ($aShop_Currencies as $oShop_Currency)
            {
               $fCurrencyCoefficient = $object->shop_currency_id > 0 && $oShop_Currency->id > 0
                  ? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
                     $object->Shop_Currency, $oShop_Currency
                  )
                  : 0;

               // Prices
               $oShop_Item_Controller = new Shop_Item_Controller();
               if (Core::moduleIsActive('siteuser'))
               {
                  $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
                  $oSiteuser && $oShop_Item_Controller->siteuser($oSiteuser);
               }
               //$oShop_Item_Controller->count($this->_cartQuantity);
               $aPrices = $oShop_Item_Controller->getPrices($object);

               $oPrices->addEntity(
                  Core::factory('Core_Xml_Entity')
                     ->name('price')
                     ->addEntity(
                        Core::factory('Core_Xml_Entity')
                           ->name('value')
                           ->value(
                              Shop_Controller::instance()->round($aPrices['price_discount'] * $fCurrencyCoefficient)
                           )
                     )
                     ->addEntity(
                        $oShop_Currency
                     )
               );
            }

            $object->addEntity($oPrices);
         }
      }

      Core_Event::attach('shop_item.onBeforeGetXml', array('Shop_Item_Observer_Prices', 'onBeforeGetXml'));
}
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Re: События (хуки)
HostCMS писал(а):
Пример вывода названия документа перед показом версии документа (с версии 6.0.5):
class Document_Version_Observer
{
   static public function onBeforeExecute($object, $args)
   {
      ?><h1><?php echo htmlspecialchars($object->Document->name)?></h1><?php
   }
}

// Add document_version observer
Core_Event::attach('document_version.onBeforeExecute', array('Document_Version_Observer', 'onBeforeExecute'));

Попробовал я так вывести название документа. В результате не выводится ничего. Версия 6.0.9
www.dsaleks.ru - создание сайтов и интернет-магазинов
Re: События (хуки)
И все-таки, как вывести название документа перед показом версии документа? Решения пока нет. Вернее, оно не работает. Вопрос актуален.
www.dsaleks.ru - создание сайтов и интернет-магазинов
Модератор
Re: События (хуки)
DS Aleks,
странно, у меня почему-то все отлично работает. Вы куда этот код вносите то?!
Модератор
Re: События (хуки)
Оповещение о новых запросах (сообщения), поступивших в Helpdesk через почту или с сайта

В конец файла bootstrap.php, в корне системы, добавляется:

/**
* Helpdesk Message observer
*
* @package HostCMS 6
* @version 6.x
* @author Hostmake LLC
* @copyright © 2005-2012 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
*/
class Helpdesk_Message_Observer
{
   static public function onAfterCreate($object, $args)
   {
      if ($object->inbox)
      {
         // Отправка письма
         $message = "Доброе время суток, уважаемый куратор!\n\nВ службу поддержки поступило новое сообщение:\n";
         $message .= "Тема: " . ($object->subject ? $object->subject : '<Без темы>') . "\n";
         $message .= "Сообщение: " . $object->message . "\n";
         $message .= "E-mail: " . $object->Helpdesk_Ticket->email . "\n";
         $message .= "Дата: " . Core_Date::sql2datetime($object->datetime) . "\n";

         $oCore_Mail_Driver = Core_Mail::instance()
            ->to(EMAIL_TO)
            ->from(EMAIL_TO)
            ->subject('HostCMS Helpdesk: Новое сообщение # ' . $object->id)
            ->message($message)
            ->contentType('text/plain')
            ->send();
      }
   }
}


// Add observer
Core_Event::attach('helpdesk_message.onAfterCreate', array('Helpdesk_Message_Observer', 'onAfterCreate'));
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Модератор
Re: События (хуки)
Ограничение выборки модификаций через хуки: http://www.hostcms.ru/forums/2/8968/
Re: События (хуки)
Есть задача совершать определённые действия при появлении нового заказа в интернет-магазине. На какое событие лучше повесить обработчик: shop_order.onAfterCreate, shop_order.onAfterAdd, shop_order.onAfterSave или какой-то ещё? И правильно ли я понимаю, что если подписаться на событие shop_order.onAfterUpdate, я буду получать уведомления о любых изменениях в заказах?
Модератор
Re: События (хуки)
mostech писал(а):
На какое событие лучше повесить обработчик

На shop_order.onAfterCreate

mostech писал(а):
И правильно ли я понимаю, что если подписаться на событие shop_order.onAfterUpdate, я буду получать уведомления о любых изменениях в заказах?

Верно.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Модератор
Re: События (хуки)
Хук для поиска только по названию товара:

class Shop_Item_Observer
{
   static public function onAfterIndexing($object, $args)
   {
       $oSearch_Page = $args[0];
       $oSearch_Page->text = $object->name;
   }
}

Core_Event::attach('shop_item.onAfterIndexing', array('Shop_Item_Observer', 'onAfterIndexing'));


Будет доступно с версии 6.1.1.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Авторизация