1

Temat: Zmienna globalna dla controllera

Witam,

Chciałbym ustawić globalnie zmienną "$posted" w controllerze(i wyświetlić ją w widoku), tak, aby w zależności od tego, czy post został napisany, dziś, wczoraj, czy też 5 dni temu wyświetlał się odpowiedni tekst.

Zrobiłem coś takiego:

    $today = date('Y-m-d');
    $d = date('d')-1;
    $yesterday = date('Y-m-'.$d.'');
    $hour =  substr($advertisment['Advertisment']['date_posted'], 11, 5);
    $posted = substr($advertisment['Advertisment']['date_posted'], 0, 10);
<?php if($posted == $today) { echo 'Dzisiaj o '.$hour.''; } elseif($posted == $yesterday) { echo 'Wczoraj o '.$hour.''; } else { echo substr($advertisment['Advertisment']['date_posted'], 0, 16); } ?>

Jak zapisać to wszystko jako funkcję w controllerze i wyświetlać tylko jedną zmienną?

Czy funkcja ma być w beforefilter? Przy każdym warunku dać return i na końcu set zmienna, $zmienna?
Jeżeli tak to prosiłbym o przykładową funkcję bo coś mi nie wychodzi.

Pozdrawiam.

2

Odp: Zmienna globalna dla controllera

Wiec tak "posted" zapisuj sobie w formie timestamp'u unixowego - latwiej sie nim  manipuluje, sortuje po dacie itp, + masz pewnosc ze data bedzie zapisana zawsze w tej samej formie a nie 2010-01-01 lub 01-01-2010.


Poczytaj o poloach created, modifed w kejku - byc moze zastapia one Twoje posted. (jak jestes leniwy to dodaj do tabeli oba pola - tym int (10) najpierw z poziomu kejka dodaj rekord do bazy, potem go zmodyfikuj, i sprawdz co zawieraja ; )

Obliczenia wygladaja wtedy tak : floor((time()-$data["posted"])/86400)   - 86400 to ilosc sekund w dniu   : 60 * 60 * 24.

Te obliczenia zrobilbym w modelu w callbacku afterFind :


class MojModel extends AppModel
{
...
function afterFind($results) 
{
    foreach ($results as $key => $val) 
       {
        if (!empty($val[MojModel']['posted'])) 
                {
                        $val[MojModel']['posted'] =   floor((time()-$val[MojModel']['posted'])/86400)
        }
    }
    return $results;
}




...


}

Po kazdym zapytaniu  model sam przeliczy wartosc posted i  o ile wyslesz wynik zapytania do vidoku, to bedziesz miec tam juz przeliczona wartosc w dniach.

http://book.cakephp.org/view/76/Callback-Methods

3

Odp: Zmienna globalna dla controllera

Dziękuję, bardzo fajne rozwiązanie.

Pozdrawiam.

Ostatnio edytowany przez JaRo (2010-07-29 21:02:19)