Автоматическое формирование даты при создании страницы на примере работы с каталогом. — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
Строка 14: Строка 14:
 
<?php
 
<?php
 
abstract class __custom_adm_catalog {
 
abstract class __custom_adm_catalog {
public function onCreateObj(iUmiEventPoint $event)
+
public function onCreateObj(iUmiEventPoint $event) {
 +
 +
$obj='';
 +
$time=time();
 +
 +
if( $event->getMode() === "after") {
 
   
 
   
{if( $event->getMode()==="after")
+
$obj=$event->getRef("element");
 
   
 
   
{$obj=$event->getRef("element");
+
$obj->setValue('data_postupleniya',$time);
 
   
 
   
$time=time();
+
$obj->commit();
 
   
 
   
$obj->setValue('data_postupleniya',$time);
+
+
}
$obj->commit();
+
 
 
                return true;}
 
 
 
                 }
 
                 }
                                  };
+
   
 +
        };
 
?>
 
?>
 
</source>
 
</source>

Текущая версия на 10:55, 1 ноября 2013

Актуально для версии 2.9.1

Задача

Предположим, в Каталог периодически добавляются товары, и, для учета, необходимо, чтобы при создании каждого объекта у него сразу выставлялась текущая дата.

Решение

Создадим в модуле "Шаблоны данных" для типа "Объект каталога" поле "дата поступления" с идентификатором data_postupleniya

Разместим кастомный макрос, перехватывающий событие создания страницы, в директорию ~/classes/modules/catalog/

__custom_adm.php:

<?php
	abstract class __custom_adm_catalog {
		public function onCreateObj(iUmiEventPoint $event) {
			
			$obj='';
			$time=time();
			
			if( $event->getMode() === "after") {
 
				$obj=$event->getRef("element");
 
				$obj->setValue('data_postupleniya',$time);
 
				$obj->commit();
 
			
			}

                }
    
        };
?>

custom_events.php:

<?php
 new umiEventListener('systemCreateElement', 'catalog', 'onCreateObj');
?>

permissions.custom.php:

<?php
	$permissions = array(
		'tree' => array('onCreateObj'),
		'view' => array('onCreateObj')
	);
?>

Теперь для каждого нового созданного объекта каталога в специальное поле будет записываться текущая дата.