Перемещение в архив

InstantCMS 2.X
#1 10 сентября 2019 в 13:56
Есть контент, в котором указывается дедлайн. Не могу понять каким образом сделать, чтобы на день, следующий за датой дедлайна, этот контент НЕ удалялся, оставался на сайте, но переносился из актуального списка в какой-нибудь неактуальный, например в какую-нибудь категорию "архив" или что-то подобное.
Есть ли какой-либо готовый функционал для этого "из коробки" или какой-либо плагин? Не нашел на форуме подобной информации.
#2 10 сентября 2019 в 14:03
@denier,
Так просто настройте в типе контента управление публикацией.
По окончании срока публикации контент остается в базе, но не публикуется.
#3 10 сентября 2019 в 14:10


@denier,
Так просто настройте в типе контента управление публикацией.
По окончании срока публикации контент остается в базе, но не публикуется.

Ris

Ссылки на него будут работать? Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?
#4 10 сентября 2019 в 14:54

Ссылки на него будут работать?

@denier
Понятия не имею.

Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?

@denier
Админу в админке.
#5 10 сентября 2019 в 15:08


Ссылки на него будут работать?

@denier
Понятия не имею.

Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?

@denier
Админу в админке.

Ris

Вот то ж😥Это как раз и не годится. Контент должен быть виден пользователям, но не в основной категории (X), а в другой (Y). Грубо говоря, должно автоматом перебрасывать контент из категории X в категорию Y тогда, когда наступает день, следующий за днём того самого дедлайна.
Либо, как вариант, автоматом поднимать в "просроченном" контенте какой-нибудь флаг, который бы выводился в этом самом контенте, а уже потом несложно сделать сортировку штатными средствами, например через наборы.
#6 10 сентября 2019 в 15:37
похоже, что из коробки пока это сделать не получится. Наверно необходима будет опция в настройках типа контента.

Чтобы по истечению определённого периода запись перемещалась или в другой тип контента или по другому как-то, гуру подскажут как лучше сделать и чтобы доступ оставался обычным пользователям. Своего рода архив статей, разложенных по месяцам например).
А может и перемещение в другой тип контента и не нужен, достаточно создать в этом же типе контента категорию "архив", а в нём по месяцам подкатегории
#7 10 сентября 2019 в 16:14
Если нужно просто переместить в другую категорию — можно сделать простым хуком.
#8 13 сентября 2019 в 12:32


Если нужно просто переместить в другую категорию — можно сделать простым хуком.

Ris

то есть готовых решений на данный момент нет?

2all:
Сколько будет стоить создать такой функционал?

дополнение:
Временно решил вопрос автоматической сортировкой через наборы. Сначала показывает более дальние события, при этом более ранние события или уже прошедшие уходят в конец списка.
#9 23 декабря 2019 в 17:02
На самом деле, вопрос важный и многим необходим. Думаю не мало сайтов на инстанте с контентом который необходимо переводить в архив, так чтоб он был доступен для поисковиков и не вводил в заблуждение пользователей.
Решение вижу такое, в выпадающем списке (что делать с публикацией по истечении срока) нужно добавить выбор категории в этом же типе контента. Это самый простой выход из положения. Самому нужно такое решение. Буду пробовать, если что то получится отпишусь.
Ну и если есть идеи, как это можно запилить, поделитесь с коллегами пожалуйста. Возможно решение попадёт в коробку инстанта, что было бы здорово!
#10 27 декабря 2019 в 12:33
И так, нам нужно сделать перевод контента через "Управление сроком публикации" в другую категорию, а лучше вообще сменить тип контента, после завершения срока публикации. В последнем варианте у типов контента думаю должны совпадать поля и настройки.
Попробовал реализовать правку таким образом:
system\controllers\admin\forms\form_ctypes_basic.php
строка 91
  1. new fieldList('options:is_date_range_process', array(
  2. 'title' => LANG_CP_IS_PUB_CONTROL_PROCESS,
  3. 'default' => 'hide',
  4. 'items' => array(
  5. 'hide' => LANG_CP_IS_PUB_CONTROL_PROCESS_HIDE,
  6. 'transferal' => 'Перенести в CLOSED' ,
  7. 'delete' => LANG_CP_IS_PUB_CONTROL_PROCESS_DEL,
  8. 'in_basket' => LANG_BASKET_DELETE
  9. ),
  10. 'visible_depend' => array('is_date_range' => array('show' => array('1')))
  11. )),
