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)