W Drupal6, format_date()
ma daty i godziny na stałe. Ponadto, format_date()
nie zezwala na oddzwanianie, ale zezwala na niestandardowy ciąg znaków. Tam można zastosować sztuczkę: zamiast kodowania ciągiem tam, wywołujesz funkcję, która zwraca ciąg znaków.
function mydate_format($timestamp) {
$now = time();
if (($now - $timestamp) < (60*60*24)) {
return "H:i";
}
else {
return "d:m:Y";
}
}
print format_date($timestamp, 'custom', mydate_format($timestamp));
Drugą opcją jest ponowne zdefiniowanie datownika, ale jest to jednocześnie hack i ograniczone. Formaty daty są definiowane za pomocą zmiennej zmienna_get(), ale nie przechodzą znacznika czasu wzdłuż; więc Twój przykład przełączania formatów na podstawie wartości znacznika czasu nie jest możliwy w ten sposób.
W settings.php:
$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';
Spowoduje to przejście z jednej wartości do drugiej, na podstawie tego, czy settings.php ma flagę "debug" ustawiony na TRUE, czy nie. Jak już wspomniano: użycie tego jest ograniczone, ponieważ nie można uzyskać żadnego kontekstu.
Trzecią opcją jest użycie Date API, która oferuje konfigurowalne formaty czasu w onlinle. Ale jest to zarówno niezgrabne, jak i niezabezpieczone (wprowadzanie wykonywalnego PHP w bazie danych). Zależy to również od bardzo dużego zestawu modułów. I ma tę wadę, co pierwsze rozwiązanie: nie można używać formatu data_date, ale musi użyć zmodyfikowanego wywołania funkcji, zamiast format_date()
. Zobacz wszystkie opcje na The Drupal.org date themeing handbook.
GOTCHA We wszystkich przypadkach Drupal nie wywoła tej funkcji dla treści z pamięci podręcznej. Jeśli chcesz, aby daty były naprawdę dynamiczne, musisz albo całkowicie pominąć buforowanie, albo zaimplementować formatowanie daty w javascriptie klienta.
TL; DR: Nie można mieć dynamicznych formatów daty bez zmiany niektórych kodu na poziomie kompozycji. Użycie funkcji wywołania zwrotnego w celu wygenerowania "niestandardowego" formatu daty jest najprostszym, działającym rozwiązaniem.
Jeśli pokazujemy tę datę jako pole w widoku, a następnie można użyć szablonu pola plik rzutem do obsługi logiki PHP potrzebne, aby otrzymać Żądana wydajność: Po drugiej stronie, jeśli nie jest to pole daty w widoku i po prostu używasz utworzonego czasu dla węzła, możesz użyć pliku szablonu węzła do sformatowania daty: Jestem nie znając żadnych funkcji wywołania zwrotnego, które mogą być używane w formatach daty, jest to ciekawy pomysł i zdecydowanie widzę niektóre aplikacje na to. –
Tak, wiem, że mógłbym to zrobić na poziomie szablonu/preprocesu, ale byłby to dużo czystych er gdybyś mógł stworzyć prawdziwy globalny niestandardowy format daty ... –