добавил 'transferal' => 'Перенести в CLOSED' ,

system\controllers\content\hooks\cron_publication.php
строка 30
  1. if($ctype['options']['is_date_range_process'] === 'delete') {
  2. $this->model->deleteExpiredContentItems($ctype['name']);
  3. } elseif($ctype['options']['is_date_range_process'] === 'transferal') {
  4. $this->model->CategoriesExpiredContentItems($ctype['name']);
  5. } elseif($ctype['options']['is_date_range_process'] === 'in_basket') {
  6. $this->model->toTrashExpiredContentItems($ctype['name']);
  7. } else {
  8. $this->model->hideExpiredContentItems($ctype['name']);
  9. }
добавил } elseif($ctype['options']['is_date_range_process'] === 'transferal') {
$this->model->CategoriesExpiredContentItems($ctype['name']);

system\controllers\content\model.php
как пример перенос контента в черновик вывглядит так (строка 2602)
  1. public function toTrashExpiredContentItems($ctype_name){
  2.  
  3. return $this->
  4. filterNotNull('date_pub_end')->
  5. filter('i.date_pub_end <= NOW()')->
  6. get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){
  7. $model->toTrashContentItem($ctype_name, $item);
  8. return $item['id'];
  9. });
  10.  
  11. }
Но теперь я не догоняю как отправить в БД информацию о смене категории, а лучше вообще сменить тип контента
#11 27 декабря 2019 в 12:47

как отправить в БД информацию о смене категории

@Mrmahonin
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);

а лучше вообще сменить тип контента

@Mrmahonin
А вот это сложнее, так как потребуется перенос в другую таблицу.
#12 27 декабря 2019 в 14:52


как отправить в БД информацию о смене категории

@Mrmahonin
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);

а лучше вообще сменить тип контента

@Mrmahonin
А вот это сложнее, так как потребуется перенос в другую таблицу.

Ris
А в ['category_id'] как сразу вписать его category_id? это же не просто id который порядковым номером например '7' называется, из чего он складывается чтобы его напрямую вписать?


И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?
#13 27 декабря 2019 в 15:02


как отправить в БД информацию о смене категории

@Mrmahonin
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);

а лучше вообще сменить тип контента

@Mrmahonin
А вот это сложнее, так как потребуется перенос в другую таблицу.

Ris

Не получается, пишу в system\controllers\content\model.php
  1. return $this->
  2. filterNotNull('date_pub_end')->
  3. filter('i.date_pub_end <= NOW()')->
  4. get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){
  5. $item['category_id'];
  6. $this->model->updateContentItem($ctype, $id, $item, $fields);
  7. });
  8.  
  9. }
отдаёт ошибку
#14 27 декабря 2019 в 15:03

А в ['category_id'] как сразу вписать его category_id ?

@Mrmahonin
Можно прямо вписать.
  1. $this->model->update('con_'.$ctype, $item['id'], array('category_id' => 'нужная_категория');

из чего он складывается чтобы его напрямую вписать?

@Mrmahonin
Из номера категории, которую Вы создали, как архивную.

И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?

@Mrmahonin
Добавить в этом типе контента и удалить в другом.
#15 27 декабря 2019 в 16:34


А в ['category_id'] как сразу вписать его category_id ?

@Mrmahonin
Можно прямо вписать.
  1. $this->model->update('con_'.$ctype, $item['id'], array('category_id' => 'нужная_категория');

из чего он складывается чтобы его напрямую вписать?

@Mrmahonin
Из номера категории, которую Вы создали, как архивную.

И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?

@Mrmahonin
Добавить в этом типе контента и удалить в другом.

Ris
возможно я не правильно вписываю, выдаёт ошибку sad
в файле system\controllers\content\model.php? правильно?

  1. public function CategoriesExpiredContentItems($ctype_name){
  2.  
  3. return $this->
  4. filterNotNull('date_pub_end')->
  5. filter('i.date_pub_end <= NOW()')->
  6. get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){
  7. $this->model->update('con_'.$ctype, $item['id'], array('category_id' => '3')
  8. return $item['category_id'];
  9. });
  10.  
  11. }
это то что я вписываю — неработает
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.