Я не кодер, но по моему, послеэто то что я вписываю — неработает
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 39
Я вообще не понял, что Вы пытаетесь сделать.Ребят, подскажите решение, вот очень нужно оно.
По мне, так нужно получить массив с номерами единиц контента, которые требуют переназначения категории, а потом перебрать этот массив и в процессе изменить категорию.
Я вообще не понял, что Вы пытаетесь сделать.Ребят, подскажите решение, вот очень нужно оно.
По мне, так нужно получить массив с номерами единиц контента, которые требуют переназначения категории, а потом перебрать этот массив и в процессе изменить категорию.
Да всё так, но вот ошибку отдаёт после выполнения cron.
Подсказали бы с удовольствием, но мало входящих данных.Ребят, что никто не подскажет
Не надо ничего прописывать. Создайте файл например cron_archive.php в папке \system\controllers\content\hooks\.что куда прописать
После этого создайте задание планировщика в админке.
В самом файле напишите то, о чем я говорил ранее.
<?php class onContentCronArchive extends cmsAction { public function run(){ /* Получаем нужные статьи для архивирования */ $items = $this->model->условия_по_которым_определяются_единицы контента_для_архивирования->get('нужная_таблица'); /* Перебираем массив и отправляем нужные статьи в архивную категорию */ foreach ($items as $item){ } } }
Не надо ничего прописывать. Создайте файл например 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']; }); }
Прописал в model.php
public function CategoriesExpiredContentItems($ctype_name){ $items = $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix . $ctype_name, function($item, $model) use($ctype_name){ $table_name = $this->table_prefix . $ctype_name; $binds_table_name = $this->table_prefix . $ctype_name . '_cats_bind'; }); cmsCache::getInstance()->clean('content.list.'.$ctype_name); cmsCache::getInstance()->clean('content.item.'.$ctype_name); return true; }
Есть еще таблица cms_con_ваштипконтента_cats_bind.В БД ID категории поменялся
Я это вроде бы учёл вот тут
Есть еще таблица cms_con_ваштипконтента_cats_bind.В БД ID категории поменялся
$binds_table_name = $this->table_prefix . $ctype_name . '_cats_bind';
А где апдейт этого table_prefix. $ctype_name. '_cats_bind' ?Я это вроде бы учёл вот тут
Причем апдейт там не прокатит. Там нет уникального столбца. Надо отсоединить единицу типа контента от старой категории и присоединить к новой.
То есть delete — insert.
Можно кодом подсказать!? А то я так ещё до 2021 протуплю
А где апдейт этого table_prefix. $ctype_name. '_cats_bind' ?Я это вроде бы учёл вот тут
Причем апдейт там не прокатит. Там нет уникального столбца. Надо отсоединить единицу типа контента от старой категории и присоединить к новой.
То есть delete — insert.
public function CategoriesExpiredContentItems($ctype_name){ $items = $this-> filterNotNull('date_pub_end')-> filter('i.date_pub_end <= NOW()')-> get($this->table_prefix . $ctype_name, function($item, $model) use($ctype_name){ $table_name = $this->table_prefix . $ctype_name; $binds_table_name = $this->table_prefix . $ctype_name . '_cats_bind'; $model->updateContentItemCategories($ctype_name, $item['id'], $item['category_id'], $add_cats); return $item['id']; }); cmsCache::getInstance()->clean('content.list.'.$ctype_name); cmsCache::getInstance()->clean('content.item.'.$ctype_name); return true; }
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 39