Перемещение в архив 2.X

 
Посетитель
no avatar
Сообщений: 4
Есть контент, в котором указывается дедлайн. Не могу понять каким образом сделать, чтобы на день, следующий за датой дедлайна, этот контент НЕ удалялся, оставался на сайте, но переносился из актуального списка в какой-нибудь неактуальный, например в какую-нибудь категорию "архив" или что-то подобное.
Есть ли какой-либо готовый функционал для этого "из коробки" или какой-либо плагин? Не нашел на форуме подобной информации.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3111
на сайте
@denier,
Так просто настройте в типе контента управление публикацией.
По окончании срока публикации контент остается в базе, но не публикуется.
Реклама
cms
Посетитель
no avatar
Сообщений: 4
Ris:

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

Ссылки на него будут работать? Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3111
на сайте
@denier:
Ссылки на него будут работать?
Понятия не имею.
@denier:
Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?
Админу в админке.
Посетитель
no avatar
Сообщений: 4
Ris:

@denier:
Ссылки на него будут работать?
Понятия не имею.
@denier:
Можно ли будет этот контент пользователям где-то посмотреть после снятия с публикации?
Админу в админке.

Вот то ж sad Это как раз и не годится. Контент должен быть виден пользователям, но не в основной категории (X), а в другой (Y). Грубо говоря, должно автоматом перебрасывать контент из категории X в категорию Y тогда, когда наступает день, следующий за днём того самого дедлайна.
Либо, как вариант, автоматом поднимать в "просроченном" контенте какой-нибудь флаг, который бы выводился в этом самом контенте, а уже потом несложно сделать сортировку штатными средствами, например через наборы.
Редактировалось: 2 раз (Последний: 10 сентября 2019 в 15:27)
Посетитель
no avatar
Почетный донор проектаМедаль
Сообщений: 556
похоже, что из коробки пока это сделать не получится. Наверно необходима будет опция в настройках типа контента.
Перемещение в архив
Чтобы по истечению определённого периода запись перемещалась или в другой тип контента или по другому как-то, гуру подскажут как лучше сделать и чтобы доступ оставался обычным пользователям. Своего рода архив статей, разложенных по месяцам например).
А может и перемещение в другой тип контента и не нужен, достаточно создать в этом же типе контента категорию "архив", а в нём по месяцам подкатегории
Редактировалось: 1 раз (Последний: 10 сентября 2019 в 15:57)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3111
на сайте
Если нужно просто переместить в другую категорию - можно сделать простым хуком.
Посетитель
no avatar
Сообщений: 4
Ris:

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

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

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

дополнение:
Временно решил вопрос автоматической сортировкой через наборы. Сначала показывает более дальние события, при этом более ранние события или уже прошедшие уходят в конец списка.
Редактировалось: 2 раз (Последний: 13 сентября 2019 в 13:01)
Посетитель
no avatar
Сообщений: 26
На самом деле, вопрос важный и многим необходим. Думаю не мало сайтов на инстанте с контентом который необходимо переводить в архив, так чтоб он был доступен для поисковиков и не вводил в заблуждение пользователей.
Решение вижу такое, в выпадающем списке (что делать с публикацией по истечении срока) нужно добавить выбор категории в этом же типе контента. Это самый простой выход из положения. Самому нужно такое решение. Буду пробовать, если что то получится отпишусь.
Ну и если есть идеи, как это можно запилить, поделитесь с коллегами пожалуйста. Возможно решение попадёт в коробку инстанта, что было бы здорово!
Посетитель
no avatar
Сообщений: 26
И так, нам нужно сделать перевод контента через "Управление сроком публикации" в другую категорию, а лучше вообще сменить тип контента, после завершения срока публикации. В последнем варианте у типов контента думаю должны совпадать поля и настройки.
Попробовал реализовать правку таким образом:
system\controllers\admin\forms\form_ctypes_basic.php
строка 91
Код PHP:
  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
Код PHP:
  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)
Код PHP:
  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. }
Но теперь я не догоняю как отправить в БД информацию о смене категории, а лучше вообще сменить тип контента
Редактировалось: 3 раз (Последний: 27 декабря 2019 в 12:46)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3111
на сайте
@Mrmahonin:
как отправить в БД информацию о смене категории
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);
@Mrmahonin:
а лучше вообще сменить тип контента
А вот это сложнее, так как потребуется перенос в другую таблицу.
Посетитель
no avatar
Сообщений: 26
Ris:

@Mrmahonin:
как отправить в БД информацию о смене категории
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);
@Mrmahonin:
а лучше вообще сменить тип контента
А вот это сложнее, так как потребуется перенос в другую таблицу.
А в ['category_id'] как сразу вписать его category_id ? это же не просто id который порядковым номером например '7' называется, из чего он складывается чтобы его напрямую вписать?


И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?
Посетитель
no avatar
Сообщений: 26
Ris:

@Mrmahonin:
как отправить в БД информацию о смене категории
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);
@Mrmahonin:
а лучше вообще сменить тип контента
А вот это сложнее, так как потребуется перенос в другую таблицу.

Не получается, пишу в system\controllers\content\model.php
Код 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. }
отдаёт ошибку
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3111
на сайте
@Mrmahonin:
А в ['category_id'] как сразу вписать его category_id ?
Можно прямо вписать.
Код PHP:
  1. $this->model->update('con_'.$ctype, $item['id'], array('category_id' => 'нужная_категория');
@Mrmahonin:
из чего он складывается чтобы его напрямую вписать?
Из номера категории, которую Вы создали, как архивную.
@Mrmahonin:
И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?
Добавить в этом типе контента и удалить в другом.
Посетитель
no avatar
Сообщений: 26
Ris:

@Mrmahonin:
А в ['category_id'] как сразу вписать его category_id ?
Можно прямо вписать.
Код PHP:
  1. $this->model->update('con_'.$ctype, $item['id'], array('category_id' => 'нужная_категория');
@Mrmahonin:
из чего он складывается чтобы его напрямую вписать?
Из номера категории, которую Вы создали, как архивную.
@Mrmahonin:
И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?
Добавить в этом типе контента и удалить в другом.
возможно я не правильно вписываю, выдаёт ошибку sad
в файле system\controllers\content\model.php ? правильно?

Код 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. }
это то что я вписываю - неработает
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.