Quote from: annet_1409 at Jun 08, 2007, 08:08 AM
Объясню подробнее, что мне нужно. На сайте публикуются мероприятия, у каждого из которых есть "дата начала" (ТВ тип ДАТА + виджет для человеческого отображения), вводимая юзерами. Список мероприятий формируется с помощью ДИТТО. Мне нужно, чтобы сортировка в этом списке была по "дате начала" - &sortBy=`tvEVENT_DATE_START`. Так вот почемуто дитто воспринимает эту самую дату как простой текст и сортирует соответствующим образом. А мне надо чтоб сортировал как по дате. Единственное, что мне пришло в голову - сделать еще одну ТВ, которая по умолчанию равна EVENT_DATE_START, но без виджета, и сортировать по ней. Воможно, есть более легкий способ?
Спасибо.
Сам вплотную столкнулся с этой проблемой и пришлось ковырять. Способ со копированием значения TV как предложил выше, отбросил сразу, как неизящный.
Самый очевидный вариант - поковырял 2 файла ядра, в результате после сохранения TV с типом даты, вместо строки в базу сохранялся юникс таймштамп. При редактировании документа этот таймштамп опять преобразовывался в человекопонятное представление даты. Способ простой и хороший, но ковыряние ядра не есть гуд - оптимально реализовать это в виде плагина и привязать подобные замены на системные события сохранения и редактирования документа. Моих знаний на это не хватило, бросил.
Второй вариант - изящный. Создем TV с типом дата, выбираем виджет - unixtime. Ну и почти все - в базе параметр по прежнему хранится в виде строки, но все сниппеты запрашивают значение сниппета не напрямую, а через функции движка, которые в конечном счете отдают уже обработанное значение, т.е. в виде unixtimestamp.
Я все это проводил на дитто - дитто вполне устраивает этот TV, его можно использовать и для сортировки (только не указывайте префикс tv, если реальное имя параметра EVENT_DATE_START - &sortBy=`EVENT_DATE_START`. Если указать этот TV как источник для плейсхолдера [+date+] через &datesource то дитто сам отформатирует таймштамп в человекопонятную дату.
В ином случае можно использовать плагин PHx [+EVENT_DATE_START:date=`%d.%m.%Y`+]