Сохранение автора новости, при её создании — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
'''Актуально для версии 2.9'''
+
'''Актуально для версии 2.18'''
  
 
Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS.
 
Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS.
В файл ~/classes/modules/news/custom_events.php добавим код
+
 
 +
В новой реализации модулей необходимо добавить код в файл ~/classes/components/news/custom_events.php
 +
В старой реализации модулей добавим код в файл ~/classes/modules/news/custom_events.php
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
Строка 9: Строка 11:
 
?>
 
?>
 
</source>
 
</source>
В файл ~/classes/modules/news/permissions.custom.php добавим запись о наших будущих обработчиках.
+
В новой реализации добавим в файл ~/classes/components/news/permissions.custom.php запись о наших будущих обработчиках. В старой реализации запись добавляется в файл ~/classes/modules/news/permissions.custom.php
 
Теперь в типе данных Новость создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника спаравочник "Пользователь".
 
Теперь в типе данных Новость создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника спаравочник "Пользователь".
Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего. Код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)
+
Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего.  
 +
В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/components/news/customAdmin.php после строки public $module;
 +
В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)
 
<source lang="php">
 
<source lang="php">
<?php
+
 
 
public function setAuthor(iUmiEventPoint $oEventPoint){
 
public function setAuthor(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
+
    if ($oEventPoint->getMode() === "after"){
'''Актуально для версии 2.9'''
+
      $object = $oEventPoint->getRef("element");
 
+
      $permissions = permissionsCollection::getInstance();
$object = $oEventPoint->getRef("element");
+
      $currentUser=$permissions->getUserId();
$permissions = permissionsCollection::getInstance();
+
      $object->setValue('author',$currentUser);
$currentUser=$permissions->getUserId();
+
      $object->commit();
$object->setValue('author',$currentUser);
+
      return true;
$object->commit();
+
    }
return true;
 
}
 
 
}
 
}
  
 
public function setAuthorEdition(iUmiEventPoint $oEventPoint){
 
public function setAuthorEdition(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "after"){
+
    if ($oEventPoint->getMode() === "after"){
$object = $oEventPoint->getRef("element");
+
      $object = $oEventPoint->getRef("element");
$permissions = permissionsCollection::getInstance();
+
      $permissions = permissionsCollection::getInstance();
$currentUser=$permissions->getUserId();
+
      $currentUser=$permissions->getUserId();
$object->setValue('authoredition',$currentUser);
+
      $object->setValue('authoredition',$currentUser);
$object->commit();
+
      $object->commit();
return true;
+
      return true;
 +
    }
 
}
 
}
}
 
?>
 
 
</source>
 
</source>
 
Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал.
 
Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал.

Версия 15:46, 1 мая 2018

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

Поставим себе задачу сохранять автора новостей, чтобы его можно было выводить на страницах сайта. Это можно реализовать воспользовавшись событийной моделью UMI.CMS.

В новой реализации модулей необходимо добавить код в файл ~/classes/components/news/custom_events.php В старой реализации модулей добавим код в файл ~/classes/modules/news/custom_events.php

<?php
new umiEventListener('systemCreateElement', 'news', 'setAuthor');
new umiEventListener('systemModifyElement', 'news', 'setAuthorEdition');
?>

В новой реализации добавим в файл ~/classes/components/news/permissions.custom.php запись о наших будущих обработчиках. В старой реализации запись добавляется в файл ~/classes/modules/news/permissions.custom.php Теперь в типе данных Новость создадим два поля author и authoredition типа выпадающий список и использующие в качестве справочника спаравочник "Пользователь". Осталось написать два обработчика, первый будет работать при создании новости и сохранять автора, второй будет сохранять в поле authoredition id последнего редактировавшего. В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/components/news/customAdmin.php после строки public $module; В новой реализации модулей код обработчиков нужно поместить в файл ~/classes/modules/news/__custom_adm.php после строки //TODO: Write here your own macroses (admin mode)

public function setAuthor(iUmiEventPoint $oEventPoint){
    if ($oEventPoint->getMode() === "after"){
      $object = $oEventPoint->getRef("element");
      $permissions = permissionsCollection::getInstance();
      $currentUser=$permissions->getUserId();
      $object->setValue('author',$currentUser);
      $object->commit();
      return true;
    }
}

public function setAuthorEdition(iUmiEventPoint $oEventPoint){
    if ($oEventPoint->getMode() === "after"){
      $object = $oEventPoint->getRef("element");
      $permissions = permissionsCollection::getInstance();
      $currentUser=$permissions->getUserId();
      $object->setValue('authoredition',$currentUser);
      $object->commit();
      return true;
    }
}

Теперь, при создании статьи, в поле author будет добавлена запись о том кто создал новость, а при редактировании в поле authoredition тот кто редактировал.

Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.