TV типа date как оставить только дату без времени

Все привет

Вопрос такой
Создал TV тип дата, визуальный компонент date formatter, Date Format — %d-%m-%Y
Когда нажимаю редактирование даты в ресурсе вылезает календарь для выбора даты и внизу вылезает выбор времени.


Соответственно вопрос —

как сделать так, что бы время не вылезало

либо

как в doclister вывести дату в формате без времени?

Сейчас вызов такой:

[!DocLister?
&parent=`9`
&tvList=`startdate,enddate,sity,country`
&tpl=`@CODE:<tr class='table-data'><td><a href="[+url+]">[+pagetitle+]</a></td>
	<td class="show">[+tv.startdate+]</td>
	<td class="show">[+tv.enddate+]</td>
	<td>[+tv.sity+] [+tv.country+]</td>
</tr>`
&dateSource=`tv.startdate`
&dateFormat=`%d %b %Y`
!]


При этом, доклистер выводит дату в формате 27-04-2019 13:08:00

Спасибо

13 комментариев

avatar
Через prepare конвертните дату в любой удобный формат и делов то )
avatar
я что-то делаю не правильно, но не знаю что (php я не знаю):
prepare:
<?php
$data['tv.startdate'] = new DateTime($data['tv.startdate'])->format('d-m-Y');
$data['tv.enddate'] = new DateTime($data['tv.enddate'])->format('d-m-Y');
return $data;


Поможете?)
avatar
Ну как минимум так напишите для конвертации даты
$data['tv.startdate'] = date('d-m-Y', strtotime($data['tv.startdate']));
avatar
пишу так:
[!DocLister?
&parent=`9`
&prepare=`date`
&tvList=`startdate,enddate,sity,country`
		&tpl=`@CODE:<tr class='table-data'><td><a href="[+url+]">[+pagetitle+]</a></td>
	<td class="show">[+tv.startdate+]</td>
	<td class="show">[+tv.enddate+]</td>
	<td>[+tv.sity+] [+tv.country+]</td>
	</tr>`
&dateSource=`tv.startdate`
&dateFormat=`%d.%b.%y`
!]


снимет date:
<?php
$data['tv.startdate'] = date('d-m-Y', strtotime($data['tv.startdate']));
$data['tv.enddate'] = date('d-m-Y', strtotime($data['tv.enddate']));
return $data;


вообще ничего не выводится
avatar
Не нужно никаких препаре и прочих танцев с бубном.
В параметре dateSource пишете не tv.startdate, а просто startdate, а в чанке вместо
[+tv.startdate+]

пишете
[+date+]

ну, как то так…
avatar
но у меня две даты — дата начала startdate и дата окончания enddate

в параметре dateSource можно ведь только одно поле указать?

плюс без tv. данные не выводятся
avatar
С двумя датами как то сталкиваться не приходилось… а чтобы не путаться с префиксами tv лучше изначально в вызове DL прописать параметр
&tvPrefix=``

и все тв-шки писать без префиксов, как раньше писали в ditto.
Можно так же использовать сниппет для работы с датами dateTime.
avatar
Спасибо за подсказку

Вызов doclister:
[!DocLister?
&parent=`9`
&tvPrefix=``
&tvList=`startdate,enddate,sity,country`
&tpl=`table_tpl`
&dateSource=`startdate`
&dateFormat=`%d.%b.%y`
!]


чанк table_tpl:
<tr class='table-data'><td><a href="[+url+]">[+pagetitle+]</a></td>
<td class="show">
[[if? &is=`[+startdate+]:isempty:` &then=`` &else=`[!dateTime? &date=`[+startdate+]` &format=`d-m-Y`!]` ]]
</td>
<td class="show">
[[if? &is=`[+enddate+]:isempty:` &then=`` &else=`[!dateTime? &date=`[+enddate+]` &format=`d-m-Y`!]` ]]
</td>
<td>[+sity+] [+country+]</td>	
</tr>


пришлось еще проверку if указать на пустую дату, иначе сниппет dateTime выводит сегодняшнюю дату
Комментарий отредактирован 2019-07-02 14:57:53 пользователем gregst
avatar
Проверьте такой препаре — мне проверить негде, но должно работать (все же лучше чем через сниппеты)

<code>$data['startdate_format'] = date('d.m.Y H:i', $data['startdate']);
return $data;</code>
в чанке прописываете
<code>[+startdate_format+]</code>

Аналогично для enddate.
И в вызове DL теперь не надо указывать dateSource и dateFormat.
С проверкой типа такого
<code>if (!empty($data['startdate'])){
$data['startdate_format'] = date('d.m.Y H:i', $data['startdate']);
return $data;
}</code>
Комментарий отредактирован 2019-07-02 15:12:14 пользователем paic
avatar
как только прописываю &prepare=`date` сразу все перестает работать
avatar
Вы препаре назвали date?
Избегайте зарезервированных названий. Назовите препаре для начала как-то по-другому, например test, и вызывайте
&prepare=`test`
avatar
сменил название prepare сниппета, заработало, но неправильно, везде выводится дата 01-01-1970)

рабочий вариант с if меня устраивает, спасибо
avatar
Вы для проверки в препаре вместо startdate впишите createdon, т.е. так
if (!empty($data['createdon'])){
$data['startdate_format'] = date('d.m.Y H:i', $data['createdon']);
return $data;
}

в чанке плейсхолдер — тот же startdate_format и посмотрите, как выведется дата создания документа. Если правильно — значит где-то что-то напутали с ТВ, посмотрите так же в базе данных в каком виде туда записывается — может там ХЗ что.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.