Sova v síti - 1/17 - vydáno 1.8.2001 Dobrý den, je zde první srpnový den a s ním vaše Sova v síti :-) OBSAH -- Zpoždění, nové stránky, soutěž -- Seriál o PHP, XI.část - objekty -- Kontextová navigace -- Mysli globálně, jednej lokálně -- Odpovídáme na dotazy čtenářů ZPOŽDĚNÍ, NOVÉ STRÁNKY, SOUTĚŽ Především, prosím, omluvte zpoždění tohoto vydání. Z velké části za něj mohou nové stránky Sovy, které nám daly docela zabrat. Přeci jen od teorie, dokumentové nedávným seriálem článků o redesignu, je k praxi ještě značný kus cesty. Nicméně stránky jsou na světě a doufáme, že se vám budou líbit. Všechno zlé je ale k něčemu dobré. Díky zpoždění dostane dnešní vydání Sovy již přes 700 čtenářů, neboť právě včera jsme tuto hranici překročili. Pomalu ale jistě se blížíme k tisícovce, takže bychom si měli v redakci již šetřit na dárek pro jubilejního tisícího čtenáře. Půjdou-li registrace nadále tímto tempem, dočkáme se ho někdy koncem září. Poslední redakční zpráva je o něco smutnější. V minulém čísle jsme vyhlásili soutěž na nový vzhled stránek Sovy v síti, ale bohužel, žádné reakce jsme se nedočkali. Že by se opravdu nikdo nenašel? Nu, ale teď se již pusťme do dnešních článků. SERIÁL O PHP, XI.ČÁST - OBJEKTY Martin Jelínek Objekt = proměnná, jejíž typ je určitá třída. Poté můžeme pomocí této proměnné přistupovat k jejím datům a funkcím. Definice: Class jméno třídy { členské proměnné členské funkce } Členské proměnné Členské proměnné se určují dalším novým příkazem a tím je slovo var a za ním následuje seznam proměnných oddělených čárkami. Tedy příklad: Class clenprom { var $jmeno, $prijmeni; var $ulice, $mesto, $psc; } Když máme vytvořenou třídu můžeme k ni dále přiřazovat: $adresa = new clenprom; $adresa->jmeno = "Martin"; $adresa->prijmeni = "Jelinek"; $adresa->ulice = "Promenna ulice"; $adresa->mesto = "Velke mesto"; $adresa->psc = "99999"; Pokud chceme vypsat jmeno a mesto zadame: Echo $adresa->jmeno; Echo $adresa->mesto; Členské funkce To jsou funkce, které manipulují z daty v objektu. My si vytvoříme funkci vypis(), která nám bude tisksknou zadaná data v objektu. Class clenprom { var $jmeno, $prijmeni; var $ulice, $mesto, $psc; function vypis() { echo $this->jmeno." ".$this->prijmeni.": "; echo $this->ulice.", ".$this->mesto.", ".$this->psc; } } Proč používáme proměnnou $this? Tento zápis se používá pokud se odvoláváme na členské proměnné. $adresa = new clenprom; $adresa->jmeno = "Martin"; $adresa->prijmeni = "Jelinek"; $adresa->ulice = "Promenna ulice"; $adresa->mesto = "Velke mesto"; $adresa->psc = "99999"; $adresa->vypis(); Logické chyby Odhalení těchto chyb není tak snadné jako odhalení syntaktických chyb. Mnohdy musíme přepsat celou aplikaci, abychom chybu opravili. Že v programu máme logickou chybu zjistíme snadno a to, když program nepracuje tak jak má. Proto je dobré si před začátkem psaní programu vše pečlivě promyslet. Promyslet si, jak budeme program členit, vlastně si vymyslet hrubý rozvrh, podle kterého bychom se měli řídit. Dejte si pozor abyste měli všechny používané proměnné inicializované! Tohle téma by bylo na dlouhé psaní a stejně bychom nic nevyřešili, protože návod, jak se vyvarovat logických chyb neexistuje. Můžu Vám pouze poradit: pokud máte v aplikaci logickou chybu a nemůžete jí odhalit, vložte do různých částí skriptu příkaz echo a vypisujte si hodnoty proměnných. V případě nejasnosti, ale i úspěchu pište na webmaster@oozzik.com. (c) 2001 Martin Jelínek - http://oozzik.com - články o PHP, HTML KONTEXTOVÁ NAVIGACE Marek Prokop O navigaci jsem v Sově už jednou psal (http://www.sovavsiti.cz/c01081.html) a pravděpodobně ještě mnohokrát psát budu, protože to je jedna z nejdůležitějších součástích webových stránek. Dnes se podíváme na jednu velmi praktickou navigační techniku. Stává se pomalu nepsaným standardem, že se veškerá navigace určitého webu soustřeďuje do menu na levém či horním okraji každé stránky. V podstatě je to velmi praktické -- uživatelé jsou na to už zvyklí a snadno se pak na stránkách zorientují. Ne vždy je však tento způsob postačující. Jsou komplexní weby, u kterých by jednotné menu, stejné na všech stránkách muselo být příliš rozsáhlé a bohatě větvené. Pak se uplatní kontextová navigace. Příkladem, který mne inspiroval k tomuto článku je web americké zasilatelské společnosti UPS (http://www.ups.com). Mým úkolem, bylo navrhnout rozhranní mezi naším e-commerce systémem a zasilatelskými službami UPS. Jediné, co jsem před vstupem na www.ups.com věděl, bylo, že UPS jakési online nástroje nabízí. Po vstupu na stránky ups.com už jsem nestačil vyjít z údivu. To, co jsem hledal, jsem totiž našel neuvěřitelně rychle a snad ani jednou jsem se nemusel vracet z nějaké slepé uličky. Jak se to UPS povedlo? Podívejte se sami, vydá to za mnoho slov. Podstata je nicméně velmi jednoduchá. Hned na vstupní stránce na vás čeká veliké množství odkazů. Je jich opravdu hodně, takže zde se chvíli zdržíte. To je ale naposled. Jakmile si vyberete, každá další stránka už obsahuje jen krátký, jasný a velmi srozumitelný text a dole pod textem zcela jednoznačné 2 až 4 volby: Chcete pokračovat na A? Hledáte B? Pokud jste to a to, zvolte C. Asi dvakrát, když se autorům volby pod stránkou z objektivních důvodů nepodařilo zformulovat dostatečně jednoznačně, přibyla ještě další možnost: Nejste si jisti, zda chcete A, nebo B? A kliknutím na tento odkazem se otevřelo nové okénko s jasným vysvětlením, čím se vlastně A a B liší. Paralelně s tímto systémem, je na stránkách UPS i klasické menu v levém pruhu, ale to jsem využil až při asi třetí návštěvě, kdy už jsem se na stránkách dobře orientoval. Do té doby mi kontextová navigace pod každým textem poskytla neocenitelné služby. A co vy? Máte také složitěji strukturovaný web? Nechcete se nechat inspirovat? Vybrat pár opravdu relevantních odkazů ke každé stránce může být trochu pracné a žádné SSI, ASP ani PHP vám v tom nepomohou, ale věřte, že návštěvník to velmi ocení. MYSLI GLOBÁLNĚ, JEDNEJ LOKÁLNĚ Marek Prokop Think globally, act locally. Heslo, které se na internetu objevuje stále častěji a které má překvapivé množství různých výkladů. Že se vyplatí o něm přemýšlet a občas ho použít, ukazuje i následující příklad. Před časem se v jedné emailové konferenci objevil příspěvek, jehož hlavní téma není důležité. Mimo jiné z něj však vyplynulo, že pisatel až v této konferenci zjistil, že u něj, přímo přes ulici, sídlí firma, jejíž služby potřebuje a již dlouho je na internetu bezvýsledně hledá. Objevil to v předcházejícím příspěvku pracovníka oné firmy, který se podepsal i s adresou. Stává se, že my, zkušenější uživatelé internetu, jsme tak okouzleni jeho globálním dosahem a možnostmi, že zapomínáme na nejbližší okolí. Optimalizujeme své stránky pro vyhledávače na nejrůznější klíčová slova, ale málokdy si vzpomeneme na vlastní adresu. Velmi snadno tedy naleznete celé zástupy reklamních agentur, stavebních firem, vývojářů software. Zkuste ale nalézt reklamní agenturu z Pardubic, stavební firmu v Berouně a databázového specialistu v Prostějově. Přitom stačí velmi málo -- na každé stránce uvést např. v zápatí alespoň město vašeho sídla a použít ho i při zápisu vašich stránek do všech katalogů. ODPOVÍDÁME NA DOTAZY ČTENÁŘŮ Dotaz: Měl bych jeden dotaz ohledně diskusních fór, vím o tom, že v PHP se vytvořit DAJÍ, ale nikde jsem nenašel, zda se dá vytvořit i pomocí HTML kódu! Odpověď: V podstatě jste si odpověděl sám. K naprogramování diskusního fóra potřebujete mít k dispozici skriptování na straně serveru, tj. např. PHP, nebo ASP. Vzhledem k tomu, že je nutné na serveru ukládat jednotlivé příspěvky, zpravidla do databáze, potřebujete navíc i přístup k nějaké databázi (nejčastěji MySQL, nebo MS SQL Server). Dotaz: Jak lze dosáhnout otevření IE 5 v maximalizovaném okně. Mám na mysli jakoukoliv variantu, buď jako odkaz nebo přímo ze zástupce na ploše. Odpověď: Chcete-li otevřít nové okno prohlížeče z odkazu na stránce, musíte použít příkaz v JavaScriptu window.open. Mezi jeho parametry patří i rozměry nového okna. Otevření maximalizovaného okna jakékoli aplikace Windows ze zástupce na ploše lze dosáhnout volbou Spustit Maximalizované ve vlastnostech zástupce. Dotaz: Zajímalo by mně, bylo-li by možné pomocí kaskádových stylů kromě ovlivňování stylu dokumentu, také vkládat periodicky se opakující část dokumentu. Mám na mysli například vložit do definice stylu i vlastní text dokumentu (např. nějaké speciální nabídky, které se často mění, ale chci aby byli skoro na všech stránkách) , abych při jeho aktualizaci nemusel předělávat x stránek celého webu. Odpověď: Pomocí CSS toho dosáhnete těžko. CSS2 sice umožňuje určit text předcházející/následující určitý prvek a to se hodí spíše pro jednotlivé znaky či slova a navíc to v mnoha prohlížečích (včetně IE5) nefunguje. To, co vy hledáte, jsou tzv. SSI, server side include, neboli vkládání na straně serveru. Zeptejte se vašeho poskytovatele webhostingu, zda SSI umožňuje. Pokud ne, můžete si ještě teoreticky pomoci rámci, nebo klientským JavaScriptem. Oba tyto způsoby ale významně snižují přístupnost a použitelnost stránek, takže je v praxi spíše nedoporučuji. Další možnost nabízí MS Frontpage a jeho Shared Borders (doslova společné okraje). Musíte se ale pak smířit s tím, že stránky generované Frontpagem vypadají obvykle dost amatérsky a navíc opět potřebují podporu na straně serveru. Poslední možnost jsou systémy na předgenerování statických stránek ze šablon a dynamických dat, ovšem to už je pro běžné použití v malém možnost opravdu čistě hypotetická. Dotaz: V soucasne chvilce se snazim stvorit nejake stranky a zabyvam se nekolika problemy. Prvni je radkove menu s vysuvnymi nabidkami dalsich polozek - neco jako jsou horni menu v ruznych programech .... Dal bych chtel do stranek zaradit i nejakou tu anketku, ktera by mi chodila na mail a v idelnim pripade uchovavala nejakou statistiku. Posledni co se mi zatim nepodarilo uspokojive stvorit je formular, ktery by mel krome prazdnych poli pro vyplneni udaju i nejaka ta vyberova menu apod. Stranky vytvarim s vyuzitim PHP, takze kdyby jste mi poradily alespon nektere reseni a bude to v mezich mych moznosti to zapracovat, byl bych Vam moc vdecny. Odpověď: Dynamická menu se obvykle dělají klientským JavaScriptem. Pokud si projdete několik webů zaměřených na JavaScript, najdete mnoho již hotových příkladů. Jeden je např. zde: http://www.interval.cz/r-article.asp?id=642 Návodů na anketu v PHP najdete na webu také hromadu. Např. tady: http://www.interval.cz/r-article.asp?id=285 Co se týče výběrových polí do formuláře, zkuste něco takového: V PŘÍŠTÍM ČÍSLE -- Seriál o PHP, XII.část - formuláře -- Hry v JavaScriptu -- Odpovídáme na dotazy čtenářů, atd. A to je pro dnešek vše. Přejeme vám krásný den, jakož i celý zbytek týdne a za necelých čtrnáct dní zase na shledanou! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nechcete, nebo naopak chcete dostávat Sovu v síti? Odběr lze odhlásit odesláním zprávy na unsubscribe@sovavsiti.cz. Přihlásit se lze odesláním zprávy na subscribe@sovavsiti.cz, nebo formulářem na adrese http://www.sovavsiti.cz/. Chcete nám cokoli sdělit? Uvítáme vaše náměty, připomínky, kritiku, atd. na adrese mailto:redakce@sovavsiti.cz. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ARCHIV STARŠÍCH ČÍSEL Hodně nových čtenářů se ptá, kde najdou články ze starších čísel Sovy v síti. Všechny čísla jsou ihned po vydání ukládány do adresáře www.sovavsiti.cz/download a jmenují se sovaRRCC.txt, kde RR je ročník (zatím vždy 01) a CC je číslo (vždy dvojciferné, tedy např. 02). Soubory jsou textové, čeština je kódována dle Windows-1250. Nehledejte v adresáři žádný html dokument, žádný tam není. Lze si pouze stáhnout jednotlivá čísla přímým zadáním jejich URL, tedy např. http://www.sovavsiti.cz/download/sova0104.txt. Pozor, server rozlišuje malá a velká písmena. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Není-li v konkrétním případě uvedeno jinak, je autorem všech publikovaných článků Marek Prokop. Tento ezin, nebo jeho libovolnou část můžete volně šířit dále, pokud současně uvedete zdroj následujícím způsobem: _________________________________________________________________ Sova v síti -- (c) 2001 Marek Prokop -- http://www.sovavsiti.cz/