События – отслеживание изменения цены товаров в административной части — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
 
В данной статье представлен пример ведения статистики, которая отслеживает изменения поля '''price''' у объектов каталога, учитывается только пользователь с $object_id=14.
 
В данной статье представлен пример ведения статистики, которая отслеживает изменения поля '''price''' у объектов каталога, учитывается только пользователь с $object_id=14.
 +
 +
В новой реализации модулей (compatible-modules = 1 в config.ini или версия php >= 7.0):
 +
Для выполнения поставленной задачи, добавим в папку '''/classes/components/catalog/''' файл '''custom_events.php''' данного содержания:
 +
<source lang="php">
 +
<?php
 +
new umiEventListener('systemModifyElement', 'catalog', 'staticinfo');
 +
?>
 +
</source>
 +
 +
Также добавим файл '''permissions.custom.php''':
 +
<source lang="php">
 +
<?php
 +
$permissions = ['tree' => ['staticinfo']];
 +
?>
 +
</source>
 +
 +
А в файл '''customAdmin.php''', после свойства '''public $module;''' добавим новый метод '''staticinfo''':
 +
<source lang="php">
 +
  public function staticinfo(iUmiEventPoint $e) {
 +
 +
    if ($e->getMode() == "before" && $e->getParam('user_id') == '14') {           
 +
        $element  = $e->getRef('element');
 +
        $obj_id =  $element->objectId;
 +
 
 +
        if($element->getMethod() == 'object' && isset($_POST['data'][$obj_id]['price'])){
 +
          $new_price = $_POST['data'][$obj_id]['price'];
 +
          $old_price = $element->price;
 +
          if($new_price != $old_price){
 +
            $str = "User 14, edit field price, object = {$element->id}, old_price= {$old_price}, new_price = {$new_price}\r\n";
 +
            file_put_contents(CURRENT_WORKING_DIR . '/statistika.txt', $str, FILE_APPEND);
 +
          }
 +
      }
 +
    }
 +
  }
 +
</source>
 +
 +
 +
Теперь если пользователь изменяет цену у какого-либо объекта каталога, в файл '''statistika.txt''', который будет создан в корне сайта, запишется информация об этом событии.
 +
'''systemModifyElement''' – это событие в классе baseModuleAdmin (baseModuleAdmin.php) , в методе saveEditedElementData:
 +
<source lang="php">
 +
...
 +
$event = new umiEventPoint('systemModifyElement');
 +
$event->addRef('element', $element);
 +
$event->addRef('inputData', $inputData);
 +
$event->setParam('user_id', $user_id);
 +
$event->setMode('before');
 +
$event->call();
 +
...
 +
</source>
 +
 +
 +
В старой реализации модулей (compatible-modules = 0 в config.ini и версия php < 7.0):
 
Для выполнения поставленной задачи, добавим в папку '''/classes/modules/catalog/''' файл '''custom_events.php''' данного содержания:
 
Для выполнения поставленной задачи, добавим в папку '''/classes/modules/catalog/''' файл '''custom_events.php''' данного содержания:
 
<source lang="php">
 
<source lang="php">

Версия 08:55, 3 мая 2018

В данной статье представлен пример ведения статистики, которая отслеживает изменения поля price у объектов каталога, учитывается только пользователь с $object_id=14.

В новой реализации модулей (compatible-modules = 1 в config.ini или версия php >= 7.0): Для выполнения поставленной задачи, добавим в папку /classes/components/catalog/ файл custom_events.php данного содержания:

<?php
new umiEventListener('systemModifyElement', 'catalog', 'staticinfo'); 
?>

Также добавим файл permissions.custom.php:

<?php
$permissions = ['tree' => ['staticinfo']];
?>

А в файл customAdmin.php, после свойства public $module; добавим новый метод staticinfo:

   public function staticinfo(iUmiEventPoint $e) {
 
     if ($e->getMode() == "before" && $e->getParam('user_id') == '14') {            
        $element  = $e->getRef('element');
        $obj_id =  $element->objectId;
  
        if($element->getMethod() == 'object' && isset($_POST['data'][$obj_id]['price'])){
          $new_price = $_POST['data'][$obj_id]['price'];
          $old_price = $element->price;
          if($new_price != $old_price){
            $str = "User 14, edit field price, object = {$element->id}, old_price= {$old_price}, new_price = {$new_price}\r\n";
            file_put_contents(CURRENT_WORKING_DIR . '/statistika.txt', $str, FILE_APPEND);
          }
       }
    }
  }


Теперь если пользователь изменяет цену у какого-либо объекта каталога, в файл statistika.txt, который будет создан в корне сайта, запишется информация об этом событии. systemModifyElement – это событие в классе baseModuleAdmin (baseModuleAdmin.php) , в методе saveEditedElementData:

...
$event = new umiEventPoint('systemModifyElement');
$event->addRef('element', $element);
$event->addRef('inputData', $inputData);
$event->setParam('user_id', $user_id);
$event->setMode('before');
$event->call();
...


В старой реализации модулей (compatible-modules = 0 в config.ini и версия php < 7.0): Для выполнения поставленной задачи, добавим в папку /classes/modules/catalog/ файл custom_events.php данного содержания:

<?php
new umiEventListener('systemModifyElement', 'catalog', 'staticinfo'); 
?>

Также добавим файл permissions.custom.php:

<?php
$permissions = Array('tree' => Array('staticinfo'));
?>

А в файл __custom_adm.php, после слов //TODO: Write here your own macroses (admin mode) добавим новый метод staticinfo:

   public function staticinfo(iUmiEventPoint $e) {
 
     if ($e->getMode() == "before" && $e->getParam('user_id') == '14') {            
        $element  = $e->getRef('element');
        $obj_id =  $element->objectId;
  
        if($element->getMethod() == 'object' && isset($_POST['data'][$obj_id]['price'])){
          $new_price = $_POST['data'][$obj_id]['price'];
          $old_price = $element->price;
          if($new_price != $old_price){
            $str = "User 14, edit field price, object = {$element->id}, old_price= {$old_price}, new_price = {$new_price}\r\n";
            file_put_contents(CURRENT_WORKING_DIR . '/statistika.txt', $str, FILE_APPEND);
          }
       }
    }
  }


Теперь если пользователь изменяет цену у какого-либо объекта каталога, в файл statistika.txt, который будет создан в корне сайта, запишется информация об этом событии. systemModifyElement – это событие в классе baseModuleAdmin (baseModuleAdmin.php) , в методе saveEditedElementData:

...
$event = new umiEventPoint("systemModifyElement");
$event->addRef("element", $element);
$event->addRef("inputData", $inputData);
$event->setParam("user_id", $oUsersMdl->user_id);
$event->setMode("before");
$event->call();
...