События – отслеживание изменения цены товаров в административной части
Материал из Umicms
В данной статье представлен пример ведения статистики, которая отслеживает изменения поля price у объектов каталога, учитывается только пользователь с $object_id=14. Для выполнения поставленной задачи, добавим в папку /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(); ...
