" Типы контента — Имя контента — Наборы — Создать набор — Сортировка — Сортировка по полю"
есть список для выбора поля, по которому сортировать.
Как бы в этот список добавить поле последней правки?
В таблицах из "коробки" такое поле есть с названием "date_last_modified".
Лучше сделать хук content_list_filter и в нем отсортировать контент по какому нужно полю.
Это не беда. Сейчас расскажу.Жаль, я не умею делать хуки.
Итак, во-первых решаем, что нам нужно сделать с контентом. В вашем случае нужно просто добавить в модель сортировку по определенному полю.
Смотрим, где в модели компонента контент есть вызов подходящего события. Открываем файл \system\controllers\content\frontend.php и поиском ищем слово hook. Там хуков семь штук. Нас интересуют хуки, которые отправляют на обработку модель компонента. Находим два подходящих:
Теперь создаем пустой файлик content_list_filter.php (или content_posts_list_filter.php, если достаточно сортировки только в одном типе контента) и помещаем его в \system\controllers\content\hooks\.
В файле \system\controllers\content\manifest.php в конец дописываем имя нашего хука:
<?php 'fulltext_search', 'admin_dashboard_chart', 'menu_content', 'user_delete', 'user_tab_info', 'user_tab_show', 'user_privacy_types', 'sitemap_sources', 'rss_feed_list', 'rss_content_controller_form', 'rss_content_controller_after_update', 'frontpage', 'frontpage_types', 'ctype_relation_childs', 'admin_content_dataset_fields_list', 'content_list_filter' ) );
<?php class abcdefg extends cmsAction { public function run($data){ return $data; } }
Возвращаемся на сайт и сразу видим ошибку:
Fatal error: Class 'onContentContentListFilter' not found in D:\OSPanel\domains\DEF821.tes\system\core\controller.php on line 519
Копируем onContentContentListFilter и вставляем имя класса вместо галиматьи abcdefg, что написали в начале (можно было, конечно подумать и написать правильное имя класса сразу, но мне так проще). Получается что-то типа этого:
<?php class onContentContentListFilter extends cmsAction { public function run($data){ return $data; } }
Теперь надо добраться до модели, чтобы её дополнить сортировкой. Разворачиваем входящий архив:
$model->orderBy('i.date_last_modified', 'desc') ; // Добавляем сортировку по дате изменения в обратном порядке
SELECT i.*, u.nickname AS user_nickname, f.title AS folder_title FROM cms_con_posts i FORCE INDEX FOR ORDER BY (date_pub) INNER JOIN cms_users AS u FORCE INDEX (PRIMARY) ON u.id = i.user_id LEFT JOIN cms_content_folders AS f ON f.id = i.folder_id WHERE (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1') ORDER BY i.date_last_modified DESC LIMIT 0, 15
ORDER BY i.date_last_modified desc
Но теперь таким образом будет отсортирован весь контент, а нам это не нужно.
Идем в админку и создаем набор с системным именем например modified.
Теперь в хуке все действия оборачиваем в условие
Вот получившийся файл content_list_filter.php :
<?php class onContentContentListFilter extends cmsAction { public function run($data){ $model->orderBy('i.date_last_modified', 'desc'); // Добавляем сортировку по дате изменения в обратном порядке } return $data; } }
1. Создать набор по дате.
2. Зайти в phpmyadmin в таблицу cms_content_datasets и нажать редактировать нужную вам запись
3. В поле sorting date_pub поменять на date_last_modified и сохранить
Да, в данном случае так намного проще.В поле sorting date_pub поменять на date_last_modified и сохранить
Но мне приходилось сортировать контент по связанным таблицам, а там так просто не выходит.
Попробовал. Работают оба способа.
Хорошо бы, чтоб в выпадающем списке наборов добавилось.
В списке наборов галку "Публикация" поставьте.Хорошо бы, чтоб в выпадающем списке наборов добавилось.
В колонке "Публикация" тут "Типы контента — Имя контента — Наборы" галка стоит и в настройке виджетов Опции — Применить фильтры из набора самодельный пункт в списке есть и его можно выбирать…