Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][CSS] <link> czy include?
Forum PHP.pl > Forum > Przedszkole
Rudi1204
Tak jakoś mnie naszło i zacząłem się zastanawiać jaka forma jest wygodniejsza na dodawanie arkuszy stylów do strony:
Kod
<link rel="stylesheet" href="/adres do arkusza/style.css" type="text/css" />

czy może lepiej jest użyć funkcji include()
Kod
<style type="text/css">
<?php include '/adres do arkusza/style.css'; ?>
</style>

Tak jak sprawdzałem zaletą drugiego rozwiązania jest to iż jeśli mamy zdefiniowaną np stałą ścieżkę do katalogu z arkuszami to podczas przeniesienia lub zmiany układu folderów w naszej stronie wystarczy zmienić tylko jedną zmienną (np css_path), a poza tym jeśli używamy background-image nei trzeba robić np "../../" bo można skorzystać ze zmiennej image_path.

Co o tym śądzicie? Jakie jest Wasze zdanie na temat?
wookieb
1) Oszczędza serwer, co jest raczej ważniejsze niż wygoda "dopisania" ../ itp
Rudi1204
Cytat(wookieb @ 24.01.2011, 09:31:01 ) *
1) Oszczędza serwer, co jest raczej ważniejsze niż wygoda "dopisania" ../ itp

No a jeśli by użyć do tego jeszcze cache?
wookieb
Chodzi o transfer.
cojack
Dobrym rozwiązaniem jest robienie combo, tzn ładujesz parę cssów do jednego pliku, jsów do drugiego pliku i masz to wszystko w 2 plikach, dzięki temu zmniejsza się ilość requestów do serwera. W dobie szybkiego internetu, lepiej przeglądarce zrobić 2 requesty plików o większej pojemności niż 30 małych. Szybciej Ci się strona będzie generować, przeglądarka też posiada swój cache i na pewno te dwa pliki zachehuje po pierwszej wizycie.
Rudi1204
tak szczerze to bardziej mi chodzi o "wygodnictwo" niż transfer, często gesto widzę w stylach wielu stron jak odnośniki do plików graficznych wyglądają (../../../), aż kręci się w głowie, a przecież im głębiej szablon będzie tym więcej "../" dlatego też pomyślałem o include, gdyż zawsze miał bym dzięki temu
1. łatwiejszy kod do odczytania w podglądzie (jak co) oraz
2. daję jedną zmienną określającą img_path i wsio o nic się nie martwię i nie muszę się bawić w wyliczankę (typu "../" dwa czy trzy razy?)
3. nie ma znaczenia czy pracuję na serwerze lokalnym wirtualnym czy jakim, zmieniam tylko jeden wpis i wsio chodzi

chyba bardziej mnie interesuje czy takie rozwiązanie
1. ma sens?
2. jest estetyczne?
wookieb
Cytat(Rudi1204 @ 24.01.2011, 10:02:30 ) *
1. łatwiejszy kod do odczytania w podglądzie (jak co) oraz

Mówisz tak jakbysmy żyli w czasach win95 gdzie "pokaż źródło" jest jedyna metodą na zobaczenie "styli". Dzis jest firefox, firebug, jsview.

Cytat
2. daję jedną zmienną określającą img_path i wsio o nic się nie martwię i nie muszę się bawić w wyliczankę (typu "../" dwa czy trzy razy?)

To już nie lepiej RAZ wygenerować taki plik za pomocą twojego skryptu i linkować normalnie? Będzie łączyło przyjemne z pożytecznym

Twoje rozwiązanie ma sens tylko dla stron dla telefonów komórkowych. Inaczej nie.
Rudi1204
Cytat(wookieb @ 24.01.2011, 10:07:52 ) *
To już nie lepiej RAZ wygenerować taki plik za pomocą twojego skryptu i linkować normalnie? Będzie łączyło przyjemne z pożytecznym

Mógłbyś bardziej rozwinąć tą myśl??

EDIT:
generalnie chodzi mi chyba najbardziej o możliwość zarządzania path_img (uniknięcia tych "../")
wookieb
No po prostu
  1.  
  2. // tutaj generujesz sobie styl
  3. $content = ob_get_clean();
  4. file_put_contents('twoj_styl.css', $content);

W html tworzysz normalny <link> do tego pliku.
Rudi1204
No ok sposób ciekawy jak chodzi o połączenie styli z kilku plików w jeden. Rozumiem, że jakoś trzeba to wywołać tylko raz bo inaczej przecież nie ma sensu jak by patrzeć na wydajność serwera (chyba, że się mylę), ale nadal pozostaje problem z "../" idzie się jakoś pozbyć tego zapisu czy trzeba przywyknąć do tego?

EDIT:
Właśnie sobie tak na roboczo poprostu przed ob_start() dodałem zmienną path i śmiga ładnie tylko ciągle mnie nurtuje fakt, gdzie to wrzucić by za każdym razem nie generować pliku stylów?

Dobra zrobiłem sobie to na podstawie takiego helperka:
Kod
class Links_Style {
    
    public static function display($style_include, $style_out = 'style.css') {
        $style_parts = explode(':', $style_include);

        ob_start();

        foreach ($style_parts as $style_file) {
            include DIR_TEMPLATES . 'default/css/' . $style_file;
            echo "\n";
        }

        //include DIR_TEMPLATES . 'default/css/reset.css';
        //include DIR_TEMPLATES . 'default/css/template.css';

        $content = ob_get_clean();

        file_put_contents(DIR_TEMPLATES . 'default/css/'.$style_out, $content);

        $path =  URL . DS . 'templates/default/css/'.$style_out;
        echo $path;

    } // end display();
}

GDZIE:
$style_include = nazwy arkuszy stylów rozdzielone dwukropkiem (np: styl1.css:styl2.css),
$style_out = nazwa pliku wyjściowego

ogólnie całość zwraca link do pliku css a wywołuję to tak:
Kod
<link rel="stylesheet" href="<?php Links_Style::links_style('reset.css:template.css');?>" type="text/css" />


No i includuje wszystko cacy, ale tongue.gif... jak to ma się do wspomnianej wyżej wydajności? Skrypt przecież jest wywoływany za każdym razem jak otwieram każdą stronę/podstronę.
wookieb
Zrób sobie katalog np "tools" i tam wrzucaj skrypty, które ty będziesz odpalać z łapy (linia komend, z przeglądarki). Jednym z tym skryptów będzie właśnie wygenerowanie twojego pliku styli.
I nie robisz dziwnych "linków" z uzyciem php tylko juz odwołujesz się do statycznych plików wygenerowanych przez te skrypty.
Przykład
CLI
Kod
php tools/generuj_styl.php

albo przeglądarka
Kod
http://twoja_strona/tools/generuJ_styl.php


  1. <link rel="stylesheet" href="sciezka_do_wygenerowanego_pliku.css" />
Rudi1204
rozumiem smile.gif dziękuję i pozdrawiam smile.gif
#luq
Proponuje zainteresować się frameworkiem do CSS-a o nazwie Scaffold
Minxiny, zmienne, combinowanie plików, wywalenie białych znaków z wygenerowanego pliku i wrzucenie go do cache...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.