Lokalizovaný dátum v cakePHP - 2. časť
V minulom článku som písal o lokalizovanom dátume. Dnes si ukážeme, ako môžeme zobrazovať lokalizovaný dátum veľmi zaujímavým slovným popisom.
Tento článok je pokračovaním článku Lokalizovaný dátum v cakePHP a preto je nevyhnutné si uvedený článok prečítať.
Cieľom tohto článku je ukázať, ako môžeme zobrazovať dátumy slovným spôsobom tak, ako to môžeme vidieť na tomto blogu.
1. krok – metóda pre zobrazenie dátumu
Do našej vytvorenej triedy DateHelper si pridáme nasledujúcu metódu
function timeAgoInWords($datetime_string, $format = DATE_FORMAT, $backwards = false)
{
$datetime = $this->fromString($datetime_string);
$in_seconds = $datetime;
if ($backwards) {
$diff = $in_seconds - time();
} else {
$diff = time() - $in_seconds;
}
$months = floor($diff / 2419200);
$diff -= $months * 2419200;
$weeks = floor($diff / 604800);
$diff -= $weeks * 604800;
$days = floor($diff / 86400);
$diff -= $days * 86400;
$hours = floor($diff / 3600);
$diff -= $hours * 3600;
$minutes = floor($diff / 60);
$diff -= $minutes * 60;
$seconds = $diff;
if ($months > 0) {
// over a month old, just show date (mm/dd/yyyy format)
$relative_date = date($format, $in_seconds);
$old = true;
} else {
$relative_date = '';
$old = false;
if ($weeks > 0) {
// weeks and days
$relative_date .= ($relative_date ? ', ' : '') . $weeks . ' ' . ($weeks > 1 ? __('DATE_WEEKS',true) : __('DATE_WEEK',true));
$relative_date .= $days > 0 ? ($relative_date ? ' '.__('DATE_SEPARATOR',true).' ' : '') . $days . ' ' . ($days > 1 ? __('DATE_DAYS',true) : __('DATE_DAY',true)) : '';
} elseif ($days > 0) {
// days and hours
$relative_date .= ($relative_date ? ', ' : '') . $days . ' ' . ($days > 1 ? __('DATE_DAYS',true) : __('DATE_DAY',true));
$relative_date .= $hours > 0 ? ($relative_date ? ' '.__('DATE_SEPARATOR',true).' ' : '') . $hours . ' ' . ($hours > 1 ? __('DATE_HOURS',true) : __('DATE_HOUR',true)) : '';
} elseif ($hours > 0) {
// hours and minutes
$relative_date .= ($relative_date ? ', ' : '') . $hours . ' ' . ($hours > 1 ? __('DATE_HOURS',true) : __('DATE_HOUR',true));
$relative_date .= $minutes > 0 ? ($relative_date ? ' '.__('DATE_SEPARATOR',true).' ' : '') . $minutes . ' ' . ($minutes > 1 ? __('DATE_MINUTES',true) : __('DATE_MINUTE',true)) : '';
} elseif ($minutes > 0) {
// minutes only
$relative_date .= ($relative_date ? ', ' : '') . $minutes . ' ' . ($minutes > 1 ? __('DATE_MINUTES',true) : __('DATE_MINUTE',true));
} else {
// seconds only
$relative_date .= ($relative_date ? ', ' : '') . $seconds . ' ' . ($seconds != 1 ? __('DATE_SECOND',true) : __('DATE_SECONDS',true));
}
}
$ret = $relative_date;
// show relative date and add proper verbiage
if (!$backwards && !$old) {
$ret = __('DATE_AGO',true) . ' ' . $ret;
}
return $this->output($ret);
}
2. krok – lokalizovaný popis dátumu
Ďalším krokom je umiestniť preklady popisov dátumu do nášho jazykového súboru app/locale/tvoj_jazyk/LC_MESSAGES/default.po
msgid "DATE_TODAY"
msgstr "dnes"
msgid "DATE_YESTERDAY"
msgstr "včera"
msgid "DATE_WEEKS"
msgstr "týždňami"
msgid "DATE_WEEK"
msgstr "týždňom"
msgid "DATE_SEPARATOR"
msgstr "a"
msgid "DATE_DAYS"
msgstr "dňami"
msgid "DATE_DAY"
msgstr "dňom"
msgid "DATE_HOURS"
msgstr "hodinami"
msgid "DATE_HOUR"
msgstr "hodinou"
msgid "DATE_MINUTES"
msgstr "minútami"
msgid "DATE_MINUTE"
msgstr "minútou"
msgid "DATE_SECOND"
msgstr "sekundov"
msgid "DATE_SECONDS"
msgstr "sekundami"
msgid "DATE_AGO"
msgstr "pred"
3. krok – zobrazujeme lokalizovaný dátum
Posledný krok, aby sme mohli náš lokalizovaný dátum zobraziť je umiestniť nasledujúci kód do controlleru, ktorý bude používať náš helper. Pre náš príklad si to môžeme vložiť do súboru app/controllers/articles_controllers.php
var $helpers = array("Date");
Následne môžeme v našich view súboroch zobrazovať dátum napríklad takýmto spôsobom
echo $date -> timeAgoInWords($article["create"]);
Dúfam, že vám bol tento mini seriál aspoň trochu užitočný a dúfam, že sa v budúcnosti dočkáme natívnej podpory lokalizovaného dátumu priamo v CakePHP.
Rád uvítam vaše námety a pripomienky v diskusii k článku.
Súvisiace články
-
Kategórie
- Tipy a triky (28)
- Články (8)
- Fantom CMS (4)
- Zábava (2)
- Začíname s CakePHP (6)
-
Najčítanejšie články
-
Novinky
-
Seriál o CakePHP na www.debug.sk
15. 10. 2008
Od 7. októbra vychádza nový seriál o CakePHP na serveri zameranom na programovanie s názvom Debug.sk Autorom seriálu je autor tohto webu a kto by mal záujem, môžete daný seriál podporiť jeho prečítaním.
-
-
Nálepky
-
Nedávne komentáre
-
Rss kanály

Komentáre k článku
Nový komentár
Titulok: Preddefinovane konstanty a plural forms
Autor: Jitka aka poLK
Vytvorený: 18. 10. 2007 08:57
Jak uz jsem napsala, TimeHelper bude do vydani 1.2 stable prepracovan. Vase ukazka z nej vychazi (tudiz kopiruje vsechny jeho slabiny), takze dnes jen pro informaci: