
Sanchez
+6
Репутация
9
Рейтинг
Пожалуй апну, хочется эту проблему закрыть в 2019
Не надо ничего прописывать. Создайте файл например cron_archive.php в папке \system\controllers\content\hooks\.
После этого создайте задание планировщика в админке.
Видимо неправильно поняли, суть в том что при создании типа контента включая " Управление сроком публикации " выставляем пункт что делать по окончании срока: скрыть, удалить, удалить в корзину. Пользователи публикующие свой контент, устанавливают дату окончания публикации после чего она не должна удаляться а должна перемещается в категорию АРХИВ (closed), в идеале в отдельный тип контента "Архив".
Для чего я и добавил в выпадающий список админки "Управление сроком публикации" — перенести в архив
system\controllers\admin\forms\form_ctypes_basic.php (строка 91)
'title' => LANG_CP_IS_PUB_CONTROL_PROCESS, 'default' => 'hide', 'hide' => LANG_CP_IS_PUB_CONTROL_PROCESS_HIDE, 'transferal' => 'Перенести в АРХИВ' , 'delete' => LANG_CP_IS_PUB_CONTROL_PROCESS_DEL, 'in_basket' => LANG_BASKET_DELETE ), )),
system\controllers\content\hooks\cron_publication.php
class onContentCronPublication extends cmsAction { public function run(){ $ctypes = $this->model->getContentTypes(); foreach($ctypes as $ctype){ if (!$ctype['is_date_range']) { continue; } $pub_items = $this->model->filterNotEqual('is_pub', 1)-> filterIsNull('is_deleted')-> filter('i.date_pub <= NOW()')-> filterStart()-> filter('i.date_pub_end > NOW()')-> filterOr()-> filterIsNull('i.date_pub_end')-> filterEnd()-> get($this->model->table_prefix.$ctype['name']); if($pub_items){ $this->model->publishDelayedContentItems($ctype['name']); $is_pub_items[$ctype['name']] = $pub_items; } if($ctype['options']['is_date_range_process'] === 'delete') { $this->model->deleteExpiredContentItems($ctype['name']); } elseif($ctype['options']['is_date_range_process'] === 'transferal') { $this->model->CategoriesExpiredContentItems($ctype['name']); } elseif($ctype['options']['is_date_range_process'] === 'in_basket') { $this->model->toTrashExpiredContentItems($ctype['name']); } else { $this->model->hideExpiredContentItems($ctype['name']); } } if($is_pub_items){ cmsEventsManager::hook('publish_delayed_content', $is_pub_items); } } }
Вот их код
public function hideExpiredContentItems($ctype_name){ return $this->filterIsNull('is_deleted')-> filterEqual('is_pub', 1)-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> 'is_pub' => 0 )); } public function deleteExpiredContentItems($ctype_name){ return $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){ $model->deleteContentItem($ctype_name, $item['id']); return $item['id']; }); } public function toTrashExpiredContentItems($ctype_name){ return $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){ $model->toTrashContentItem($ctype_name, $item); return $item['id']; }); }
Ребят, что никто не подскажет что куда прописать чтобы по расписанию можно было менять категорию для контента!? Для знающих код, делов то на минуту. Всё дело встало на этом месте. По хорошему вообще сменить тип контента, но так как никто не хочет заморачиваться, хотя бы категорию.
Я вообще не понял, что Вы пытаетесь сделать.Ребят, подскажите решение, вот очень нужно оно.
По мне, так нужно получить массив с номерами единиц контента, которые требуют переназначения категории, а потом перебрать этот массив и в процессе изменить категорию.
Да всё так, но вот ошибку отдаёт после выполнения cron.
Ребят, подскажите решение, вот очень нужно оно. Выдаёт ошибку
возможно я не правильно вписываю, выдаёт ошибку
Можно прямо вписать.А в ['category_id'] как сразу вписать его category_id ?
Из номера категории, которую Вы создали, как архивную.из чего он складывается чтобы его напрямую вписать?
Добавить в этом типе контента и удалить в другом.И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?

