home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 June / Chip_2004-06_cd1.bin / chplus / interval / clanek06.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-05-01  |  16.5 KB  |  206 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='googlebot' content='index, follow, noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta http-equiv='imagetoolbar' content='no' />
  15. <meta http-equiv='MSThemeCompatible' content='no' />
  16. <meta name='MSSmartTagsPreventParsing' content='true' />
  17. <meta name='ICBM' content='49.1915, 16.626' />
  18. <meta name='DC.Title' content='Interval.cz' />
  19. <meta name='DC.Identifier' content='http://interval.cz' />
  20. <meta name='DC.Language' content='cs' />
  21. <link rel='alternate' type='text/xml' title='RSS' href='http://interval.cz/__rss/rss.asp' />
  22. <link rel='shortcut icon' href='favicon.ico' />
  23. <link rel='first' href='http://interval.cz/clanek.asp?article=2561' />
  24. <link rel='prev' href='http://interval.cz/clanek.asp?article=2848' />
  25. <link rel='up' href='http://interval.cz/serial.asp?serial=27' />
  26. <link rel='home' href='http://interval.cz' />
  27. <link rel='search' href='http://interval.cz/search_ex.asp' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  30. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  31. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  32. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  33. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  34. </head>
  35. <body class='interval interval-articles'>
  36. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  37. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  38. <div id='page-body'><div id='page-left'><div id='article'>
  39.  
  40.  
  41.  
  42. <h2>Alternativnφ styly - pou₧itφ skript∙ na stran∞ serveru</h2>
  43. <p id='prepend'>Tφmto Φlßnkem zakonΦφm svou sΘrii pojednßnφ o alternativnφch stylech. Tentokrßt vßm ukß₧i, jak zm∞nit styl strßnky pomocφ skriptu na stran∞ serveru. Zφskßte tak kompletnφ p°ehled r∙zn²ch mo₧nostφ prßce s alternativnφmi styly.</p>
  44.  
  45.  
  46. <p>Ob∞ °eÜenφ, popsanß v p°edchozφch dvou Φlßncφch, vyu₧φvala ji₧ existujφcφ element <code>link</code>. Prvnφ technika p°edpoklßdala, ₧e prohlφ₧eΦ naΦte obsah mno₧iny t∞chto element∙ a nabφdne u₧ivateli p°φsluÜnΘ menu, druhß pou₧φvala uzly, p°edstavujφcφ tyto elementy, k vypφnßnφ a zapφnßnφ jim p°φsluÜn²ch soubor∙. Tentokrßt ovÜem budeme muset zaΦφt p∞kn∞ od zaΦßtku.</p>
  47.  
  48. <h3>Skriptujeme na stran∞ serveru</h3>
  49. <p>╪eÜenφ na stran∞ serveru funguje p°esn∞ naopak ne₧ °eÜenφ na stran∞ klienta. Do XHTML dokumentu zapφÜeme pouze element <code>link</code> pro stßl² styl. DalÜφ odkazy se budou do dokumentu zapisovat pomocφ skriptu na stran∞ serveru (v tomto p°φpad∞ jsem si vybral PHP). Toto °eÜenφ se do jistΘ mφry podobß °eÜenφ, uvedenΘmu v p°edchozφm Φlßnku, v tom, ₧e takΘ vyu₧φvß cookies.</p>
  50. <p>Ka₧dΘmu stylu p°i°adφme jmΘno. Proto₧e nepracujeme v∙bec s atributem <code>title</code> elementu <code>link</code>, m∙₧eme si jmΘna vymyslet. Nßsledujφcφ v²pis k≤du p°edstavuje funkci, kterß na zßklad∞ °et∞zcovΘho parametru vracφ pole obsahujφcφ jmΘna p°φsluÜn²ch soubor∙. Mno₧nΘ Φφslo je v tomto p°φpad∞ na mφst∞, tato funkce je navr₧ena tak, aby jednomu jmΘnu odpovφdalo vφce stylov²ch soubor∙. Tφmto simulujeme sdru₧ovßnφ styl∙ popsanΘ v prvnφ Φlßnku. Dßle definujeme dv∞ konstanty, Φφselnou <samp>DAYS</samp>, p°edstavujφcφ poΦet dn∙, po kterΘ bude platit cookie s nßzvem stylu, a °et∞zec <samp>BASE</samp>, kter² oznaΦuje stav, kdy u₧ivatel chce vypnout ·pln∞ vÜechny styly krom∞ stßlΘho.</p>
  51.  
  52. <div class='sample'>
  53. define("BASE","none");
  54. <br />define("DAYS",10);
  55. <br />
  56. <br />function getFileName($name)
  57. <br />{
  58. <br />  $ret=array();
  59. <br />
  60. <br />  if ($name!=BASE)
  61. <br />  {
  62. <br />    if (!$name) $name="pref";
  63. <br />    switch ($name)
  64. <br />    {
  65. <br />      case "pref": $ret[0]="pref_style.css"; break;
  66. <br />      case "first": $ret[0]="alt_style1.css"; break;
  67. <br />      case "second": $ret[0]="alt_style2.css"; break;
  68. <br />      case "third": $ret[0]="alt_style3a.css"; $ret[1]="alt_style3b.css"; break;
  69. <br />    }
  70. <br />  }
  71. <br />  return $ret;
  72. <br />}
  73. </div>
  74.  
  75. <p>Funkce vracφ pole <samp>$ret[]</samp>, kterΘ je na zaΦßtku ·pln∞ prßzdnΘ. Pokud je funkci p°edßn parametr rovnajφcφ se hodnot∞ konstanty <samp>BASE</samp>, je toto prßzdnΘ pole vrßceno. V opaΦnΘm p°φpad∞ se jeÜt∞ testuje, jestli nebyl p°edßn funkci prßzdn² °et∞zec (to se stane, pokud cookie se jmΘnem stylu neexistuje). Pokud je tomu tak, je do parametru p°i°azena hodnota <samp>pref</samp> (v tomto textu dßle p°edpoklßdßm, ₧e preferovan² styl mß jmΘno <samp>pref</samp>, vy si to samoz°ejm∞ m∙₧ete ve sv²ch skriptech zm∞nit). Dßle se na rozcestnφku <code>switch</code> testuje hodnota <samp>$name</samp> a pole <samp>$ret</samp> se plnφ p°φsluÜn²mi jmΘny soubor∙. Ve vaÜich skriptech se bude tato Φßst pochopiteln∞ liÜit, m∙₧ete si zvolit libovolnß jmΘna a jim p°φsluÜejφcφ soubory.</p>
  76. <p>N∞kde v textu strßnky se samoz°ejm∞ musφ objevit odkazy umo₧≥ujφcφ zm∞nu stylu. V tomto p°φpad∞ (a na strßnce <em>index.php</em>) budou vypadat takto: </p>
  77.  
  78. <div class='sample'>
  79. <a href="index.php?style=pref">preferovan² alternativnφ styl</a>
  80. <br /><a href="index.php?style=first">1. styl</a>
  81. <br /><a href="index.php?style=second">2. styl</a>
  82. <br /><a href="index.php?style=third">3. styl</a>
  83. <br /><a href="index.php?style=none">pouze zßkladnφ styl</a>
  84. </div>
  85.  
  86. <p>Odkazy tedy budou sm∞°ovat na stejnou strßnku, jenom budou navφc p°edßvat jmΘno stylu pomocφ <em>get</em> prom∞nnΘ <samp>style</samp>. Z toho tedy vypl²vß, ₧e ka₧dß strßnka m∙₧e zφskat jmΘno svΘho stylu prost°ednictvφm jednoho ze dvou mo₧n²ch zdroj∙. Bu∩ jako souΦßst svΘ adresy nebo z cookie. Ke druhΘ zmφn∞nΘ mo₧nosti dojde, pokud je strßnka spuÜt∞na odjinud ne₧ z uveden²ch odkaz∙, tedy jφ nenφ p°edßna ₧ßdnß prom∞nnß <samp>style</samp>. Nßsledujφcφ funkce naΦte jmΘno stylu:</p>
  87.  
  88. <div class='sample'>
  89. function loadStyle()
  90. <br />{
  91. <br />  if (isset($_GET["style"]))
  92. <br />  {
  93. <br />    return $_GET["style"];
  94. <br />  }
  95. <br />  else
  96. <br />  {
  97. <br />    return (isset($_COOKIE["style"]) ? $_COOKIE["style"] : "");
  98. <br />  }
  99. <br />}
  100. </div>
  101.  
  102. <p>Funkce se nejd°φve pokusφ p°evzφt prom∞nnou <samp>style</samp> z adresy dokumentu. Pokud nebyla takto ₧ßdnß p°edßna, zkusφ ji p°evzφt z cookie. Pokud nenφ hledanß hodnota ani tam, vrßtφ prßzdn² °et∞zec. K tomu m∙₧e dojφt v p°φpad∞, ₧e cookie neexistuje a u₧ivatel nep°iÜel na strßnku jednφm z uveden²ch odkaz∙. V tomto p°φpad∞ bude pou₧it preferovan² alternativnφ styl.</p>
  103. <p>Poslednφ funkce p°evezme jmΘno stylu, vyhledß k n∞mu odpovφdajφcφ soubory (pomocφ ji₧ uvedenΘ funkce <samp>getFileName()</samp>) a zapφÜe do dokumentu elementy <code>link</code> s odpovφdajφcφm obsahem:</p>
  104.  
  105. <div class='sample'>
  106. function writeLink($name)
  107. <br />{
  108. <br />  foreach (getFileName($name) as $style)
  109. <br />  {
  110. <br />    echo("<link href=\"$style\" type=\"text/css\" rel=\"stylesheet\" />\n");
  111. <br />  }
  112. <br />}
  113. </div>
  114.  
  115. <p>Nynφ u₧ pot°ebujeme pouze krßtk² k≤d, kter² ulo₧φ do cookie jmΘno prßv∞ zvolenΘho stylu. Nezapome≥te, ₧e pokud nepou₧φvßte <a href='http://interval.cz/clanek.asp?article=1063' title='Kocman, Ji°φ: UÜet°ete a₧ 80 % datovΘho p°enosu'>output buffering</a> nebo ekvivalentnφ techniku, tento k≤d se musφ v dokumentu objevit jeÜt∞ p°edtφm, ne₧ vßÜ skript provede jak²koli v²stup do prohlφ₧eΦe (jinak °eΦeno, nejlΘpe je uvΘst tento k≤d hned na zaΦßtek dokumentu):</p>
  116.  
  117. <div class='sample'>
  118. if (isset($_GET["style"]))
  119. <br />{
  120. <br />  setcookie("style",$_GET["style"],time()+60*60*24*DAYS,"/");
  121. <br />}
  122. </div>
  123.  
  124. <p>Toto byl poslednφ nutn² kus k≤du, <a href='podklady/dudek/799/switch.zip'>kompletnφ skript</a> si m∙₧ete stßhnout. StaΦφ jej pak includovat na zaΦßtek ka₧dΘ vaÜφ strßnky jeÜt∞ p°ed jak²mkoli v²stupem, proto₧e krom∞ deklaracφ vÜech pot°ebn²ch funkcφ obsahuje i zmφn∞n² krßtk² k≤d k ulo₧enφ jmΘna stylu do cookie. Ve svΘm dokumentu v sekci <samp>head</samp> pou₧ijte funkce nßsledovn∞: </p>
  125.  
  126. <div class='sample'>
  127. <head>
  128. <br />...
  129. <br /><link href="base_style.css" type="text/css" rel="stylesheet" />
  130. <br /><?php writeLink(loadStyle()); ?>
  131. <br />...
  132. <br /></head>
  133. </div>
  134.  
  135. <p>V hlaviΦce strßnky je uveden stßl² styl a dalÜφ styly jsou zapisovßny podle hodnoty jmΘna stylu naΦtenΘ funkcφ <samp>loadStyle()</samp>.</p>
  136.  
  137. <h3>V²hody a nev²hody</h3>
  138. <p>╪eÜenφ pomocφ skriptu na stran∞ serveru mß jednu zßsadnφ v²hodu oproti °eÜenφm uveden²m v p°edchozφch Φlßncφch, bude fungovat ·pln∞ vÜude a nemusφ se spolΘhat na mo₧nosti prohlφ₧eΦe. Tato v²hoda je natolik v²znamnß, ₧e z urΦitΘho pohledu je toto °eÜenφ nejlepÜφ ze vÜech uveden²ch. Nev²hodou je, ₧e urΦit²m zp∙sobem podr²vß sΘmantiku dokumentu. Techniky z minul²ch dφl∙ toti₧ pracovaly se seznamem styl∙, kter² byl p°φmo souΦßstφ dokumentu v podob∞ mno₧iny element∙ <code>link</code>. V p°φpad∞ °eÜenφ na stran∞ serveru vÜe funguje obrßcen∞. Seznam styl∙ je definovßn vn∞ samotn² XHTML dokument (v naÜem p°φpad∞ je definovßn funkcφ <samp>getFileName()</samp>) a zapisujφ se pouze vybranΘ styly.</p>
  139. <p>┌kolem tΘto sΘrie Φlßnk∙ nebylo pouze nabφdnout hotovß °eÜenφ pou₧itelnß k v²m∞n∞ alternativnφch styl∙, ale p°edevÜφm porozum∞t jednotliv²m mo₧nostem, jak alternativnφ styly u₧ivateli nabφdnout. Pokud bych si jß osobn∞ m∞l vybrat jedno z nabφdnut²ch °eÜenφ, nejspφÜe bych zvolil klientskΘ skriptovßnφ, i p°es vÜechna negativa. Je ovÜem mo₧nΘ, ₧e vaÜe volba bude odliÜnß, proto doufßm, ₧e vßm pro ni tyto Φlßnky poskytly dostatek argument∙.</p>
  140.  
  141.  
  142.  
  143. <div id='article-author'>
  144. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=125'>Dudek, Jan</a> (21. 4. 2004)
  145.  
  146. </div>
  147.  
  148.  
  149.  
  150. </div></div>
  151. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  152. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  153.  
  154.  
  155.  
  156. <div class='page-right-box book'>
  157.     <h3>Kni₧nφ novinka</h3>
  158.     <div class='page-right-box-in'>
  159.         <div class='book-top'>
  160.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=250'>Zrychlete svΘ WWW strßnky!</a></h4>
  161.         </div>
  162.     </div>
  163.     <div class='image'>
  164.         <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  165.     </div>
  166.     <div class='book-bottom'>Cena: <span class='book-price-old'>390 KΦ</span> <span class='book-price-new'>351 KΦ</span></div>
  167. </div>
  168.  
  169.  
  170.  
  171. <div class='page-right-box reading'>
  172.     <h3>NejΦten∞jÜφ</h3>
  173.     <div class='page-right-box-in'>
  174.         <ul>
  175. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  176. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  177. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3298'>Osv∞dΦenφ z ·Φetnictvφ p°es cΘdΘΦko</a></li>
  178. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3295'>Cactus - testovanie cookies</a></li>
  179. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3302'>K Φemu je nßm MathML</a></li>
  180.         </ul>
  181.     </div>
  182. </div>
  183.  
  184.  
  185.  
  186. <div class='page-right-box cauldron'>
  187.     <h3>Diskuznφ kotel</h3>
  188.     <div class='page-right-box-in'>
  189.         <ul>
  190. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3305' title='(48 komentß°∙)'>T°etφ d∞lß byznys</a></li>
  191. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3280' title='(36 komentß°∙)'>Interval.cz a jeho Φtenß°i</a></li>
  192. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3296' title='(30 komentß°∙)'>PHP pro pokroΦilΘ - znovu t°φdy a objekty</a></li>
  193. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301' title='(24 komentß°∙)'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  194. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276' title='(21 komentß°∙)'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  195.         </ul>
  196.     </div>
  197. </div>
  198.  
  199.  
  200.  
  201. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  202. </div>
  203. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  204. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  205. </body>
  206. </html>