home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 October / PCWorld_2004-10_cd.bin / novinky / interval / clanek10.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-09-12  |  24.2 KB  |  234 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='-1' />
  10. <meta name='robots' content='index,follow' />
  11. <meta name='googlebot' content='index,follow,snippet,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 name='ICBM' content='49.1915, 16.626' />
  15. <meta name='DC.Title' content='Interval.cz' />
  16. <meta name='DC.Identifier' content='http://interval.cz' />
  17. <meta name='DC.Language' content='cs' />
  18. <meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
  19. <meta http-equiv='imagetoolbar' content='no' />
  20. <meta http-equiv='MSThemeCompatible' content='no' />
  21. <meta name='MSSmartTagsPreventParsing' content='true' />
  22. <link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
  23. <link rel='alternate' type='application/rss+xml' title='RSS Interval.cz' href='http://interval.cz/__rss/rss.asp' />
  24. <link rel='home' href='http://interval.cz' />
  25. <link rel='search' href='http://interval.cz/search_ex.asp' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  30. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  31. <title>Interval.cz - webdesign a e-komerce denn∞</title>
  32. </head>
  33. <body class='interval interval-articles'>
  34. <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>
  35. <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>
  36. <div id='page-body'><div id='page-left'><div id='article'>
  37.  
  38.  
  39. <h2>Strßnky pro r∙znß za°φzenφ na jednΘ adrese v ASP.NET</h2>
  40. <p id='prepend'>S pomocφ rozÜφ°enφ .net Frameworku pro mobilnφ za°φzenφ m∙₧eme na n∞kolika °ßdcφch vytvo°it spolehliv² redirektor, kter² u₧ivatele p°esm∞ruje v₧dy na nejvhodn∞jÜφ verzi strßnek pro jeho za°φzenφ. Na rozdφl od podobnΘ funkce v PHP, o kterΘ jsme ji₧ psali, za nßs cel² mechanismus detekce typu a schopnostφ za°φzenφ toti₧ provede .net Framework sßm.</p>
  41.  
  42. <p>Je pot°eba si °φct, ₧e v∙bec nejde o jedin² zp∙sob, jak nabφzet jednu aplikaci pro vφcero za°φzenφ. DalÜφ mo₧nostφ m∙₧e b²t rozÜφ°enφ <a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mwsdk/html/mwlrfMobilePageClass.asp'>System.Web.UI.MobileControls.MobilePage</a>. Zßkladnφ aplikace je pak v₧dy funkΦnφ vÜude i p°es urΦit² "spartßnsk² vzhled", viz nap°φklad Φlßnek <a href='http://interval.cz/clanek.asp?article=2429' title='R∙₧iΦka, Pavel: Internetov² Φas prost°ednictvφm mobilu v ASP.NET'>Internetov² Φas prost°ednictvφm mobilu v ASP.NET</a>. ╪eÜenφm je za°azenφ takzvan²ch <a href='http://msdn.microsoft.com/library/en-us/mwsdk/html/mwconusingdevicespecifictemplates.asp'>DeviceSpecific Üablon</a>, tak₧e lze pohodln∞ vytvo°it aplikaci, kterß se velmi flexibiln∞ p°izp∙sobuje mo₧nostem za°φzenφ.</p>
  43. <p>P°edem m∙₧eme rovnou °φci, ₧e princip zde popisovanΘ aplikace je analogick² <a href='http://interval.cz/clanek.asp?article=892' title='R∙₧iΦka, Pavel: WWW, WAP a PDA na jednΘ adrese pomocφ PHP'>popisovanΘ aplikaci vyu₧φvajφcφ PHP</a>. Zjistφme typ a schopnosti za°φzenφ a podle toho nastavφme URL pro nßslednΘ p°esm∞rovßnφ, Φφm₧ ·loha celΘ aplikace konΦφ. SystΘm .net Framework mß velmi komplexnφ rozÜφ°enφ pro mobilnφ za°φzenφ v prostoru nßzv∙ <code>System.Web.Mobile</code>, dovede rozpoznat velkΘ mno₧stvφ za°φzenφ, a tak se k≤d aplikace scvrkne jen na zavedenφ pot°ebnΘho prostor∙ nßzv∙, zφskßnφ ·daj∙ o schopnostech za°φzenφ a rozhodovacφ Φßst <code>switch</code>. Na zßv∞r si jeÜt∞ ukß₧eme, jak .net Framework "nauΦit" rozpoznat novΘ za°φzenφ, kterΘ sßm o sob∞ rozpoznat nedovede.</p>
  44. <p>Vychßzφme z p°edpokladu, ₧e v²chozφ strßnka <em>Default.aspx</em>, kterß zajiÜ¥uje detekci a p°esm∞rovßnφ, bude v ko°eni serveru a na zßklad∞ detekce p°esm∞ruje u₧ivatele do jinΘho adresß°e nebo na jinou strßnku. K≤d aplikace je opravdu trivißlnφ, proto si jej rovnou popφÜeme (<a href='podklady/ruzicka/623/wwwwapaspnet.zip'>zdrojov² k≤d ukßzek</a>):</p>
  45.  
  46. <div class='sample'>
  47. <%@ Page Language="C#" EnableViewState="False" EnableSessionState="False" %>
  48. <br /><%@ Import Namespace="System.Web.Mobile" %>
  49. <br /><script RunAt="server">
  50. <br />void Page_Load (Object sender, EventArgs e)
  51. <br />{
  52. <br />  MobileCapabilities currentCapabilities = (MobileCapabilities) Request.Browser;
  53. <br />  String pageUrl = "http://server.cz/cms/";
  54. <br />  if ((currentCapabilities.IsMobileDevice && !currentCapabilities.Crawler) || Request.UserAgent.IndexOf("Windows CE") > -1)
  55. <br />  {
  56. <br />    switch (currentCapabilities.PreferredRenderingType)
  57. <br />    {
  58. <br />      case "xhtml-basic":
  59. <br />        pageUrl = "http://wap.server.cz/";
  60. <br />      break;
  61. <br />      case "xhtml-mp":
  62. <br />        pageUrl = "http://wap.server.cz/";
  63. <br />      break;
  64. <br />      case "html32":
  65. <br />        if (((currentCapabilities.ScreenCharactersWidth <= 32) || (currentCapabilities.Browser.ToLower() == "pocket pc") || (currentCapabilities.MobileDeviceModel.ToLower() == "pocket pc")) && !(currentCapabilities.Browser.ToLower() == "opera" && currentCapabilities.Frames))
  66. <br />          pageUrl = "http://server.cz/pda/";
  67. <br />      break;
  68. <br />      case "chtml10":
  69. <br />        pageUrl = "http://server.cz/pda/";
  70. <br />      break;
  71. <br />      case "wml12":
  72. <br />        pageUrl = "http://wap.server.cz/";
  73. <br />      break;
  74. <br />      case "wml11":
  75. <br />        pageUrl = "http://wap.server.cz/";
  76. <br />      break;
  77. <br />      default:
  78. <br />      break;
  79. <br />    }
  80. <br />  }
  81. <br />  Response.Buffer = true;
  82. <br />  Response.ClearContent();
  83. <br />  Response.StatusCode = 301;
  84. <br />  Response.StatusDescription = "Moved Permanently";
  85. <br />  Response.Redirect(pageUrl,true);
  86. <br />}
  87. <br /></script>
  88. </div>
  89.  
  90. <p>V direktivßch strßnky (<a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconpage.asp'>Page</a>) vidφme zablokovanΘ funkce pro udr₧ovßnφ stavov²ch informacφ, kterΘ jsou pro naÜi aplikaci zbyteΦnΘ a jen by ubφraly systΘmovΘ prost°edky serveru. Je zaveden pot°ebn² prostor nßzv∙ <code>System.Web.Mobile</code>.</p>
  91. <p>V²konnß Φßst sestßvß z obsluhy udßlosti <code>Page_Load</code>, kterß <a href='http://interval.cz/clanek.asp?article=1972' title='Jirava, Jaroslav: Äivotnφ cyklus ASP.NET strßnky'>nastane p°i zavßd∞nφ strßnky na serveru</a>. Zde si ulo₧φme zφskanΘ schopnosti za°φzenφ (<a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mwsdk/html/mwlrfmobilecapabilitiesclass.asp'>MobileCapabilities</a>) z vlastnosti <code>Request.Browser</code>. Dßle si nastavφme prom∞nnou udßvajφcφ °et∞zec URL, kam se bude p°esm∞rovßvat - v²chozφ hodnotu nastavφme na adresu naÜφ webovΘ strßnky, urΦenΘ pro b∞₧nΘ prohlφ₧eΦe osobnφch poΦφtaΦ∙. Z vlastnosti <a href='http://msdn.microsoft.com/library/en-us/mwsdk/html/mwproismobiledeviceproperty.asp'>IsMobileDevice</a> urΦφme, zda se jednß o mobilnφ za°φzenφ. Pokud ano, podle vlastnosti <a href='http://msdn.microsoft.com/library/en-us/mwsdk/html/mwlrfpreferredrenderingtypeproperty.asp'>PreferredRenderingType</a> rozhodneme, jakΘ schopnosti za°φzenφ mß.</p>
  92. <p>Pokud za°φzenφ tvrdφ, ₧e umφ zobrazit HTML k≤d verze 3.2, jeÜt∞ navφc ov∞°φme, zda Üφ°ka displeje je v∞tÜφ ne₧ dvacet znak∙ nebo zda nejde o za°φzenφ typu Pocket PC. To zjistφme z vlastnosti <a href='http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebHttpBrowserCapabilitiesClassBrowserTopic.asp'>Browser</a> a u n∞kter²ch za°φzenφ p°φmo jako rozpoznan² model z vlastnosti <a href='http://msdn.microsoft.com/library/en-us/mwsdk/html/mwlrfmobiledevicemodelproperty.asp'>MobileDeviceModel</a>. Pokud za°φzenφ vyhovφ t∞mto podmφnkßm, nastavφme URL na specißlnφ verzi naÜich strßnek vhodnou pro tato za°φzenφ (nap°φklad poΦφtaΦ s mobilnφm telefonem typu MDA). Pokud podmφnkßm nevyhovuje, jde z°ejm∞ o za°φzenφ s dostateΦn∞ velk²m displejem a proto adresu pro p°esm∞rovßnφ m∞nit nebudeme - ponechßme v²chozφ a klient bude p°esm∞rovßn na b∞₧nou webovou verzi. Obdobn∞ potom rozhodneme o p°esm∞rovßnφ za°φzenφ, kterß podporujφ takzvanΘ compact HTML, WML verze 1.1 a verze 1.2. Zda budou adresy stejnΘ nebo rozdφlnΘ zßle₧φ na tom, kolik verzφ mßme p°ipraven²ch.</p>
  93. <p>Oproti <a href='http://msdn.microsoft.com/library/en-us/mwsdk/html/mwlrfpreferredrenderingtypeproperty.asp'>popisu v MSDN</a> vracφ vlastnost <code>PreferredRenderingType</code> navφc jeÜt∞ dv∞ novΘ hodnoty, <code>xhtml-basic</code> a <code>xhtml-mp</code>. Tyto se t²kajφ p°edevÜφm nov²ch mobilnφch telefon∙ - naÜe ukßzkovß aplikace je sice "poÜle" na tutΘ₧ verzi jako klasickΘ wapovΘ telefony, ka₧dopßdn∞ je pot°eba se zab²vat i t∞mito hodnotami. Pokud bychom je v aplikaci neoÜet°ili, budou u₧ivatelΘ takov²ch telefon∙ posφlßni na v²chozφ strßnku urΦenou pro desktopovΘ prohlφ₧eΦe.</p>
  94. <p>ProblΘmem mobilnφch za°φzenφ je, ₧e ne vÜechna podporujφ cookies a pokud by je aplikace na za°φzenφ odeslala, m∙₧e dojφt k selhßnφ zobrazenφ. Bohu₧el tedy musφme vypnout pou₧φvßnφ cookies pro session. Rovn∞₧ tak je pot°eba, aby URL, kterou ASP.NET generuje v hlaviΦce pro p°esm∞rovßnφ, byla skuteΦn∞ absolutnφ, jak definuje norma RFC. Obojφ zajistφme <a href='http://interval.cz/clanek.asp?article=2233' title='Kopp, Ond°ej: KonfiguraΦnφ parametry aplikace v ASP.NET'>nastavenφm v souboru Web.config</a>. Nastavenφ chovßnφ mechanismu session je globßlnφ (nelze nastavit pro location nebo v pod°φzenΘm adresß°i), proto je lepÜφ, kdy₧ webovß verze strßnek bude umφst∞na v podadresß°i, pro kter² je vytvo°ena zvlßÜ¥ virtußlnφ aplikace, abychom zde mohli sessions vyu₧φvat se vÜφm komfortem vΦetn∞ cookies.</p>
  95. <p>Pot°ebnΘ nastavenφ v konfiguraΦnφm souboru <em>Web.config</em>:</p>
  96.  
  97. <div class='sample'>
  98. <?xml version="1.0" encoding="utf-8" ?>
  99. <br /><configuration>
  100. <br />  <system.web> 
  101. <br />    <sessionState cookieless="true" />
  102. <br />    <httpRuntime useFullyQualifiedRedirectUrl="true" />
  103. <br />  </system.web>
  104. <br /></configuration>
  105. </div>
  106.  
  107. <p>Pro zlepÜenφ p°enositelnosti aplikace by se hodilo URL jednotliv²ch verzφ p°ebφrat z vlastnφch hodnot v souboru <em>Web.config</em> jako ve v²Üe odkazovanΘm Φlßnku, v naÜem p°φkladu je URL uvedeno napevno p°φmo v k≤du aplikace pouze z d∙vodu nßzornosti a p°ehlednosti.</p>
  108. <p>Pokud se stane, ₧e mßme za°φzenφ, kterΘ .net Framework nerozpoznß sprßvn∞, nenφ problΘm popsat jeho vlastnosti do zvlßÜtnφho konfiguraΦnφho souboru do sekce <strong>browserCaps</strong>. V naÜem p°φkladu nadefinujeme fiktivnφ za°φzenφ <em>Interval MDA</em> do souboru <em>Interval.Mda.config</em>:</p>
  109.  
  110. <div class='sample'>
  111. <browserCaps>
  112. <br />  <use var="HTTP_USER_AGENT" />
  113. <br />  <filter>
  114. <br />    <case match="Mozilla\/4\.0 \(compatible; MSIE 4\.01; Windows CE; PPC; 240x320\)">
  115. <br />      browser = "Pocket IE"
  116. <br />      cachesAllResponsesWithExpires = "False"
  117. <br />      canInitiateVoiceCall = "True"
  118. <br />      canRenderEmptySelects = "True"
  119. <br />      canSendMail = "True"
  120. <br />      cookies = "True"
  121. <br />      hidesRightAlignedMultiselectScrollbars = "False"
  122. <br />      inputType = "virtualKeyboard"
  123. <br />      isColor = "True"
  124. <br />      isMobileDevice="True"
  125. <br />      javascript = "True"
  126. <br />      maximumHrefLength = "1024"
  127. <br />      maximumRenderedPageSize = "20000"
  128. <br />      mobileDeviceManufacturer = "Interval.cz"
  129. <br />      mobileDeviceModel = "Interval.cz MDA"
  130. <br />      preferredImageMime = "image/jpeg"
  131. <br />      preferredRenderingMime = "text/html"
  132. <br />      preferredRenderingType = "html32"
  133. <br />      rendersBreaksAfterHtmlLists = "True"
  134. <br />      requiredMetaTagNameValue = "HandheldFriendly"
  135. <br />      requiresAttributeColonSubstitution = "True"
  136. <br />      requiresContentTypeMetaTag = "False"
  137. <br />      requiresDBCSCharacter = "False"
  138. <br />      requiresFullyQualifiedRedirectUrl = "False"
  139. <br />      requiresHtmlAdaptiveErrorReporting = "False"
  140. <br />      requiresLeadingPageBreak = "False"
  141. <br />      requiresNoBreakInFormatting = "False"
  142. <br />      requiresOutputOptimization = "False"
  143. <br />      requiresPostRedirectionHandling = "False"
  144. <br />      requiresUniqueFilePathSuffix = "False"
  145. <br />      requiresUniqueHtmlCheckboxNames = "True"
  146. <br />      screenBitDepth = "24"
  147. <br />      screenCharactersHeight = "17"
  148. <br />      screenCharactersWidth = "32"
  149. <br />      screenPixelsHeight = "320"
  150. <br />      screenPixelsWidth = "240"
  151. <br />      supportsAccessKeyAttribute = "True"
  152. <br />      supportsBodyColor = "True"
  153. <br />      supportsBold = "True"
  154. <br />      supportsCharacterEntityEncoding = "True"
  155. <br />      supportsCss = "True"
  156. <br />      supportsDivAlign = "True"
  157. <br />      supportsDivNoWrap = "False"
  158. <br />      supportsEmptyStringInCookieValue = "True"
  159. <br />      supportsFontColor = "True"
  160. <br />      supportsFontName = "True"
  161. <br />      supportsFontSize = "True"
  162. <br />      supportsImageSubmit = "True"
  163. <br />      supportsIModeSymbols = "False"
  164. <br />      supportsInputIStyle = "False"
  165. <br />      supportsInputMode = "False"
  166. <br />      supportsItalic = "True"
  167. <br />      supportsJPhoneMultiMediaAttributes = "False"
  168. <br />      supportsJPhoneSymbols = "False"
  169. <br />      supportsQueryStringInFormAction = "True"
  170. <br />      supportsRedirectWithCookie = "True"
  171. <br />      supportsSelectMultiple = "True"
  172. <br />      supportsUncheck = "True"
  173. <br />      tables = "True"
  174. <br />      type = "Pocket IE"
  175. <br />    </case>
  176. <br />  </filter>
  177. <br /></browserCaps>
  178. </div>
  179.  
  180. <p>Hodnoty jednotliv²ch vlastnostφ samoz°ejm∞ m∙₧eme stanovit ruΦn∞, pro usnadn∞nφ se vÜak hodφ pou₧φt online <a href='http://www.asp.net/mobile/profile/default.aspx'>Device Profiler</a> na strßnkßch <a href='http://www.asp.net/'>ASP.NET</a>. S jeho pomocφ snadno otestujete vlastnosti a mo₧nosti za°φzenφ a nakonec se vytvo°φ kompletnφ definice <code>browserCaps</code>.</p>
  181. <p>Zb²vß si jen ukßzat, jak dßme .net Frameworku vlastnosti naÜeho za°φzenφ na v∞domφ. Do ko°enovΘho souboru <em>Web.config</em> nebo do hlavnφho konfiguraΦnφho souboru <em>Machine.config</em> p°idejte nßsledujφcφ definici do sekce <code>system.web</code> a p°ihrajte vytvo°en² definiΦnφ soubor:</p>
  182.  
  183. <div class='sample'>
  184. <system.web>
  185. <br />  <browserCaps>
  186. <br />    <file src="Interval.Mda.config" />
  187. <br />  </browserCaps>
  188. <br /></system.web>
  189. </div>
  190.  
  191. <p>Podobn²ch definicφ je, jak vidno, mo₧nΘ p°idat libovoln² poΦet - nicmΘn∞ se hodφ Φas od Φasu sledovat updaty, zda nenφ k dispozici <a href='http://www.asp.net/mobile/deviceupdate.aspx?tabindex=6'>update definic mobilnφch za°φzenφ</a>, abychom vlastnφ definicφ nenosili d°φvφ do lesa.</p>
  192.  
  193. <p><span class='note-redactor'>Pozn. red.: Tento Φlßnek vyÜel poprvΘ 18. 9. 2003. P∙vodnφ verze <a href='podklady/ruzicka/623/akt_623_clanek_20030918.zip'>Φlßnku</a> a k n∞mu vedenΘ <a href='podklady/ruzicka/623/akt_623_diskuse_20030918.zip'>diskuse</a> jsou vßm k dispozici v ZIP archivech.</span></p>
  194.  
  195.  
  196.  
  197. <div id='article-author'>
  198. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=72'>R∙₧iΦka, Pavel</a> (21. 8. 2004)
  199. <div id='article-about-author'>odborn² redaktor Interval.cz</div>
  200. </div>
  201.  
  202.  
  203. </div></div>
  204. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  205. <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>
  206.  
  207.  
  208.  
  209. <div class='page-right-box book'>
  210.     <h3>Kni₧nφ novinka</h3>
  211.     <div class='page-right-box-in'>
  212.         <div class='book-top'>
  213.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=254'>Macromedia Flash MX 2004, oficißlnφ v²ukov² kurz</a></h4>
  214.         </div>
  215.         <div class='image'>
  216.             <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  217.         </div>
  218.         <div class='book-bottom'>Cena: <span class='book-price-old'>550 KΦ</span> <span class='book-price-new'>495 KΦ</span></div>
  219.     </div>
  220. </div>
  221.  
  222.  
  223.  
  224. <div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 7 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3549'>Hrßtky s okrajem textu v CSS</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3527'>Manußly aneb Jak jsem se nauΦil ned∞lat si starosti a mφt rßd internet</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3528'>PφÜeme pro web - odliÜte se od konkurence</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3546'>Zamezenφ vφcenßsobnΘho odeslßnφ formulß°e JavaScriptem</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3550'>Nßvrh aplikacφ v jazyce UML - textovß specifikace p°φpad∙ u₧itφ</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3533' title='(55 komentß°∙)'>Editory pro webdesignΘry - velk² programßtor</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3529' title='(40 komentß°∙)'>Zaklφnadla na spam</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3527' title='(22 komentß°∙)'>Manußly aneb Jak jsem se nauΦil ned∞lat si starosti a mφt rßd internet</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3517' title='(21 komentß°∙)'>PφÜeme pro web - podle Φeho se zßkaznφci rozhodujφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3549' title='(16 komentß°∙)'>Hrßtky s okrajem textu v CSS</a></li></ul></div></div>
  225.  
  226.  
  227.  
  228. <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>
  229. </div>
  230. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  231. <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>
  232. </body>
  233. </html>
  234.