Как установить по умолчанию срок публикации записи

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X

без возможности изменения пользователем

#16 3 октября 2022 в 16:09

Я так понимаю это проблема самого Instant и никто кроме Fuze, нам не поможет?

#17 3 октября 2022 в 17:12

1. В папке system/controllers создать папку datepubend, в ней создать папку hooks и файл frontend.php с таким содержимым:

  1. <?php class datepubend extends cmsFrontend{
  2.  
  3. }

2. В папке hooks создать файл content_after_add_approve.php с таким содержимым:

  1. <?php class onDatepubendContentAfterAddApprove extends cmsAction {
  2.  
  3. public function run($data){
  4.  
  5. $ctypes_names = ['board', 'news']; // перечисляем типы контента
  6.  
  7. if (!in_array($data['ctype_name'], $ctypes_names)) { return $data; }
  8.  
  9. $model = cmsCore::getModel('content');
  10. $table_name = 'con_'.$data['ctype_name'];
  11.  
  12. $days = 45; // количество дней
  13.  
  14. $date_pub_end = date('Y-m-d H:i:s', strtotime('+'.$days.' days'));
  15. $model->update($table_name, $data['item']['id'], ['date_pub_end' => $date_pub_end]);
  16.  
  17. return $data;
  18.  
  19. }
  20.  
  21. }

3. Панель управления -> Компоненты -> Управление событиями — обновить события.

4. Стилями скрыть поле выбора количества дней в форме.

#18 3 октября 2022 в 21:02

4. Стилями скрыть поле выбора количества дней в форме.

Нифигаccе о-го-гошеньки

Лучше добавить второй хук на форму добавления/редактирования записи и удалить поле совсем, чтобы «кул хацкеры» не вносили правки в исходный код на странице при редактировании.

#19 3 октября 2022 в 21:39

Не знаю, сработает ли удаление записей, если вообще отключить управление сроком публикации. Если сработает, то всё ещё проще.

#20 4 октября 2022 в 12:51

1. В папке system/controllers создать папку datepubend, в ней создать папку hooks и файл frontend.php с таким содержимым:

  1. <?php class datepubend extends cmsFrontend{
  2.  
  3. }

2. В папке hooks создать файл content_after_add_approve.php с таким содержимым:

  1. <?php class onDatepubendContentAfterAddApprove extends cmsAction {
  2.  
  3. public function run($data){
  4.  
  5. $ctypes_names = ['board', 'news']; // перечисляем типы контента
  6.  
  7. if (!in_array($data['ctype_name'], $ctypes_names)) { return $data; }
  8.  
  9. $model = cmsCore::getModel('content');
  10. $table_name = 'con_'.$data['ctype_name'];
  11.  
  12. $days = 45; // количество дней
  13.  
  14. $date_pub_end = date('Y-m-d H:i:s', strtotime('+'.$days.' days'));
  15. $model->update($table_name, $data['item']['id'], ['date_pub_end' => $date_pub_end]);
  16.  
  17. return $data;
  18.  
  19. }
  20.  
  21. }

3. Панель управления -> Компоненты -> Управление событиями — обновить события.

4. Стилями скрыть поле выбора количества дней в форме.

Нифигаccе о-го-гошеньки

Спасибо, хук работает)) Но есть одно «НО», и одна просьба))

«НО» заключается в том что нужно обязательно включить в ТК «Управление сроком публикации», без этого хук на удаление записи не срабатывает и запись не удаляется))

   Изображение

Во вкладке «Доступ» в ТК, можно отключить доступ к «Выбор срока окончания публикации», тогда этого поля у пользователей не будет, а у админа будет поэтому все нормально.

Изображение

А что касательно просьбы, было бы отлично чтобы «Максимальный срок публикации дней» брался из вкладки «Доступ» для каждой группы свой. Это все находится в таблице cms_perms_users. ID правила всегда одинаковый 26, тип ТК у нас указан, ID группы есть, ну и значение для переменной тоже есть, осталось это все в хук добавить)) Сможете реализовать?) Но я думаю что это все равно на уровне бага, ведь максимальный срок публикации указан для каждой группы, мы им запрещаем самим выбирать и изменять этот срок, соответственно все должно работать нормально, но оно не работает.

 Изображение

#21 4 октября 2022 в 13:18

реализовать

CEH9I

Попробуйте (не проверял, писал наугад):

  1. <?php class onDatepubendContentAfterAddApprove extends cmsAction {
  2.  
  3. public function run($data){
  4.  
  5. $model = cmsCore::getModel('content');
  6. $perms = $model->filterEqual('rule_id', 26)->filterEqual('subject', $data['ctype_name'])->filterIn('group_id', $this->cms_user->groups)->get('perms_users');
  7.  
  8. if (!$perms) { return $data; }
  9.  
  10. $days_arr = [];
  11.  
  12. foreach ($perms as $perm) {
  13.  
  14. $days_arr[] = $perm['value'];
  15.  
  16. }
  17.  
  18. $days = max($days_arr);
  19.  
  20. if ($days == 0) { return $data; }
  21.  
  22. $date_pub_end = date('Y-m-d H:i:s', strtotime('+'.$days.' days'));
  23. $data['date_pub_end'] = $date_pub_end;
  24. $model->update('con_'.$data['ctype_name'], $data['item']['id'], ['date_pub_end' => $date_pub_end]);
  25.  
  26. return $data;
  27.  
  28. }
  29.  
  30. }
#22 5 октября 2022 в 11:52

реализовать

CEH9I

Попробуйте (не проверял, писал наугад):

  1. <?php class onDatepubendContentAfterAddApprove extends cmsAction {
  2.  
  3. public function run($data){
  4.  
  5. $model = cmsCore::getModel('content');
  6. $perms = $model->filterEqual('rule_id', 26)->filterEqual('subject', $data['ctype_name'])->filterIn('group_id', $this->cms_user->groups)->get('perms_users');
  7.  
  8. if (!$perms) { return $data; }
  9.  
  10. $days_arr = [];
  11.  
  12. foreach ($perms as $perm) {
  13.  
  14. $days_arr[] = $perm['value'];
  15.  
  16. }
  17.  
  18. $days = max($days_arr);
  19.  
  20. if ($days == 0) { return $data; }
  21.  
  22. $date_pub_end = date('Y-m-d H:i:s', strtotime('+'.$days.' days'));
  23. $data['date_pub_end'] = $date_pub_end;
  24. $model->update('con_'.$data['ctype_name'], $data['item']['id'], ['date_pub_end' => $date_pub_end]);
  25.  
  26. return $data;
  27.  
  28. }
  29.  
  30. }
Нифигаccе о-го-гошеньки

Вооот теперь как надо, все работает)) Спасибо огромное))

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.