Autor Zpráva
mikul
Profil
Jak se řeší když chci dát uživateli na výběr z více stylů? Když budu mít např na výběr: barva pozadí stránky - 13 barev, barva výplně obalového divu - taky 13, a pak ještě 13 různých barev nadpisů, písma a tak. Kdybych měl pro každé dělat zvláštní soubor styly.css tak je jich strašně moc. Dá se nějak obejít abych v head měl style="....." a v tom třebas pouze ty věci které se mění přes proměnné v php a věci které jsou pořás stejné normálně z externího souboru a nebo je to nejlepší varianta? Díky
Venca V
Profil
Možností, jak to udělat, je mnoho.
Například:
<?if (!isset($_COOKIE["styl"])) {$styl=1;}
else {$styl=$_COOKIE["styl"];}?>
...
<link rel="stylesheet" type="text/css" href="styl.css">
<link rel="stylesheet" type="text/css" href="styl<?echo $styl;?>.css">

Soubor styl.css je defaultní, s deklaracemi, které jsou pro všechny vzhledy stejné; ostatní styly pak obsahují deklarace pro jeden určitý vzhled.
mikul
Profil
No jo, ale mě šlo o to, že když mám na výběr ze 13 barev tak těch dalších stylů musím mít 3x po 13 souborech - aby šlo vše volit nezávisle na ostatním. Což mi přišlo jako strašně moc souborů a v head pak musí být

<link rel="stylesheet" type="text/css" href="styl.css">
<link rel="stylesheet" type="text/css" href="styl-pozadi<?echo $styl;?>.css">
<link rel="stylesheet" type="text/css" href="styl-div<?echo $styl;?>.css">
<link rel="stylesheet" type="text/css" href="styl-pismo<?echo $styl;?>.css">


tak nevím jestli to mít takhle, nebo raději mít v <body> tom divu <div class="obal"> nadefimované něco jako

style="background-image:url(images/pozadi<?php $cislo=$_COOKIE["cislo"]; echo "$cislo"; ?>.jpg"


a nebo jestli se to dá obejít ještě jinak. Která varianta je nejlepší?
Trejpa
Profil
mikul
A co ti brání mít CSS v PHP (posílané jako "text/css")? Do toho stylu si includem přidáš další soubory.

<link rel="stylesheet" type="text/css" href="styl.php">
mikul
Profil
To by bylo nejlepší, kdybych mohl do souboru styly.css dat proměnné v php. Jenže když tomu dám koncovku .php tak to nezpracuje jako css a nenaformátuje to stránku. Když nedám koncovku .php tak to nezpracuje ty proměnné.
vertigo4
Profil
mikul
jenže když tomu dám koncovku .php tak to nezpracuje jako css
protože to musíš poslat jako text/css jak píše Trejpa...

možná ti pomůže tohle: http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=69840&foru m=7&page=-1
Trejpa
Profil
mikul
Mělo by to fungovat, pokud dáš na začátek "style.php" toto:
<?php header('content-type: text/css'); ?>
Dranel
Profil
Doporučuji dát styl jako interní. Je to rychlejší a můžeš s ním dělat co chceš. Interním myslím vložení do hlavičky.
mikul
Profil
Jenže když teď mám vrch stránky
<?php
$cislo=5;
include "nejaky-soubor.php";
?>

v tom nejaky-soubor.php je celé head včetně
<link href="styly.php" rel="stylesheet" type="text/css" />

v souboru styly.php je

<?php header('content-type: text/css'); ?>
body {
background-image:url(../images/vnitrek/pozadi<?php echo "$cislo"; ?>.jpg);
}


tak mi to asi nezpracuje tu proměnnou protože mi to tam žádané pozadí nevloží. Jinak vše ostatní co ve styly.php mám tak funguje správně jako by to bylo .css
Trejpa
Profil
mikul
Tak tam tu proměnnou musíš nějak dostat. Třeba parametrem v adrese.
<link rel="stylesheet" type="text/css" href="styl.php?barva=<?echo $cislo; ?>">

Ve výsledku nějak takto:
<link rel="stylesheet" type="text/css" href="styl.php?pozadi=12&amp;pismo=5&amp;ohraniceni=3">
mikul
Profil
No nakonec ta proměnná bude z cookies takže to by problém nebyl. Ale když je teď nadefinovaná předtím include tak by ji to mělo vzít ne?
Str4wberry
Profil
Moc důkladně jsem Vaše příspěvky nečetl, ale nebylo by jednodušší přidat id barvy např. elementu <body>, a potom do jednoho CSS souboru přidávat: #barva h1 {color: barva}…?
Trejpa
Profil
mikul
Ne. Soubor "index.php" a "style.php" se zpracovávají zvlášť. Nejdříve jde od prohlížeče k serveru požadavek na "index.php". Server ho vrátí. Prohlížeč čte soubor "index.php" a zjistí, že je v něm odkaz na styly. Pošle serveru nový nezávislý požadavek na "styly.php", které server zpracuje a pošle nezávisle na předchozím, tedy i bez předchozích proměnných.
mikul
Profil
Ale když něco vkládám přes include - např horní menu, do souboru kde mám před fcí include např. že $stranka==uvod tak se mi v tom menu normálně zpracuje
<span class="horni-menu-polozka<?php if ($zone=="uvod") echo "-aktivni"; ?>"><a href="<?php echo $path; ?>">Úvodní stránka</a></span>

i když jej vkládám odjinud tak se tam ta proměnná projeví.
mikul
Profil
prosím promiňte nesoulad nazev proměnných
Trejpa
Profil
mikul
K Str4wberryho řešení:
Možnost by to byla, ale přenášený styl by byl obrovský, protože by musel obsahovat všechny možnosti, které mohou být rozdílné.

PHP (HTML):
<body class="pozadi<?echo $pozadi; ?> pismo<?echo $pismo; ?> okraje<?echo $okraje; ?>">


CSS:
.pozadi1 { background: #fff; }
.pozadi1 h1 { background: #99f; }
.pozadi1 a:hover { background: #ccc; }

.pozadi2 { background: #ffe; }
.pozadi2 h1 { background: #ff9; }
.pozadi2 a:hover { background: #fcf; }

[...]

.pismo1 { color: black; }
.pismo1 a { color: blue; }

.pismo2 { color: gray; }
.pismo2 a { color: #990; }

[...]
mikul
Profil
Tohle by taky šlo. To mě nenapadlo. Mít např v
.body
nadefinované stabilné věci a v
#body
věci co by se měnily. Sice to trochu protáhne kód - jak jsem říkal, mělo by být na výběr ze 4x13 variant ale možná to bude nejjednodušší.
Trejpa
Profil
mikul
Ale když něco vkládám přes include [...] tak se mi v tom menu normálně zpracuje
Ano, protože jde o jeden http požadavek od prohlížeče. Nezáleží na tom, kolik je tam vloženo souborů. Jeden požadavek => zpracování => jeden výsledek => konec spojení => zapomenout proměnné. Styly putují do prohlížeče jako druhý dotaz na server, naprosto nezávisle na stránce a takto nezávisle jsou zpracovávány.
mikul
Profil
Aha. Ale když tu proměnnou budu tahat z cookies tak by ji to mělo vzít ne? Takže můžu zůstat u příspěvku číslo 9 a mělo by to fungovat předělané na braní proměnné z cookies.
Trejpa
Profil
mikul
proměnnou budu tahat z cookies tak by ji to mělo vzít ne?
Samozřejmě.
mikul
Profil
Ok tak díky za vaše rady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0