Temat: Dynamicznie generowany CSS w kejku

Mam nadzieje, ze taka oczywista oczywistosc pomoze komus zaoszczedzic troche czasu.
Na przykladzie kontrolera PagesController, zalozmy ze tworzymy strone z profilami graczy - kazdy profil bedzie sie nieco roznic, a roznice np jak obrazek w "topi`e", czy kolor czcionki mozna zdefiniowac w panelu admina i zapisac do bazy... W kazdym badz razie nie chcemy tego zapisywac jako osobnych plikow w katalogu webroot/css, nie chcemy tez przekazywac zadnych parametrow do includowanego pliku get'em ( ze wzgledu na ograniczona ilosc znakow jakie mozna przeslac  przez get w poszczegolnych przegladarkach)


w kontrolerze definiujemy metode css :

public function css() {
         /**
          * Upewniamy sie ze informace wyswietlane przez debug nie rozwala nam szablonu css. Akurwat tego kawalka nie mialem  czasu
          * optymalizowac, przemyslec , wybralem pierwsze dzialajace rozwiazanie (w tej chwili)
          */
         Configure::write('debug',0);

         /**
          * Data ostatniej aktualizcji jednego z elementow szablonu (select modified ..... order by modified DESC limit 1) 
          * Potrzebna do ustawienia parametrow cache przegladarki  dla pliku css 
          */
         $templateModified;

         /**
          * Wygenerowany wczesniej kod css, z zamienionymi wartosciami domyslnymi na te zczytane w bazie, najelpiej wygenerowac w modelu.
          */
          $generatedCss;

         /**
          * Wysylamy naglowki do przegladarki, jedyny wymagany to ten drugi (Content-Type)
          */
     e(header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'));
         e(header("Content-Type: text/css"));
         e(header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT"));
     e(header("Cache-Control: cache")); // HTTP/1.1
     e(header("Pragma: cache"));        // HTTP/1.0

         /* Ewentualnie mozna jeszcze "skompresowac" wygenerowany kod css */
         /* http://www.catswhocode.com/blog/3-ways-to-compress-css-files-using-php */
         /* remove comments */
         $generatedCss = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $generatedCss);
         /* remove tabs, spaces, newlines, etc. */
         $generatedCss = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $generatedCss);

         die(e($generatedCss));


}

linkujemy to to w ten sposob
<link rel="stylesheet" href="/pages/css" type="text/css" media="all" />

Ostatnio edytowany przez robal77 (2009-04-09 10:50:00)