Вход для клиентов и партнеров
в начало сайта
Партнерская программаОнлайн демоСкачатьКарта сайта
 

Регламент
Документация
Часто задаваемые вопросы (FAQ)
Решения типовых вопросов
Форум поддержки
Библиотека разработчика

Посмотрите демо-ролики и убедитесь в том, что "Twilight CMS" очень удобна в управлении, понятна и проста.

Бесплатно скачайте "Twilight.Basic", установите на своем компьютере и изучите систему более детально.

Если вам нужно установить "Twilight CMS" на существующий сайт или разработать новый - обращайтесь в отдел интеграции.

 

Ваше имя
Ваш Email
Вопрос
Twilight.basic
  • Узнайте больше
  • Сравните версии
  • Twilight.selection
  • Узнайте больше
  • Сравните версии
  • Twilight.evolution
  • Узнайте больше
  • Сравните версии
  •  
    Главная // Библиотека разработчика // Справочники // Книга рецептов (Cookbook) // Нестандартные решения разных задач //

    Сортировка постов в блоге по числу комментариев


    Задача: есть справочник (новости, посты в блоге и т.п.) с именем posts к которому есть подчиненный справочник содержащий комменты с именем comments. Хочется отсортировать посты по числу комментариев, которые к нему относятся. Предположим, что идентификатор родительской записи в таблице comments хранится в поле parentid.

    Прямого решения данная задача не имеет, поскольку система не может принять в макрос $News[]$ в качестве значения для ключа sort ничего кроме названия поля, которое должно быть в таблице с постами. Количество комментариев у нас нигде не хранится.

    Решение: создадим это поле, назовем его nofc (number of comments) динамически. Примем что в форме у нас было поле $IN_postid$, которое содержало идентификатор поста в таблице posts. Добавим на страницу с результатом добавления записи в таблицу с комментами макрос $RegistrationConfirm[]$, который умеет обновлять поля в таблицах:

    $RegistrationConfirm [source: posts; filter:id=$IN_postid$; action: update; set_fields_values: nofc=$RecordCount[source: comments; filter: parentid=$IN_postid$]$]$

    Такая конструкция просто запишет в таблицу posts в поле nofc количество записей в таблице comments, которые в поле parentid имеют идентификатор поста, к которому в данный момент добавлен коммент. Теперь можно при выводе сортировать посты по полю nofc.

    Минусом такого решения является то, что обновление данного поля будет происходить только при добавлении записи, а при удалении её через админзону останется старое значение. Выхода три - просто подождать пока к данному посту не добавят еще один комментарий и счетчик скорректируется, либо после удаления записи вручную перейти на страницу, которая обычно показывается пользователям после добавления записи (не очень удобно, т.к. нужно будет в URL указать идентификатор поста), либо скорректировать количество записей в поле nofc через админзону вручную. Для этого не забудьте добавить поле nofc в описание entity.

    Из плюсов - нет никаких вложенных запросов и подзапросов, как это неминуемо было бы сделано в реляционной СУБД для определения количества записей "на лету" (берем базы без использования триггеров, так сможет каждый, только не на любой базе). То есть работать будет быстро. В условиях где удаляемых комментов немного по отношению к общему числу данное решение вполне приемлемо.


    « к списку

    версия для печати

     
    © 2003-19 Страта Технологии (создание сайтов, разработка cms), Twilight CMS in english.
    Наш адрес: Москва, пр. Маршала Жукова д.51
    Тел.: (495) 222-6436, E-mail: , карта сайта, условия использования информации о CMS
    Звоните через Skype:  

    Реклама: