Routování + adresy v *.css souborech
- Laethnes
- Člen | 53
Mám nový problém: dostal jsem za úkol udělat vzhled stránek tak, že na hodně místech potřebuju v *.css stylu odkazy na obrázky. Jenomže zároveň routuji a to v základu klasika <presenter>/<action> apod. To ovšem znemožňuje v *.css správně odkazovat, protože délka adresy (myslím tím vnoření „adresářů“) se mění (když tam mám třeba default pohled, pak se celá sekce vynechá). V šablonách snadno odkazuji pomocí v {$baseUri}, ale jak v css?
Napadá mě několik řešení, ale ani jedno se mě nelíbí:
- napsat css styly rovnou do stránky (minus: zbytečně se načítá pro každou stránku)
- mít css styl s předem vytvořenými absolutními adresami (minus: web mám u sebe na PC a na serveru a pravděpodobně bude ještě na dalším serveru: tj. 2–3 absolutní adresy vzhledem k tomu, že se document root nachází v různých adresářích, takže bych musel udržovat 3 různé css soubory)
- mít css styl uložený jako další presenter, který místo html stránky vrací styl s překódovanými adresami
Jak se tohle normálně řeší?
Editoval Laethnes (28. 10. 2009 12:36)
- Ondřej Mirtes
- Člen | 1536
Popisoval jsem to v tomto threadu:
LastHunter napsal(a):
K cestám obrázků a CSS souborů: adresa začínající
/
je absolutní, adresa bez/
je relativní. A musíš to správně nalinkovat jen v HTML, pak v CSSku už stačí mít cesty k obrázkům relativně od daného CSS souboru, tam už adresu, kde projekt běží, řešit vůbec nemusíš.(V době krásných URL je potřeba používat jen ty absolutní cesty, to je snad jasné :))
A k uvedení správné cesty pro CSS a obrázky v HTML slouží v Nette proměnná
{$baseUri}
(a pár revizí nazpět byla přidána i{$basePath}
, která nemá tuším konečné lomítko), takže sám nic generovat nemusíš. Pokud je projekt v rootu, bude ta proměnná obsahovat/
, pokud je v nějaké podsložce, obsahuje/podslozka/
. Zápis v HTML pak vypadá takto:<img src="{$baseUri}images/image.jpg" .... />
Takže stačí, pokud v HTML bude tvoje cesta k CSS souboru začínat „/“ (a povede od document_rootu) a v CSS už žádné změny provádět nemusíš.
Editoval LastHunter (28. 10. 2009 13:09)
- Laethnes
- Člen | 53
LastHunter napsal(a):
Popisoval jsem to v tomto threadu:
LastHunter napsal(a):
K cestám obrázků a CSS souborů: adresa začínající
/
je absolutní, adresa bez/
je relativní. A musíš to správně nalinkovat jen v HTML, pak v CSSku už stačí mít cesty k obrázkům relativně od daného CSS souboru, tam už adresu, kde projekt běží, řešit vůbec nemusíš.(V době krásných URL je potřeba používat jen ty absolutní cesty, to je snad jasné :))
A k uvedení správné cesty pro CSS a obrázky v HTML slouží v Nette proměnná
{$baseUri}
(a pár revizí nazpět byla přidána i{$basePath}
, která nemá tuším konečné lomítko), takže sám nic generovat nemusíš. Pokud je projekt v rootu, bude ta proměnná obsahovat/
, pokud je v nějaké podsložce, obsahuje/podslozka/
. Zápis v HTML pak vypadá takto:<img src="{$baseUri}images/image.jpg" .... />
Takže stačí, pokud v HTML bude tvoje cesta k CSS souboru začínat „/“ (a povede od document_rootu) a v CSS už žádné změny provádět nemusíš.
Jur4 napsal(a):
Pokud se dobře pamatuju, tak adresy v CSS se berou relativně vzhledem k adrese css souboru. Takže to co je v adrese prohlížeče tě nezajímá, protože to CSSko ma pořád stejnou adresu.
No, to o tom, že adresa začínající na /
je absolutní vím
a znám i to používání baseUri (vlastně jinak, než bez baseUri na soubory
neodkazuju – stejně by mě to nefungovalo) a díky tomu vůbec neřeší zda
jsem na ic.cz nebo na localhostu. Takže adresu k CSS souboru neřeším –
tu tam mám a funguje. S čím jsem měl problém bylo jen a pouze odkazování
v samotném CSS souboru.
Nicméně, jak oba píšete, adresy v CSS souborech jsou relativní vzhledem k poloze CSS souboru a ne stránky – což jsem netušil – a to je taky řešení mého problému. Takže oběma moc díky, tohle mě už funguje přesně, jak potřebuju. Fakt dík ;)
- Laethnes
- Člen | 53
Hm. Funguje to ve FF i IE, takže je to spíš jen taková rýpavá poznámka: píšeš
… A musíš to správně nalinkovat jen v HTML, pak v CSSku už stačí mít cesty k obrázkům relativně od daného CSS souboru, tam už adresu, kde projekt běží, řešit vůbec nemusíš.
(V době krásných URL je potřeba používat jen ty absolutní cesty, to je snad jasné :)) …
Ale právě v CSS to jinak, než relativně nejde ne? Nebo to chápu špatně, co píšeš? Na jednu stranu kvůli tomu, že mám projekt v různých adresářových strukturách a kvůli routování (tedy doba krásných URL) nemůžu v CSS souboru odkazovat jinak, než relativně, ale ty píšeš, že právě kvůli tomuto – routování – se musí používat absolutní cesty? Nebo to chápu blbě? (To, že v HTML musím odkazovat jedině absolutně vím a jinak to nedělám.)
- _Martin_
- Generous Backer | 679
Laethnes napsal(a):
Ale právě v CSS to jinak, než relativně nejde ne? Nebo to chápu špatně, co píšeš? Na jednu stranu kvůli tomu, že mám projekt v různých adresářových strukturách a kvůli routování (tedy doba krásných URL) nemůžu v CSS souboru odkazovat jinak, než relativně, ale ty píšeš, že právě kvůli tomuto – routování – se musí používat absolutní cesty? Nebo to chápu blbě? (To, že v HTML musím odkazovat jedině absolutně vím a jinak to nedělám.)
Neřeš to ;)
- Ondřej Mirtes
- Člen | 1536
Ano, v HTML se na soubory odkazuješ vždy absolutně, v CSS vždy relativně :)
- Laethnes
- Člen | 53
Honza M. napsal(a):
WebLoader ti pomůže, obzvláště tato fičura
Vypadá to rozhodně zajímavě, díky. Zatím mě postačí to relativní adresování od místa, kde je soubor *.css, ale tohle rozhodně vypadá zajímavě co do jiných věcí, co jsem chtěl řešit. Dík :)
- tom
- Člen | 171
LastHunter napsal(a):
<img src="{$baseUri}images/image.jpg" .... />
Pokud mam v databazi text
<p><img src="{$baseUri}images/obrazek.jpg" /></p>
a chci ho zobrazit, tak je potreba ho po nacteni necim prohnat abych se zbavil toho {$baseUri}? Anebo jak zaridit aby to zafungovalo a misto {$baseUri} se vypsala ta adresa?
- tom
- Člen | 171
redhead napsal(a):
A proč proboha neukládáš jen tu adresu za {$baseUri} ???
V šabloně pak stačí za {$baseUri} vložit řetězec z db.
Ono v te databazi je to v ramci textu a ne jako samostatny zaznam … Pro ilustraci, jedna se o tabulku aktualit a v textech tech aktaulit jsou ty tagy pro obrazky … puvodne to tam bylo takto
<img src="images/image.jpg" .... />
a chtel jsem vyuzit {$baseUri} abych se vzdy odkazoval spravne …
Editoval tom (30. 10. 2009 16:12)
- Ondřej Mirtes
- Člen | 1536
Nebo když už píšeš texty pro jeden web, tak víš, v jaké složce obrázky jsou, tak to dát napevno i do textů.
Anebo použít Texy, kde se cesty k obrázkům nastavují na jednom místě :)