в файле system\controllers\content\model.php? правильно?
public function CategoriesExpiredContentItems($ctype_name){ return $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){ return $item['category_id']; }); }
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);как отправить в БД информацию о смене категории
А вот это сложнее, так как потребуется перенос в другую таблицу.а лучше вообще сменить тип контента
Не получается, пишу в system\controllers\content\model.php
return $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){ $item['category_id']; $this->model->updateContentItem($ctype, $id, $item, $fields); }); }
А в ['category_id'] как сразу вписать его category_id? это же не просто id который порядковым номером например '7' называется, из чего он складывается чтобы его напрямую вписать?
Просто изменить $item['category_id'] на нужную категорию. Потом $this->model->updateContentItem($ctype, $id, $item, $fields);как отправить в БД информацию о смене категории
А вот это сложнее, так как потребуется перенос в другую таблицу.а лучше вообще сменить тип контента
И всё же если представить что в типе контента 'closed' те же поля с такими же системными именами, как можно перенести?
И так, нам нужно сделать перевод контента через "Управление сроком публикации" в другую категорию, а лучше вообще сменить тип контента, после завершения срока публикации. В последнем варианте у типов контента думаю должны совпадать поля и настройки.
Попробовал реализовать правку таким образом:
system\controllers\admin\forms\form_ctypes_basic.php
строка 91
добавил 'transferal' => 'Перенести в CLOSED' ,
system\controllers\content\hooks\cron_publication.php
строка 30
добавил } elseif($ctype['options']['is_date_range_process'] === 'transferal') {
$this->model->CategoriesExpiredContentItems($ctype['name']);
system\controllers\content\model.php
как пример перенос контента в черновик вывглядит так (строка 2602)
Но теперь я не догоняю как отправить в БД информацию о смене категории, а лучше вообще сменить тип контента
Попробовал реализовать правку таким образом:
system\controllers\admin\forms\form_ctypes_basic.php
строка 91
'title' => LANG_CP_IS_PUB_CONTROL_PROCESS, 'default' => 'hide', 'hide' => LANG_CP_IS_PUB_CONTROL_PROCESS_HIDE, 'transferal' => 'Перенести в CLOSED' , 'delete' => LANG_CP_IS_PUB_CONTROL_PROCESS_DEL, 'in_basket' => LANG_BASKET_DELETE ), )),
system\controllers\content\hooks\cron_publication.php
строка 30
if($ctype['options']['is_date_range_process'] === 'delete') { $this->model->deleteExpiredContentItems($ctype['name']); } elseif($ctype['options']['is_date_range_process'] === 'transferal') { $this->model->CategoriesExpiredContentItems($ctype['name']); } elseif($ctype['options']['is_date_range_process'] === 'in_basket') { $this->model->toTrashExpiredContentItems($ctype['name']); } else { $this->model->hideExpiredContentItems($ctype['name']); }
$this->model->CategoriesExpiredContentItems($ctype['name']);
system\controllers\content\model.php
как пример перенос контента в черновик вывглядит так (строка 2602)
public function toTrashExpiredContentItems($ctype_name){ return $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix.$ctype_name, function($item, $model) use($ctype_name){ $model->toTrashContentItem($ctype_name, $item); return $item['id']; }); }
На самом деле, вопрос важный и многим необходим. Думаю не мало сайтов на инстанте с контентом который необходимо переводить в архив, так чтоб он был доступен для поисковиков и не вводил в заблуждение пользователей.
Решение вижу такое, в выпадающем списке (что делать с публикацией по истечении срока) нужно добавить выбор категории в этом же типе контента. Это самый простой выход из положения. Самому нужно такое решение. Буду пробовать, если что то получится отпишусь.
Ну и если есть идеи, как это можно запилить, поделитесь с коллегами пожалуйста. Возможно решение попадёт в коробку инстанта, что было бы здорово!
Решение вижу такое, в выпадающем списке (что делать с публикацией по истечении срока) нужно добавить выбор категории в этом же типе контента. Это самый простой выход из положения. Самому нужно такое решение. Буду пробовать, если что то получится отпишусь.
Ну и если есть идеи, как это можно запилить, поделитесь с коллегами пожалуйста. Возможно решение попадёт в коробку инстанта, что было бы здорово!
Уважаемые знатоки, вопрос!
Какой вариант перемещения полей в профиле пользователя будет лучше со стороны производительности?
1. Средствами PHP
Вывод изображения и текстового поля со скрытием основного вывода
2. Средствами JS
Оба варианта не плохо работают. Но всё же какой из них предпочтительнее!?
Какой вариант перемещения полей в профиле пользователя будет лучше со стороны производительности?
1. Средствами PHP
Вывод изображения и текстового поля со скрытием основного вывода
<?php echo $profile['поле']; ?> <?php } ?> <?php echo html_image($profile['поле изображения'], 'пресет', true); ?> <?php } ?>
<script type="text/javascript"> $( init ); function init() { // Перемещаем всё дерево и объекты из #id в .class $('.class').append( $('#id') ); } </script>
- Предыдущая
- 1
- 2
- 3
- Показаны 31-41 из 41