Mendelova univerzita v Brnˇe Provoznˇe ekonomick´a fakulta
Gener´ ator interaktivn´ıch komponent eLearningov´ ych kurz˚ u Bakal´ aˇrsk´ a pr´ ace
Vedouc´ı pr´ace: Ing. Petr Jedliˇcka, Ph.D.
Zdenˇek Nov´ak
Brno 2011
list originalniho zadani prace
Dˇekuji vedouc´ımu pr´ace, Ing. Petru Jedliˇckovi, Ph.D., za veden´ı pˇri zpracov´an´ı bakal´aˇrsk´e pr´ace a za poskytnut´ı nezbytn´ ych podklad˚ u, cenn´e pomoci, rad a konstruktivn´ıch pˇripom´ınek.
Prohlaˇsuji, ˇze jsem tuto pr´aci vypracoval zcela samostatnˇe s pouˇzit´ım v´ yhradnˇe tˇech zdroj˚ u, kter´e jsou souhrnnˇe uvedeny v seznamu literatury.
Brno, 25. kvˇetna 2011
....................................................
5
Abstract Zdenˇek Nov´ak, Application for generating interactive e-learning tasks. Bachelor thesis. Brno, 2011. Bachelor thesis deals with creation of application for generating prebuilt elearning components, which serves to increase course’s interactivity while enabling verification of acquired knowledge through interactive elements of HTML page. It contains design and implementation of generator those interactive quizzes. Keywords e-learning, interactive tasks, web application
Abstrakt Zdenˇek Nov´ak, Gener´ator interaktivn´ıch komponent eLearningov´ ych kurz˚ u. Bakal´aˇrsk´a pr´ace. Brno, 2011. Bakal´aˇrsk´a pr´ace ˇreˇs´ı tvorbu aplikace pro generov´an´ı pˇredpˇripraven´ ych elearningov´ ych komponent, kter´e slouˇz´ı pro zv´ yˇsen´ı interkativity kurzu a souˇcasnˇe umoˇzn ˇuj´ı ovˇeˇren´ı z´ıskan´ ych znalost´ı pomoc´ı interaktivn´ıch prvk˚ u v HTML str´ance. Obsahuje n´avrh a implementaci gener´atoru tˇechto interaktivn´ıch kv´ız˚ u. Kl´ıˇ cov´ a slova e-learning, interaktivn´ı u ´lohy, webov´a aplikace
6
OBSAH
Obsah ´ 1 Uvod a c´ıl pr´ ace ´ 1.1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 C´ıl pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Souˇ casn´ y stav 2.1 E-learningov´e kv´ızy . . . . 2.1.1 Kˇr´ıˇzovka . . . . . . 2.1.2 Tahac´ı pˇriˇrazov´an´ı 2.1.3 Pˇretahov´an´ı slov do 2.1.4 Tahac´ı tˇr´ıdˇen´ı . . .
. . . . . . . . . . . . textu . . . .
. . . . .
. . . . .
3 Metodika zpracov´ an´ı 3.1 Technologie pro implementaci . . . . 3.1.1 DHTML . . . . . . . . . . . . 3.1.2 V´ ybˇer JS knihovny . . . . . . 3.1.3 V´ ybˇer programovac´ıho jazyka 3.1.4 V´ ybˇer frameworku . . . . . . 3.1.5 V´ ybˇer datab´azov´eho syst´emu
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
4 V´ ysledky 4.1 N´avrh aplikace pro generov´an´ı u ´loh . . . . 4.1.1 N´avrh struktury datab´aze . . . . . 4.1.2 N´avrh struktury presenter˚ u . . . . 4.2 Implementace aplikace . . . . . . . . . . . 4.2.1 Adres´aˇrov´a struktura . . . . . . . . 4.2.2 Implementace u ´loh v jQuery . . . . 4.2.3 Funkˇcn´ı n´aplˇ n presenter˚ u. . . . . . 4.2.4 Zpracov´an´ı uˇzivatelsk´ ych nastaven´ı 4.2.5 Vykreslov´an´ı u ´lohy . . . . . . . . . 4.2.6 Zp˚ usob generov´an´ı u ´lohy . . . . . . 4.3 Demonstrov´an´ı funkˇcnosti aplikace . . . . 4.3.1 Kˇr´ıˇzovka – DBS . . . . . . . . . . . 4.3.2 Tahac´ı pˇriˇrazov´an´ı – ˇca´sti dotazu .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
7 7 8
. . . . .
9 10 10 11 13 14
. . . . . .
17 17 17 20 21 22 24
. . . . . . . . . . . . .
26 26 26 27 30 30 31 34 40 41 42 45 45 45
5 Diskuze 47 5.1 Nedostatky implementace . . . . . . . . . . . . . . . . . . . . . . . . 47 5.2 Moˇznosti nav´az´an´ı na pr´aci . . . . . . . . . . . . . . . . . . . . . . . 47 6 Z´ avˇ er
49
A Pˇ r´ıloha 1
50
B Literatura
51
1
´ ´ UVOD A C´ıL PRACE
1 1.1
7
´ Uvod a c´ıl pr´ ace ´ Uvod
V dneˇsn´ı dobˇe, kdy se lidstvo nach´az´ı v tzv. informatick´em vˇeku, je objem veˇsker´eho lidsk´eho vˇedˇen´ı natolik enormn´ı, ˇze je nemysliteln´e aby se vˇsechny tyto znalosti dostaly ke vˇsem lidem na naˇs´ı planetˇe. Jiˇz od narozen´ı se vˇsichni uˇc´ıme nov´ ym a nov´ ym vˇecem a k naˇsemu pozn´av´an´ı a objevov´an´ı okoln´ıho svˇeta n´am pom´ahaj´ı nejdˇr´ıve rodiˇce a pozdˇeji ˇsirˇs´ı spoleˇcnost. Touto cestou vˇsak nelze dos´ahnout vˇsech vˇedomost´ı, kter´e jsou potˇreba pro plnohodnotn´e zapojen´ı do lidsk´e spoleˇcnosti a veden´ı norm´aln´ıho ˇzivota. Proto je kaˇzd´e d´ıtˇe zaˇrazeno do povinn´eho z´akladn´ıho vzdˇel´av´an´ı. Zde se mu vˇenuj´ı pedagogov´e a cel´ y pr˚ ubˇeh studia m´a jasnˇe dan´ y sled. Jako zdroje vˇedomost´ı jsou pouˇz´ıv´any uˇcebnice, znalosti vyuˇcij´ıc´ıch, nauˇcn´e filmy, v posledn´ı dobˇe i informaˇcn´ı technologie atp. Nabyt´e znalosti jsou vˇsak kaˇzd´emu ˇclovˇeku t´emˇeˇr k niˇcemu, pokud je nedok´aˇze patˇriˇcnˇe pouˇz´ıt. K procviˇcen´ı z´ıskan´ ych znalost´ı jsou tedy potˇreba nejr˚ uznˇejˇs´ı u ´lohy, pˇr´ıklady a hˇr´ıˇcky, jejichˇz u ´spˇeˇsn´e dokonˇcen´ı z´avis´ı jednak na nabyt´ı patˇriˇcn´ ych dovednost´ı, ale pˇredevˇs´ım na jejich spr´avn´em a efektivn´ım vyuˇzit´ı. Efektivita uˇcen´ı souvis´ı s inovativn´ımi metodami a formami pr´ace a s vyuˇzit´ım modern´ıch informaˇcn´ıch technologi´ı ve v´ yuce. Veˇsker´e znalosti, kter´e byly a doposud st´ale jsou uloˇzeny ve nejr˚ uznˇejˇs´ı fyzick´e podobˇe, nejˇcastˇeji pravdˇepodobnˇe formou psan´ ych knih, je tˇreba efektivnˇe ˇs´ıˇrit a poskytnout je tak co nˇejvˇetˇs´ımu poˇctu lid´ı na svˇetˇe. Pokud nebude zajiˇstˇeno pˇred´av´an´ı tˇechto znalost´ı mladˇs´ım generac´ım, v´ yvoj lidstva a jeho vˇedˇen´ı se zastav´ı. Jelikoˇz vˇedomosti uloˇzen´e ve fyzick´e podobˇe (resp. nosiˇce tˇechto vˇedomost´ı) nevyhnutelnˇe podl´ehaj´ı zk´aze, je tˇreba je neust´ale obnovovat a vym´ yˇslet st´ale nov´e a lepˇs´ı zp˚ usoby pro uchov´an´ı cenn´ ych znalost´ı. Jak bylo zm´ınˇeno v´ yˇse, dneˇsn´ı doba patˇr´ı informaˇcn´ım technologi´ım a ty nab´ızej´ı neoceniteln´ y zp˚ usob, jak informace ukl´adat, sd´ılet a ˇs´ıˇrit v digit´aln´ı podobˇe. Obrovsk´ y v´ yznam m´a celosvˇetov´a s´ıt’ Internet, kter´a je oznaˇcov´ana za studnu lidsk´eho vˇedˇen´ı“. ” Dostupn´e technologie, kter´e v´ ypoˇcetn´ı technika pˇrin´aˇs´ı, umoˇzn ˇuj´ı vytv´aˇret nepˇrebern´e mnoˇzstv´ı nejr˚ uznˇejˇs´ıch aplikac´ı. Do oblasti vzdˇel´av´an´ı si informaˇcn´ı technologie tak´e naˇsly svou cestu. D´ıky celosvˇetov´e s´ıti Internet m´ame moˇznost snadno sd´ılet obrovsk´e mnoˇzst´ı informac´ı, kter´e jsou lehce dostupn´e a relativnˇe snadno dohledateln´e. Pro zajiˇstˇen´ı urˇcit´e efektivnosti pˇri vzdˇel´av´an´ı pomoc´ı informaˇcn´ıch technologi´ı je nutn´e potˇrebn´ y obsah nˇejak´ ym zp˚ usobem shlukovat do logick´ ych celk˚ u. A tak, podobnˇe jako jsou ps´any uˇcebnice, jsou vytv´aˇreny tzv. e-learningov´e kurzy. Pod t´ımto pojmem si tedy lze pˇredstavit urˇcitou formu elektronick´e uˇcebnice, kter´a m´a za u ´kol prov´est studenta problematikou v urˇcit´e oblasti. Tyto kurzy mohou b´ yt autory vytv´aˇreny pomoc´ı program˚ u typu Content Management System (CMS), mezi jejichˇz hlavn´ı funkce patˇr´ı tvorba a u ´prava dokument˚ u – v tomto pˇr´ıpadˇe str´anek kurzu, jejich spr´ava a urˇcen´ı pˇr´ıstupnosti k tˇemto dokument˚ um. Hotov´ y kurz je po jeho vytvoˇren´ı n´aslednˇe pˇrenesen do aplikace typu Learning Management System (LMS), coˇz je syst´em pro ˇr´ızen´ı a spr´avu v´ yuky
1.2
C´ıl pr´ace
8
(Wikipedia, 2011). Mezi jeho hlavn´ı funkce patˇr´ı evidence a spr´ava ˇza´k˚ u, uˇcitel˚ u, kurz˚ u, test˚ u, spr´ava pˇr´ıstupov´ ych pr´av k e-learningov´emu obsahu nebo studijn´ıch pl´an˚ u. Velmi d˚ uleˇzit´ ym poˇzadavkem na tento syst´em je zajiˇstˇen´ı snadn´eho zaˇclenˇen´ı kurz˚ u. Toho je doc´ıleno r˚ uzn´ ymi standardn´ımi form´aty e-learningov´eho obsahu, jako je napˇr. SCORM. CMS a LMS mohou b´ yt souˇca´st´ı jedn´e aplikace – pˇr´ıkladem m˚ uˇze b´ yt open source projekt moodle.
1.2
C´ıl pr´ ace
C´ılem pr´ace je navrhnout a implementovat aplikaci, kter´a bude slouˇzit pro generov´an´ı vybran´ ych interaktivn´ıch e-learningov´ ych u ´loh. Gener´ator by mˇel poskytovat co nejvˇetˇs´ı variabilitu nastaven´ı funkˇcn´ıch moˇznost´ı pˇri vytv´aˇren´ı konkr´etn´ıch u ´loh. Uˇzivatel´e, kteˇr´ı budou do aplikace pˇristupovat, si budou moci jednotliv´e vytvoˇren´e u ´lohy ukl´adat, aby se k nim pozdˇeji mohli vracet a upravovat je. Autoˇri jednotliv´ ych u ´loh budou m´ıt moˇznost si v´ yslednou str´anku uloˇzit ve formˇe HTML souboru na disk, kter´ y pak mohou poskytnout progr´amator˚ um k dokonˇcen´ı, vytvoˇren´ı nebo upraven´ı specifick´ ych poˇzadavk˚ u na funkcionalitu dan´e u ´lohy. Spr´avn´a funkˇcnost aplikace bude demostrov´ana na nˇekolika vytvoˇren´ ych uk´azkov´ ych komponent´ach, jejichˇz tematick´e zamˇeˇren´ı bude souviset s autorov´ ym studiem.
2
ˇ ´ STAV SOUCASN Y
2
9
Souˇ casn´ y stav
Pokud se pod´ıv´ame na podobu dneˇsn´ıch e-learningov´ ych kurz˚ u zejm´ena z hlediska jejich schopnosti poskytovat interaktivn´ı obsah, kter´ y je schopn´ y uˇzivateli zajistit mnohem pˇr´ıvˇetivˇejˇs´ı z´aˇzitek jednak ze samotn´e v´ yuky a vstˇreb´av´an´ı potˇrebn´eho obsahu, ale i z ovˇeˇrov´an´ı z´ıskan´ ych znalost´ı pomoc´ı nejr˚ uznˇejˇs´ıch u ´loh, test˚ u nebo kv´ız˚ u, tak zjist´ıme, ˇze vˇetˇsinu kurz˚ u lze podle pouˇzit´ ych technologi´ı rozdˇelit na dva hlavn´ı typy. Prvn´ım jsou interaktivn´ı kurzy, kter´e jsou vytvoˇreny pomoc´ı Flashe. Flash umoˇzn ˇuje vytv´aˇret vysoce interaktivn´ı a animovan´ y obsah a zahrnuje i podporu pro v´ yvoj e-learningov´eho materi´alu. Pouˇzit´ı Flashe m´a ovˇsem i sv´e negativn´ı str´anky, mezi kter´e patˇr´ı napˇr. moˇzn´e prodlouˇzen´ı doby naˇc´ıt´an´ı obsahu, sloˇzitˇejˇs´ı aktualizace atp. Druh´ ym pomysln´ ym proudem jsou e-learningov´e kurzy vytv´aˇren´e pomoc´ı standardn´ıch technologi´ı pouˇz´ıvan´ ych pro vytv´aˇren´ı obsahu webov´ ych str´anek, kter´ ymi jsou statick´e HTML str´anky a kask´adov´e styly. Potˇrebn´e interaktivity je moˇzn´e n´aslednˇe dos´ahnout pouˇzit´ım skriptovac´ıho jazyka JavaScriptu. Typick´ ym pˇr´ıkladem je souˇcasn´a podoba e-learningov´ ych kurz˚ u na Mendelovˇe univerzitˇe v Brnˇe. Veˇrejn´a knihovna tˇechto kurz˚ u je dostupn´a skrze univerzitn´ı informaˇcn´ı syst´em na adrese http://is.mendelu.cz/eknihovna/?lang=cz. Jednotliv´e e-learningov´e opory maj´ı podobu statick´ych HTML str´anek a sv´ ym pojet´ım opravdu pˇripom´ınaj´ı elektronickou uˇcebnici, kter´a vyuˇz´ıv´a z´akladn´ıch prostˇredk˚ u pro usnadˇen´ı konzumace obsahu, jako jsou hypertextov´e odkazy pro snadnˇejˇs´ı navigaci nebo jednoduch´e testov´e ot´azky realizovan´e pomoc´ı formul´aˇr˚ u. Obdobnˇe je na tom i e-learningov´ y port´al Masarykovy univerzity. Ten nab´ız´ı e-learningov´e kurzy, kter´e maj´ı tak´e podobu statick´ ych HTML str´anek (elektronick´a kn´ıˇzka) s testov´ ymi u ´lohami zakomponovan´ ymi v podobˇe formul´aˇr˚ u. Do nˇekter´ ych kurz˚ u jsou jiˇz zaˇclenˇeny i dalˇs´ı interaktivn´ı prvky v podobˇe animac´ı a multimedi´aln´ıho obsahu, kter´e jsou ovˇsem vytvoˇreny ve Flashi. Uk´azkov´ ym pˇr´ıkladem je kurz Rovinn´e ˇrezy 1 mnohostˇen˚ u. V tomto kurzu jsou teoretick´e znalosti prezentov´any obyˇcejn´ ym textem, vhodnˇe doplnˇen´ ym o obr´azky. Kurz obsahuje i zad´an´ı u ´loh k procviˇcen´ı vˇcetnˇe jejich ˇreˇsen´ı (ke st´ahnut´ı v PDF). Nˇekter´e z u ´loh jsou ovˇsem ˇreˇseny pˇr´ımo v kurzu a toto ˇreˇsen´ı je studentovi prezentov´ano flashovou animac´ı, kterou lze pohodlnˇe krokovat. V zahraniˇc´ı je celkov´ y stav e-learningu prakticky podobn´ y. Pokud se pod´ıv´ame napˇr. na zahraniˇcn´ı v´ yzkumnou univerzitu MIT http://ocw.mit.edu/courses/, zjist´ıme, ˇze veˇsker´e kurzy jsou rozdˇeleny do nejr˚ uznˇejˇs´ıch kategori´ı a kaˇzd´ y konkr´etn´ı kurz je nˇejak´ ym zp˚ usobem oznaˇcen, pˇriˇcemˇz kaˇzd´e oznaˇcen´ı signalizuje pˇr´ıtomnost urˇcit´eho druhu materi´alu. Drtiv´a vˇetˇsina tˇechto materi´al˚ u je ovˇsem ke staˇzen´ı pouze v podobˇe PDF souboru nebo je k dispozici v multimedi´aln´ı formˇe (obr´azky, video). Interaktivn´ı prvky zde bohuˇzel chyb´ı. Co se t´ yˇce stavu programov´ ych gener´ator˚ u interaktivn´ıch prvk˚ u pro vzdˇel´avac´ı obsah e-learningu, v souˇcasn´e dobˇe jiˇz existuj´ı n´astroje pro vytv´aˇren´ı e-learningov´ ych 1
Dostupn´e na http://is.muni.cz/elportal/estud/pedf/js09/mnohosteny/web/index.html.
2.1
E-learningov´e kv´ızy
10
u ´loh jako takov´ ych. Pˇr´ıkladem m˚ uˇze b´ yt jiˇz dˇr´ıve zm´ınˇen´ y syst´em moodle, kter´ y kromˇe spr´avy v´ yukov´eho obsahu umoˇzn ˇuje i vytv´aˇren´ı e-learningov´ ych kv´ız˚ u. Jejich modifikovatelnost z hlediska funkˇcn´ıch moˇznost´ı tˇechto kv´ız˚ u ovˇsem nen´ı nijak pestr´a. Existuj´ı i komerˇcn´ı ˇreˇsen´ı, ale jejich moˇznosti nebylo moˇzn´e z finanˇcn´ıho hlediska otestovat.
2.1
E-learningov´ e kv´ızy
V jednotliv´ ych podkapitol´ach budou rozebr´any pˇredpˇripraven´e e-learningov´e kv´ızy, kter´e byly hlavn´ım podkladem pro zpracov´an´ı t´eto pr´ace. Vˇsechny u ´lohy byly dod´any vedouc´ım pr´ace, kter´ y tyto interaktivn´ı kv´ızy vytvoˇril v r´amci sv´eho pˇr´ıspˇevku Interaktivn´ı eLearningov´y obsah na konferenci Informatika (Jedliˇcka, 2008). 2.1.1
Kˇr´ıˇ zovka
Jak n´azev kv´ızu napov´ıd´a, jedn´a se o nejjednoduˇsˇs´ı typ kˇr´ıˇzovky, ve kter´e jsou doplˇ novan´a slova um´ıstˇena pod sebou do ˇra´dk˚ u a zarovn´ana tak, aby p´ısmena jedˇ siteli je k dispozici notliv´ ych slov v urˇcen´em sloupci tvoˇrila v´ yslednou tajenku. Reˇ syst´em n´apovˇedy, kter´ y ve zvolen´em ˇra´dku kˇr´ıˇzovky napov´ı n´asleduj´ıc´ı p´ısmeno. Samotn´e vyplˇ nov´an´ı kˇr´ıˇzovky prob´ıh´a vˇzdy zvolen´ım urˇcit´eho ˇra´dku v kˇr´ıˇzovce pomoc´ı myˇsi a n´asledn´ ym psan´ım odpovˇedi na kl´avesnici, kdy jsou jednotliv´a p´ısmena automaticky doplˇ nov´ana do kˇr´ıˇzovky. V pˇr´ıpadˇe pˇreklepu je moˇzn´e vepsan´a p´ısmena mazat pomoc´ı klav´esy backspace nebo jej´ı kombinace s kl´avesou CTRL (z´avis´ı na pouˇzit´em prohl´ıˇzeˇci). Technick´ e ˇreˇsen´ı ´ e prvn´ı je zobStr´anka s kv´ızem je rozdˇelena na nˇekolik pomysln´ ych ˇc´ast´ı. Uplnˇ razen postup, jak´ ym lze danou u ´lohu ˇreˇsit a ovl´adat. V HTML k´odu je zaps´an tagem pro odstavec se tˇr´ıdou blok. N´asleduje obalovac´ı tag div, kter´ y obsahuje tabulku pˇredstavuj´ıc´ı samotnou kˇr´ıˇzovku. Jeden ˇra´dek tabulky pˇredstavuje jeden ˇra´dek kˇr´ıˇzovky, pˇriˇcemˇz kaˇzd´ y ˇr´adek je oznaˇcen identifik´atorem, kter´ y urˇcuje, o kolik´at´ y ˇra´dek kˇr´ıˇzovky se jedn´a. Ten slouˇz´ı ke snadn´emu vyhled´av´an´ı element˚ u v DOM stromu. Buˇ nky v kaˇzd´em ˇra´dku tabulky pak pˇredstavuj´ı jednotliv´a pol´ıˇcka pro z´apis p´ısmen. Ne kaˇzd´a buˇ nka je ovˇsem urˇcena pro z´apis p´ısmen, protoˇze vyplˇ novan´a slova nemus´ı m´ıt (a zpravidla nemaj´ı) vˇzdy stejnou d´elku. Rozliˇsen´ı mezi buˇ nkou vyplˇ novanou a nevyplˇ novanou je zajiˇstˇeno r˚ uzn´ ymi barvami. Buˇ nky, do kter´ ych jsou vyplˇ nov´ana p´ısmena, jsou nav´ıc opatˇreny identifik´atorem ve tvaru radekXbY, kde X pˇredstavuje ˇc´ıslo ˇr´adku, a Y ˇc´ıslo p´ısmene v dan´em ˇr´adku. Pod kˇr´ıˇzovkou je um´ıstˇen seznam legend. V HTML k´odu je realizov´an ˇc´ıslovan´ ym seznamem a kaˇzd´a poloˇzka seznamu tak pˇr´ısluˇs´ı ke stejnˇe oˇc´ıslovan´emu ˇr´adku kˇr´ıˇzovky. Poloˇzka obsahuje text samotn´e legendy, kter´ y m´a napovˇedˇet znˇen´ı slova doplˇ novan´eho do kˇr´ıˇzovky. Za textem legendy se pak nach´az´ı ˇra´dkov´ y element span, kter´ y slouˇz´ı k zobrazen´ı n´apovˇedy pro dan´ y ˇra´dek. Za seznamem legend je zobrazena hlavn´ı legenda cel´e kˇr´ıˇzovky,
2.1
E-learningov´e kv´ızy
11
pˇriˇcemˇz v samotn´em textu legendy je m´ısto znˇen´ı tajenky zobrazen odpov´ıdaj´ıc´ı poˇcet teˇcek. JavaScript, obstar´avaj´ıc´ı funkcionalitu cel´e u ´lohy, je tak´e rozdˇelen na celkem tˇri ˇc´asti. V prvn´ı se deklaruj´ı potˇrebn´e promˇenn´e. Patˇr´ı sem napˇr. velikosti bunˇek kˇr´ıˇzovky a p´ısma, zbarven´ı bunˇek, nebo texty alertov´ ych hl´aˇsek. Deklaruj´ı se i promˇenn´e, obsahuj´ıc´ı verz´alkami zapsan´e odpovˇedi pro jednotliv´e ˇra´dky. D˚ uleˇzit´e je, ˇze u ˇr´adk˚ u, ve kter´ ych odpovˇed’ nezaˇc´ın´a hned v prvn´ı buˇ nce, je nutn´e zachovat odpov´ıdaj´ıc´ı poˇcet mezer. Zaˇc´ın´a-li tedy odpovˇed na ˇr´adku aˇz v tˇret´ı buˇ nce, mus´ı b´ yt v promˇenn´e s odpovˇed´ı uloˇzen ˇretˇezec o dvou mezer´ach a samotn´e odpovˇedi (__ODPOVˇ Eˇ D). V druh´e ˇca´sti JS jsou deklarov´any potˇrebn´e funkce a dalˇs´ı promˇenn´e. Zjiˇst’uje se zde celkov´a ˇs´ıˇrka kˇr´ıˇzovky, kter´a odpov´ıd´a ˇs´ıˇrce nejdelˇs´ıho slova. V cyklu se tedy proch´az´ı vˇsechny odpovˇedi a hled´a se ta nejdelˇs´ı. V tom sam´em cyklu se jeˇstˇe nastavuj´ı nˇekter´e dalˇs´ı promˇenn´e, resp. ukl´adaj´ı se do jiˇz vytvoˇren´ ym pol´ı. Ve tˇret´ı ˇca´sti se uˇz nach´az´ı samotn´e vytvoˇren´ı tabulky pˇredstavuj´ıc´ı kˇr´ıˇzovku a jej´ı vloˇzen´ı do str´anky. Z tohoto plyne, ˇze i samotn´e zobrazen´ı kv´ızu je zcela z´avisl´e na JavaScriptu a kˇr´ıˇzovka se bez nˇej nezobraz´ı. Samotn´e vytvoˇren´ı tabulky je pomˇernˇe jednoduch´e. Opˇet se v cyklu proch´az´ı vˇsechny odpovˇedi. Ze vˇseho nejdˇr´ıv se dopln´ı na konec odpovˇed´ı odpov´ıdaj´ıc´ı poˇcet mezer, aby vˇsechny odpovˇedi mˇely stejnou d´elku, tedy dˇr´ıve zjiˇstˇenou ˇs´ıˇrku kˇr´ıˇzovky. Pak se jiˇz vytv´aˇr´ı a vkl´adaj´ı elementy ˇr´adku tabulky a prvn´ı buˇ nka s ˇc´ıslem ˇra´dku. V dalˇs´ım cyklu se vytv´aˇr´ı uˇz samotn´e buˇ nky pro jednotliv´a p´ısmena a buˇ nky doplˇ nuj´ıc´ı ˇs´ıˇrku ˇra´dku. Podle toho o jakou buˇ nku jde, se nastavuj´ı potˇrebn´e vlastnosti jako barva pozad´ı nebo ˇrez p´ısma (tuˇcn´ y pro sloupec tajenky). Po vytvoˇren´ı cel´eho ˇra´dku se nav´aˇze odposlouch´av´an´ı ud´alosti, kter´e po kliknut´ı na ˇra´dek zavol´a metodu pro jeho oznaˇcen´ı. Pot´e se uˇz jen ˇr´adek vloˇz´ı do str´anky. N´asleduje nav´az´an´ı odposlechu ud´alosti stisknut´ı tlaˇc´ıtka na kl´avesnici. Odposlouch´av´a se pro cel´e okno prohl´ıˇzeˇce. Pˇri kaˇzd´em stisknut´ı se vol´a metoda klavesnice, kter´a obstar´av´a n´asledn´e vkl´ad´an´ı p´ısmen ´ e jako posledn´ı vˇec se prov´ad´ı detekce do odpov´ıdaj´ıc´ıch pol´ıˇcek v kˇr´ıˇzovce. Uplnˇ prohl´ıˇzeˇce a nastaven´ı textu alertov´e hl´aˇsky. Je to z d˚ uvodu maz´an´ı ˇspatnˇe vyplnˇen´ ych p´ısmen pomoc´ı kl´avesy backspace. V nˇekter´ ych prohl´ıˇzeˇc´ıch doch´az´ı pˇri jej´ım stisknut´ı k pˇrechodu na pˇredchoz´ı str´anku. Pro tyto pˇr´ıpady je tˇreba pouˇz´ıt kl´avesovou kombinaci CTRL + backspace. Podle pouˇzit´eho prohl´ıˇzeˇce se tedy nastav´ı spr´avn´e znˇen´ı alertu. 2.1.2
Tahac´ı pˇriˇrazov´ an´ı
V tomto e-learningov´em kv´ızu m´a ˇreˇsitel za u ´kol pˇriˇradit jednotliv´e odpovˇedi k logicky odpov´ıdaj´ıc´ım kl´ıˇc˚ um v tabulce, pˇriˇcemˇz ke kaˇzd´emu kl´ıˇci n´aleˇz´ı vˇzdy jedna odpovˇed’. Pˇriˇrazov´an´ı prob´ıh´a kliknut´ım a drˇzen´ım lev´eho tlaˇc´ıtka myˇsi na odpovˇed’ a jej´ım n´asledn´ ym pˇretaˇzen´ım pohybem myˇsi nad oblast vedle kl´ıˇce, kde se odpovˇed’ puˇstˇen´ım lev´eho tlaˇc´ıtka upust´ı. Pˇriˇrazov´an´ı je ihned vyhodnocov´ano a v pˇr´ıpadˇe spr´avn´eho um´ıstˇen´ı je odpovˇed’ zanech´ana na m´ıstˇe. V opaˇcn´em pˇr´ıpadˇe je vr´acena
2.1
E-learningov´e kv´ızy
12
ˇ siteli je poˇc´ıt´ana zpˇet do seznamu, odkud m˚ uˇze b´ yt opˇet um´ıstˇena k jin´emu kl´ıˇci. Reˇ celkov´a u ´spˇeˇsnost a po spr´avn´em pˇriˇrazen´ı vˇsech odpovˇed´ı je jeho u ´spˇeˇsnost zobrazena. Technick´ e ˇreˇsen´ı Str´anka s kv´ızem zobrazuje nejdˇr´ıve zad´an´ı samotn´eho u ´kolu. Jeho zobrazen´ı je realizov´ano tagem pro odstavec s pˇriˇrazenou tˇr´ıdou u ´kol. Hned pod zad´an´ım se nach´az´ı nesetˇr´ıdˇen´ y seznam, jehoˇz poloˇzkami jsou jednotliv´e odpovˇedi. Kaˇzd´a poloˇzka m´a nastaven´ y identifik´ator, kter´ y urˇcuje, k jak´emu kl´ıˇci odpovˇed’ spr´avnˇe patˇr´ı. Toto urˇcen´ı m´a tvar itXem, kde X je ˇc´ıslo spr´avn´eho kl´ıˇce. Poloˇzky obsahuj´ı obalovac´ı ˇra´dkov´ y element span, kter´ y m´a opˇet nastaven´ y stejn´ y identifik´ator jako poloˇzka seznamu, jenom bez suffixu em. V tomto elementu je jiˇz um´ıstˇen samotn´ y text odpovˇedi. Cel´ y seznam je jeˇstˇe um´ıstˇen v obalovac´ım blokov´em elementu div s identifik´atorem skryt, protoˇze po splnˇen´ı u ´lohy se cel´ y seznam skryje. Pod seznamem je jiˇz um´ıstˇena tabulka o dvou sloupc´ıch, prvn´ı obsahuje jednotliv´e kl´ıˇce a druh´ y pˇredstavuje oblast, kam se pˇri pˇretahov´an´ı um´ıst’uj´ı odpovˇedi. Buˇ nky pro odpovˇedi maj´ı nastaven´ y identifik´ator ve tvaru bunka_X, kde X je ˇc´ıslo buˇ nky. Tento identifik´ator se ve vyhodnocovac´ı metodˇe pot´e porovn´av´a se identifik´atorem pˇriˇrazen´e odpovˇedi. JavaScript je opˇet rozdˇelen na nˇekolik ˇc´ast´ı. Hned prvn´ı ˇca´st je naps´ana v extern´ım JS souboru. Ten obsahuje vˇsechny potˇrebn´e funkce, kter´e zajiˇstuj´ı rozpohy” bov´an´ı“ pˇretahovac´ıch odpovˇed´ı. Tento extern´ı soubor se pouˇz´ıv´a i v dalˇs´ıch kv´ızech, kde se opˇet pˇriˇrazuje pˇretahov´an´ım pomoc´ı myˇsi. Deklarac´ı vˇsech funkc´ı, kter´e realizuj´ı pˇretahovatelnost element˚ u, pˇredch´az´ı opˇet zjiˇstˇen´ı prohl´ıˇzeˇce. Tentokr´at je to z d˚ uvodu zobrazen´ı alertov´e hl´aˇsky, kter´a informuje ˇreˇsitele o celkov´e spustitelnosti kv´ızu v jeho prohl´ıˇzeˇci. V k´odu jsou vyuˇz´ıv´any metody standardu W3C DOM a pokud je prohl´ıˇzeˇc nepodporuje, zobraz´ı se chybov´a hl´aˇska informuj´ıc´ı o tom, ˇze dokument nelze spr´avnˇe zobrazit. V druh´e ˇc´asti je deklarov´ano nˇekolik promˇenn´ ych jako poˇcet pokus˚ u a barvy po’ zad´ı bunˇek tabulky. N´asleduje implementace nˇekolika funkc´ı zajiˇst uj´ıc´ıch potˇrebnou funkcionalitu pro tento konkr´etn´ı kv´ız, napˇr. metody pro zruˇsen´ı pˇretahovatelnosti odpovˇedi po jejich spr´avn´em um´ıstˇen´ı, metoda zv´ yrazˇ nuj´ıc´ı oblast, nad kterou se zrovna nach´az´ı pˇretahovan´a odpovˇed anebo vyhodnocovac´ı metoda. Jej´ı ˇreˇsen´ı nen´ı nijak komplikovan´e. Nejdˇr´ıve se vyhled´a zvolen´ y c´ıl, tj. oblast, nad kterou ’ byla odpovˇed upuˇstˇena. Pokud zvolen´ y c´ıl existuje, pˇristoup´ı se k vyhodnocen´ı spr´avnosti um´ıstˇen´ı a nav´ yˇs´ı se poˇcitadlo pokus˚ u. Pokud bylo um´ıstˇen´ı spr´avn´e, odpovˇed’ se vloˇz´ı do tabulky vedle kl´ıˇce a skryje se poloˇzka v seznamu odpovˇed´ı. Z´aroveˇ n se nav´ yˇs´ı poˇcitadlo spr´avn´ ych um´ıstˇen´ı. V opaˇcn´em pˇr´ıpadˇe se zobraz´ı zpr´ava o pˇriˇrazen´ı ke ˇspatn´emu kl´ıˇci. D´ale se ve vyhodnocovac´ı metodˇe prov´ad´ı pˇrepoˇc´ıt´av´an´ı a nastavov´an´ı spr´avn´ ych souˇradnic pˇri pˇretahov´an´ı odpovˇedi v oknˇe prohl´ıˇzeˇce. Po spr´avn´em um´ıstˇen´ı posledn´ı odpovˇedi se zobraz´ı zpr´ava s celkovou u ´spˇeˇsnost´ı pˇri plnˇen´ı kv´ızu a skryje se seznam s odpovˇed’mi.
2.1
E-learningov´e kv´ızy
13
V posledn´ı ˇc´asti jsou pouze nastavov´any promˇenn´e c´ıl˚ u, kter´e jsou vloˇzeny do pole c´ıl˚ u, nastaven´ı pole ˇreˇsen´ı a rozpohybov´an´ı“ odpovˇed´ı. Jako c´ıle jsou ukl´ad´any ” elementy DOM stromu pˇredstavuj´ıc´ı buˇ nky druh´eho sloupce tabulky s kl´ıˇci. Jako prvky pole ˇreˇsen´ı jsou ukl´ad´any nastaven´e c´ıle, kter´e jsou v poli um´ıstˇeny pod kl´ıˇcem, jenˇz odpov´ıd´a identifik´atoru uveden´eho u odpovˇedi (reseni["itX"] = cil_X). 2.1.3
Pˇretahov´ an´ı slov do textu
Pˇri plnˇen´ı tohoto kv´ızu m´a ˇreˇsitel za u ´kol doplˇ novat do souvisl´eho textu chybˇej´ıc´ı slova. Doplˇ nov´an´ı je realizov´ano pˇretahov´an´ım chybˇej´ıc´ıch slov ze seznamu na pr´azdn´a m´ısta v textu. Po um´ıstˇen´ı slova do textu doch´az´ı ihned k vyhodnocen´ı spr´avnosti um´ıstˇen´ı. Pˇri spr´avn´em um´ıstˇen´ı je slovo vloˇzeno do textu a odebr´ano ze seznamu. V opaˇcn´em pˇr´ıpadˇe je vr´aceno do seznamu, odkud m˚ uˇze b´ yt znova ˇ siteli je poˇc´ıt´ana celkov´a u um´ıstˇeno na jin´e m´ısto v textu. Reˇ ´spˇeˇsnost pˇri pˇriˇrazov´an´ı slov a po spr´avn´em um´ıstˇen´ı posledn´ıho slova je u ´spˇeˇsnost zobrazena. Technick´ e ˇreˇsen´ı Na str´ance s kv´ızem je zobrazeno zad´an´ı u ´lohy stejnˇe jako v pˇredchoz´ıch pˇr´ıpadech pomoc´ı tagu odstavce s pˇriˇrazenou tˇr´ıdou ukol. Za zad´an´ım n´asleduje souvisl´ y text s pr´azdn´ ymi m´ısty, do kter´ ych se umist’uj´ı chybˇej´ıc´ı slova. Cel´ y text je obalen tagem pro odstavec se tˇr´ıdou blok. Pr´azdn´a m´ısta pro chybˇej´ıc´ı slova jsou v textu vyznaˇcena ˇra´dkov´ ym obalovac´ım elementem span, kter´ y pro n´azornost obsahuje nˇekolik teˇcek, kter´e ale sv´ ym poˇctem neodpov´ıdaj´ı d´elce slova patˇr´ıc´ıho na dan´e m´ısto v textu. Nav´ıc maj´ı pˇriˇrazen´ y identifik´ator span_X, kde X je poˇradov´e ˇc´ıslo pr´azdn´eho m´ısta. Pro lepˇs´ı viditelnost m´a m´ısto jeˇstˇe nastavenou barvu pozad´ı. Za textem se nach´az´ı seznam chybˇej´ıc´ıch slov. Tento seznam nen´ı v HTML zaps´an pomoc´ı elementu pro seznam, ale je jen obalen v blokov´em elementu div se tˇr´ıdou skryt. Slova v seznamu jsou zaps´ana v ˇr´adkov´em elementu span, kter´ y m´a nastaven´ y identifik´ator ve tvaru itemPresun_X, kde X je poˇradov´e ˇc´ıslo pr´azdn´eho m´ısta v textu, do kter´eho slovo patˇr´ı. Jako prvn´ı se v JavaScriptov´e ˇca´sti naˇc´ıt´a dˇr´ıve zm´ınˇen´ y extern´ı soubor obsa’ huj´ıc´ı funkce, kter´e zajiˇst uj´ı pˇretahovatelnost slov. N´asleduj´ı opˇet deklarace a nastaven´ı nˇekter´ ych promˇenn´ ych jako poˇcet pokus˚ u a barvy pozad´ı. Ani n´asleduj´ıc´ı funkce se pˇr´ıliˇs neliˇs´ı od pˇredchoz´ıho kv´ızu. Ve funkci pro vyhodnocen´ı spr´avnosti um´ıstˇen´ı slova jsou pouze mal´e odliˇsnosti, a to v nastaven´ı r˚ uzn´ ych vlastnost´ı. Ani v posledn´ı ˇc´asti se ˇreˇsen´ı neliˇs´ı, znovu jsou nastavov´any jednotliv´e c´ıle pro um´ıstˇen´ı slova, kter´e jsou um´ıstˇeny do pole c´ıl˚ u a do pole ˇreˇsen´ı, kde kl´ıˇc opˇet odpov´ıd´a identifik´atoru nastaven´emu u jednotliv´ ych slov, kter´a jsou znovu pˇr´ısluˇsnou metodou rozpohybov´ana“. ”
2.1
E-learningov´e kv´ızy
2.1.4
14
Tahac´ı tˇr´ıdˇ en´ı
´ Ukolem v tˇechto kv´ızech je roztˇr´ıdˇen´ı jednotliv´ ych odpovˇed´ı k logicky pˇr´ısluˇsn´ ym kl´ıˇc˚ um, pˇriˇcemˇz ke kl´ıˇc˚ um lze pˇriˇradit nˇekolik odpovˇed´ı. Tento typ kv´ızu existuje ve v´ıce variant´ach, kter´e se od sebe v nˇekter´ ych aspektech liˇs´ı. S okamˇ zit´ ym vyhodnocen´ım U kv´ızu s okamˇzit´ ym vyhodnocov´an´ım jsou skupiny, do kter´ ych se pˇriˇrazuj´ı jednotliv´e odpovˇedi, nav´ıc d´ale rozdˇeleny. Pˇriˇrazov´an´ı odpovˇed´ı tak prob´ıh´a celkem ve dvou os´ach. Horizont´alnˇe jsou odpovˇedi pˇriˇrazov´any k logicky odpov´ıdaj´ıc´ım kl´ıˇc˚ um a pak tak´e vertik´alnˇe do dalˇs´ıch skupin. Technick´ e ˇreˇsen´ı Na str´ance s kv´ızem je nejdˇr´ıve zobrazeno v odstavcov´em tagu s tˇr´ıdou ukol zad´an´ı u ´lohy. Za zad´an´ım n´asleduje nesetˇr´ıdˇen´ y seznam pˇriˇrazovan´ ych odpovˇed´ı. HTML struktura je stejn´a jako u kv´ızu tahac´ı pˇr´ıˇrazov´an´ı, tedy poloˇzka seznamu m´a nastaven identifik´ator ve tvaru itXem. Ta pak obsahuje span se stejn´ ym identif´atorem, pouze bez suffixu em, ve kter´em se nach´az´ı samotn´ y text odpovˇedi. Pod seznamem odpovˇed´ı je um´ıstˇena tabulka, do kter´e se pˇriˇrazuj´ı jednotliv´e odpovˇedi. Vˇsechny kl´ıˇce se nach´az´ı v prvn´ım sloupci a v prvn´ım ˇr´adku tabulky. Kaˇzd´a z bunˇek, do kter´ ych lze um´ıstit odpovˇed’, m´a nastaven idnetifik´ator ve tvaru bunka_X. JavaScriptov´e ˇreˇsen´ı je zcela totoˇzn´e s kv´ızem tahac´ ı pˇ riˇ razov´ an´ ı. Jedin´ y rozd´ıl je v posledn´ı ˇc´asti, kdy se do pole ˇreˇsen´ı na r˚ uzn´e kl´ıˇce ukl´ad´a stejn´ y c´ıl, protoˇze u tohoto kv´ızu je moˇzn´e do stejn´e buˇ nky v tabulce um´ıstit v´ıce odpovˇed´ı. ˇ siteli je stejnˇe jako v pˇredchoz´ıch pˇr´ıpadech poˇc´ıt´an´a u Reˇ ´spˇeˇsnost pˇri pˇriˇrazov´an´ı odpovˇed´ı ke kl´ıˇc˚ um, kter´a je po spr´avn´em um´ıstˇen´ı posledn´ı odpovˇedi zobrazena. S vyhodnocen´ım na z´ avˇ er Pˇri ˇreˇsen´ı tohoto typu kv´ızu je ˇreˇsitel postaven pˇred u ´kol pˇriˇrazen´ı vˇsech dostupn´ ych odpovˇed´ı k pˇr´ısluˇsn´ ym kl´ıˇc˚ um. V uk´azkov´em pˇr´ıkladˇe kl´ıˇce pˇredstavovaly dvˇe skupiny, do kter´ ych mˇelo b´ yt roztˇr´ıdˇeno vˇetˇs´ı mnoˇzstv´ı odpovˇed´ı. Vyhodnocen´ı ˇreˇsen´ı lze spustit aˇz po pˇriˇrazen´ı vˇsech odpovˇed´ı. Pokud se ˇreˇsitel pokus´ı u ´lohu vyhodnotit dˇr´ıve, neˇz vˇsechny odpovˇedi roztˇr´ıd´ı, je na tento nedostatek upozornˇen odpov´ıdaj´ıc´ı zpr´avou. Pokud jsou vˇsechny odpovˇedi um´ıstˇeny, probˇehne vyhodnocen´ı jejich pˇriˇrazen´ı. V´ ysledky se zobraz´ı ve formˇe zpr´avy informuj´ıc´ı o tom, kolik odpovˇed´ı bylo pˇriˇrazeno spr´avnˇe a pod tabulkou se zobraz´ı druh´a tabulka se spr´avn´ ym ˇreˇsen´ım. Technick´ e ˇreˇsen´ı Na zaˇc´atku str´anky s kv´ızem je se nach´az´ı odstavcov´ y tag se tˇr´ıdou ukol obsahuj´ıc´ı textov´e zad´an´ı u ´kolu. Za n´ım n´asleduje seznam pˇriˇrazovan´ ych odpovˇed´ı,
2.1
E-learningov´e kv´ızy
15
kter´e jsou seˇrazeny abecednˇe. Znovu jsou poloˇzky seznamu opatˇreny identifik´atory itXem a obsahem poloˇzek je ˇra´dkov´ y element span se stejn´ ym identifik´atorem bez suffixu em, kter´ y uˇz obsahuje text odpovˇedi. Pod seznamem se nach´az´ı tabulka, kter´a je vertik´alnˇe rozdˇelena kl´ıˇci, ke kter´ ym jsou pˇriˇrazov´any odpovˇedi. Ty jsou tedy umist’ov´any do druh´eho ˇra´dku tabulky, zat´ımco v prvn´ım ˇra´dku jsou uvedeny kl´ıˇce. Pˇriˇrazen´ı odpovˇedi lze pˇred spuˇstˇen´ım vyhodnocen´ı kdykoliv zmˇenit. Tlaˇc´ıtko, kter´ ym m˚ uˇze uˇzivatel spustit vyhodnocen´ı u ´lohy, je um´ıstˇeno hned pod tabulkou. Na konci str´anky je pak vloˇzena totoˇzn´a tabulka, kter´a ovˇsem obsahuje spr´avn´e ˇreˇsen´ı. Tato je pˇred ˇreˇsitelem skryta pomoc´ı vlastnosti display: none a je mu zobrazena teprve po vyhodnocen´ı u ´lohy. Tlaˇc´ıtko pro vyhodnocen´ı se skryje. Obsluˇzn´ y JavaScript se opˇet pˇr´ıliˇs neliˇs´ı. Pro potˇreby tohoto kv´ızu jsou nav´ıc implementov´any nˇekter´e dodateˇcn´e funkce pro deaktivov´an´ı vˇsech poloˇzek seznamu, zjiˇstˇen´ı poˇctu spr´avnˇe um´ıstˇen´ ych odpovˇed´ı, funkci kontroluj´ıc´ı, zda jsou vˇsechny odpovˇedi um´ıstˇeny, nebo funkce pro pˇrid´av´an´ı a odeb´ır´an´ı element˚ u, kter´e jsou pouˇzity pˇri umist’ov´an´ı odpovˇed´ı do tabulky a jejich odeb´ır´an´ı v seznamu. Ve funkci, kter´a se spouˇst´ı pˇri umist’ov´an´ı odpovˇedi, se vyhodnocuje, zda byla odpovˇed’ um´ıstˇena do tabulky, a do kter´e z bunˇek byla um´ıstˇena. Pokud byla pˇriˇrazena do buˇ nky, uloˇz´ı se c´ıl, tj. buˇ nka tabulky, do pole umisteni pod kl´ıˇcem, kter´ y je totoˇzn´ y s identifik´atorem pˇriˇrazen´e odpovˇedi. Pˇri vyhodnocov´an´ı ˇreˇsen´ı cel´e u ´lohy se pak porovn´av´aj´ı pole reseni a pole umisteni. Pokud se pod stejn´ ym kl´ıˇcem nach´az´ı shodn´a buˇ nka, je ’ odpovˇed um´ıstˇena spr´avnˇe a nav´ yˇs´ı se tak poˇcitadlo spr´avn´ ych odpovˇed´ı. S okamˇ zit´ ym spr´ avn´ ym pˇriˇrazen´ım Pˇri plnˇen´ı tohoto kv´ızu mus´ı ˇreˇsitel pˇriˇrazovat hesla k jednotliv´ ym kl´ıˇc˚ um. Rozd´ıl oproti pˇredchoz´ımu typu u ´lohy spoˇc´ıv´a ve vyhodnocov´an´ı. Kontrola spr´avn´eho um´ıstˇen´ı odpovˇed´ı je prov´adˇena ihned a pokud nen´ı pˇriˇrazena spr´avnˇe, je ihned um´ıstˇena do spr´avn´e skupiny. U nˇekter´ ych hesel existuje moˇznost zobrazen´ı n´apovˇedy. Po dokonˇcen´ı u ´lohy je ˇreˇsiteli zobrazena jeho u ´spˇeˇsnost pˇri pˇriˇrazov´an´ı jednotliv´ ych hesel a na konci str´anky je zobrazen text tematicky doplˇ nuj´ıc´ı problematiku, kter´a se v r´amci u ´lohy procviˇcovala. Hesla lze do dan´e skupiny pˇriˇradit jejich upuˇstˇen´ım na obr´azek u kl´ıˇce. Pokud se heslo pˇri pˇretahov´an´ı nach´az´ı nad obr´azkem, je tento pro vˇetˇs´ı n´azornost ve str´ance vymˇenˇen za jin´ y (stejn´ y obr´azek s negativn´ımi barvami). Technick´ e ˇreˇsen´ı Na str´ance s kv´ızem se znovu nach´az´ı stejnˇe realizovan´e zad´an´ı u ´lohy. Pod n´ım je um´ıstˇena tabulka, kter´a je vertik´alnˇe rozdˇelena dvˇema kl´ıˇci, u kter´ ych jsou nav´ıc um´ıstˇeny ilustrativn´ı obr´azky. Pod kl´ıˇci jsou v druh´em ˇr´adku tabulky buˇ nky, do kter´ ych jsou um´ıst’ov´ana jednotliv´a hesla. Tyto buˇ nky maj´ı nastaven indentifik´ator i2_bunka_X_texty, buˇ nky s kl´ıˇci identifik´ator i2_bunka_X a obr´azek i2_bunka_X_obr. Pod tabulkou n´asleduje nesetˇr´ıdˇen´ y seznam hesel, jehoˇz poloˇzky obsahuj´ı ˇr´adkov´ y element span s identifik´atorem i2_X, jehoˇz obsahem je text hesla.
2.1
E-learningov´e kv´ızy
16
U hesel s n´apovˇedou n´asleduje za textem dalˇs´ı span, kter´ y po kliknut´ı na nˇej zobraz´ı n´apovˇedu. Za seznamem n´asleduje skryt´ y text, kter´ y se zobraz´ı po dokonˇcen´ı u ´lohy. Na u ´pln´em konci str´anky jsou skrytˇe vloˇzeny obr´azky s negativn´ımi barvami. D˚ uvodem je jejich pˇrednaˇcten´ı. Kdyby se do str´anky vloˇzily teprve v momentu, kdy se maj´ı poprv´e zobrazit, jejich zobrazen´ı by nebylo okamˇzit´e, ale bylo by zpoˇzdˇen´e o ˇcas jejich naˇcten´ı. V JavaScriptov´e ˇc´asti lze naj´ıt opˇet nˇekolik specifick´ ych odliˇsnost´ı pro tento konkr´etn´ı typ kv´ızu. Jsou zde deklarov´any speci´aln´ı promˇenn´e, jako pole uchov´av´aj´ıc´ı cesty k pouˇzit´ ym obr´azk˚ um a pole obsahuj´ıc´ı n´apovˇedy pro dan´a hesla, text n´apovˇedy je uchov´av´an pod kl´ıˇcem, kter´ y je shodn´ y s identifik´atorem uveden´ ym u hesla.
3
´ ı METODIKA ZPRACOVAN´
3
17
Metodika zpracov´ an´ı
Pro vytvoˇren´ı webov´e aplikace gener´atoru interaktivn´ıch komponent e-learningov´ ych kurz˚ u je tˇreba nejprve nastudovat technick´e ˇreˇsen´ı tˇechto u ´loh, na jehoˇz z´akladˇe mohou b´ yt n´aslednˇe vybr´any vhodn´e technologie pro implementaci samotn´e aplikace, vytvoˇren jej´ı n´avrh a n´aslednˇe provedena implementace.
3.1
Technologie pro implementaci
Pˇri tvorbˇe e-learningov´ ych komponent, kter´e jsou podkladem pro tuto pr´aci, byl kladen d˚ uraz na minimum n´arok˚ u na softwarov´e vybaven´ı poˇc´ıtaˇce potˇrebn´e ke spuˇstˇen´ı jednotliv´ ych kv´ız˚ u. Proto byly zvoleny takov´e technologie, kter´e jsou osvˇedˇcen´e, celosvˇetovˇe dostupn´e a rozˇs´ıˇren´e. V´ ybˇer technologi´ı pro implementaci aplikace, kter´a bude na z´akladˇe uˇzivatelsk´ ych vstup˚ u a nastaven´ı generovat nov´e kv´ızy se zadan´ ym obsahem, by mˇel v tˇechto technologi´ıch d´ale pokraˇcovat, pˇr´ıpadnˇe poskytnout adekv´atn´ı alternativu, kter´a by poskytla nov´e moˇznosti bez v´ yrazn´eho n´ar˚ ustu poˇzadavk˚ u na programov´e vybaven´ı potˇrebn´e k provozov´an´ı jak aplikace, tak i samotn´ ych e-learningov´ ych komponent. Pˇri implementaci samotn´e aplikace gener´atoru e-learningov´ ych kv´ız˚ u je tˇreba kl´ast d˚ uraz na pouˇzit´ı volnˇe dostupn´ ych technologi´ı, coˇz bylo jedn´ım z hlavn´ıch pˇredpoklad˚ u pˇri sestavov´an´ı pr´ace. Byly tedy vybr´any technologie pouˇzit´e jednak uˇz pˇri samotn´e realizaci dodan´ ych e-learningov´ ych komponent, jednak technologie slouˇz´ıc´ı pro implementaci samotn´eho gener´atoru. 3.1.1
DHTML
Oznaˇcen´ı DHTML, nebo tak´e Dynamic HTML, je pojem zastˇreˇsuj´ıc´ı skupinu technologi´ı, kter´e spoleˇcnˇe slouˇz´ı ke tvorbˇe interaktivn´ıch internetov´ ych str´anek. Tyto str´anky jsou ˇcasto obohaceny o nejr˚ uznˇejˇs´ı efekty, animace, automatick´e skr´ yv´an´ı a zobrazov´an´ı dalˇs´ıho obsahu, aktualizaci str´anek nebo zpracov´an´ı uˇzivatelsk´ ych vstup˚ u z formul´aˇre bez toho, aby se uˇzivateli str´anka aktualizovala a cel´a znovu naˇc´ıtala. Tˇechto na statick´ ych str´ank´ach tˇeˇzko dosaˇziteln´ ych vlastnost´ı je doc´ıleno kombinac´ı a vz´ajemnou spoluprac´ı technologi´ı HTML, CSS, JavaScriptu a tzv. DOMu. D˚ uleˇzit´e je rozliˇsen´ı dynamick´ ych str´anek implementovan´ ych zm´ınˇen´ ymi technologiemi od str´anek, kter´e pro sv˚ uj bˇeh pouˇz´ıvaj´ı technologie Flash nebo Java. Funkˇcnˇe jsou si str´anky velice podobn´e a uˇzivatel tak nemus´ı na prvn´ı pohled poznat, jak´ ym zp˚ usobem jsou str´anky realizov´any. Rozhodnˇe ovˇsem nelze mezi tyto dva pˇr´ıstupy kl´ast pomysln´e rovn´ıtko a povaˇzovat je za totoˇzn´e. HTML Znaˇckovac´ı jazyk HTML (HyperText Markup Language) slouˇz´ı k tvorbˇe struktury internetov´ ych str´anek v syst´emu World Wide Web. Jedn´a se o mezin´arodnˇe uzn´avan´ y standard, kter´ y je udrˇzov´an W3C (World Wide Web Consortium).
3.1
Technologie pro implementaci
18
Souˇcasn´a verze je HTML 4.01. Tento standard je ovˇsem jiˇz sv´ ym zp˚ usobem pˇrekonan´ y a v dneˇsn´ıch dnech se jiˇz nepouˇz´ıv´a. Jeho velikou nev´ yhodou je velmi voln´a specifikace, kter´a tak d´av´a vysokou volnost pˇri psan´ı HTML dokument˚ u. Uved’me p´ar pˇr´ıklad˚ u za vˇsechny, napˇr. nˇekter´e poˇca´teˇcn´ı a koncov´e znaˇcky jsou nˇekdy nepovinn´e, hodnoty atribut˚ u nemus´ı b´ yt uv´adˇeny vˇzdy v uvozovk´ach. Toto pˇrin´aˇs´ı velmi sloˇzit´a pravidla pro zpracov´an´ı a t´ım p´adem i sloˇzitou implementaci interpreteru. Tyto nedostatky jsou ˇreˇseny novou aplikac´ı HTML v XML jazyce, coˇz je znaˇckovac´ı jazyk, pomoc´ı kter´eho lze vytv´aˇret a definovat vlastn´ı znaˇckovac´ı jazyky, kter´e pak slouˇz´ı pro popis strukturovan´ ych dat. Tato XML aplikace se naz´ yv´a XHTML (W3C, 2010), neboli eXtended HTML a pˇrin´aˇs´ı stejn´e elementy, kter´e jsou k dispozici v samotn´em HTML. Z´aroveˇ n ale pˇrej´ım´a vlastnosti XML, kter´ ymi jsou zjednoduˇsen´a syntaxe a pravidla zpracov´an´ı, napˇr. hodnoty atribut˚ u mus´ı b´ yt vˇzdy uvedeny v uvozovk´ach, poˇca´teˇcn´ı a koncov´a znaˇcka je vˇzdy povinn´a a pˇri zanoˇrov´an´ı nesm´ı doch´azet ke kˇr´ıˇzen´ı. Ve v´ yvoji se od roku 2007 nach´az´ı i nov´a verze HTML. Zat´ımco je samotn´a specifikace HTML5 st´ale jeˇstˇe nedokonˇcena, zejm´ena v modern´ıch prohl´ıˇzeˇc´ıch se jiˇz lze setkat se znaˇcnou podporou. HTML a XHTML soubory sest´av´aj´ı ze samotn´eho obsahu str´anek obohacen´eho o HTML znaˇcky, neboli tagy. Ty se vyskytuj´ı bud’ v podobˇe tzv. p´arov´ ych znaˇcek, kter´e maj´ı znaˇcku otev´ırac´ı a uzav´ırac´ı, mezi nimiˇz se nach´az´ı form´atovan´ y obsah, nebo ve formˇe znaˇcky nep´arov´e. Znaˇcky lze d´ale rozdˇelit na znaˇcky s´emantick´e a vizu´aln´ı. S´emantick´e znaˇcky slouˇz´ı k urˇcov´an´ı v´ yznamu dan´eho obsahu str´anky, zat´ımco vizualn´ı znaˇcky urˇcuj´ı zp˚ usob zobrazen´ı obsahu. V HTML jsou k dispozici oba tyto druhy znaˇcek, ale v XHTML se nach´az´ı jiˇz pouze znaˇcky s´emantick´e. To sam´e plat´ı i pro vyv´ıjen´e HTML5. D˚ uvodem pro vypuˇstˇen´ı vizu´aln´ıch znaˇcek bylo logick´e oddˇelen´ı prezentace od samotn´eho obsahu. Dalˇs´ım prvkem, kter´ y se m˚ uˇze ve HTML dokumentu vyskytnout jsou atributy. Ty se zapisuj´ı k jednotliv´ ym poˇca´teˇcn´ım znaˇck´am a d´avaj´ı tak element˚ um dalˇs´ı vlastnosti. Posledn´ım prvkem jsou entity a jedn´a se o odkazy na speci´aln´ı znaky. Zapisuj´ı se pomoc´ı ampersandu, za kter´ ym n´asleduje bud’ ˇc´ıslo znaku ve znakov´e sadˇe, nebo symbolick´e jm´eno znaku. Z´apis entity je ukonˇcen stˇredn´ıkem. Aby bylo moˇzn´e rozliˇsit, o jak´ y druh dokumentu se v˚ ubec jedn´a a jak´ ym zp˚ usobem jej tedy m´a internetov´ y prohl´ıˇzeˇc interpretovat, pouˇz´ıvaj´ı se doctype deklarace. DTD urˇcuje konkr´etn´ı definici syntaxe HTML dokumentu, coˇz obsahuje sytaktick´a pravidla, povolen´e atributy a jejich hodnoty a definice pravidel, jak´ ym zp˚ usobem do sebe lze zanoˇrovat jednotliv´e elementy. Pˇri interpretaci HTML dokumentu prohl´ıˇzeˇce zobrazuj´ı pouze samotn´ y obsah str´anky. HTML znaˇcky jsou ze zobrazov´an´ı vypuˇstˇeny a jejich v´ yznam je nˇejak´ ym pˇreddefinovan´ ym zp˚ usobem iterpretov´an prohl´ıˇzeˇcem, pˇriˇcemˇz toto zobrazen´ı z´aleˇz´ı na dan´em prohl´ıˇzeˇci, a tak se m˚ uˇze stejn´a str´anka v z´avislosti na pouˇzit´em prohl´ıˇzeˇci a jeho interpretaci zobrazovat r˚ uznˇe.
3.1
Technologie pro implementaci
19
CSS Vzhled str´anek jiˇz nen´ı definov´an pomoc´ı vizu´aln´ıch znaˇcek. V´ yˇse zm´ınˇen´ y d˚ uvod pro logick´e oddˇelen´ı definice vzhledu obsahu od jeho struktury a v´ yznamov´e podstaty vyplyne d´ıky podpoˇre kask´adov´ ych styl˚ u prohl´ıˇzeˇci. Styly umoˇzn ˇuj´ı definovat pro elementy HTML dokumentu potˇrebn´ y vzhled a jejich pomoc´ı je moˇzn´e nastavit vlastnosti zobrazovan´eho p´ısma, jako je velikost, ˇrez, font, barva nebo zarovn´an´ı, d´ale barvy pozad´ı, um´ıstˇen´ı obr´azk˚ u na pozad´ı, zobrazen´ı r´ameˇck˚ u, rozmˇery jako v´ yˇska, ˇs´ıˇrka, odsazen´ı, vnitˇrn´ı okraje, um´ıstˇen´ı element˚ u na str´ance, zp˚ usob zaˇraˇzen´ı do toku dokumentu atd. Vˇsechny tyto vlastnosti lze pomoc´ı styl˚ u nastavovat pro vˇsechny HTML elementy. Definice stylu se nejˇcastˇeji prov´ad´ı pomoc´ı extern´ıch soubor˚ u, ale lze pˇristoupit i k moˇznosti zaps´an´ı styl˚ u pˇr´ımo v dokumentu. Samotn´ y z´apis jednotliv´ ych styl˚ u, a tedy i urˇcen´ı, ke kter´ ym prvk˚ um se dan´a definice bude vztahovat, prob´ıh´a pomoc´ı syntaxe selector {vlastnost: hodnota;}. Selektor m˚ uˇze pˇredstavovat jm´eno elementu, n´azev identifik´atoru nebo tˇr´ıdy. Existuj´ı i dalˇs´ı, jako napˇr. pseudo-tˇr´ıdy, znaky pro urˇcen´ı hierarchick´ ych vztah˚ u ve stromu dokumentu (rodiˇc – potomek), ale jejich podpora jiˇz nen´ı ve vˇsech prohl´ıˇzeˇc´ıch zaruˇcena. JavaScript Interaktivitu a rozpohybov´an´ı str´anek poskytuj´ı skripty na stranˇe klienta. Ty se prov´adˇej´ı vˇzdy individu´alnˇe pro konkr´etn´ıho uˇzivatele, kter´ y si prohl´ıˇz´ı iternetov´e str´anky, pˇr´ımo v oknˇe jeho prohl´ıˇzeˇce a ovlivˇ nuj´ı tak jeho aktualn´ı zobrazen´ı str´anek. Nejˇcastˇeji se prov´ad´ı manipulace se stromem element˚ u HTML dokumentu, at’ uˇz se jedn´a o pˇrid´av´an´ı, odeb´ır´an´ı, skr´ yv´an´ı nebo nastavov´an´ı vlastnost´ı jednotliv´ ych element˚ u. JavaScript je objektovˇe orientovan´ y skriptovac´ı jazyk pro internetov´e str´anky, ale jeho pouˇzit´ı se neomezuje pouze na nˇe a nach´az´ı sv´e uplatnˇen´ı v ˇradˇe dalˇs´ıch prostˇred´ıch. Jeho pouˇzit´ı nevyˇzaduje objetkov´ y pˇr´ıstup a m˚ uˇze fungovat stejnˇe dobˇre i pˇri uplatnˇen´ı procedur´aln´ıho pˇr´ıstupu. Jazyk jako takov´ y poskytuje obecnˇe zn´am´e konstrukce cykl˚ u, podm´ınek, bloky try – catch, switch, definice funkc´ı atd. To vˇse, i samotn´a sytaxe, je velmi podobn´e napˇr. jazyk˚ um Java nebo C++. Ona dynamiˇcnost DHTML tedy spoˇc´ıv´a ve schopnosti mˇenit vzhled, obsah a funkcionalitu str´anky pot´e, co byla kompletnˇe naˇctena a je uˇzivatelem prohl´ıˇzena. Nikoliv ve schopnosti poskytovat pˇri kaˇzd´em naˇcten´ı str´anky jedineˇcnou str´anku. DOM Manipulace s obsahem a stromovou strukturou element˚ u na str´ance prob´ıh´a skrze tzv. DOM, coˇz je zkratka n´azvu Document Object Model. Jedn´a se o platformu, kter´a umoˇzn ˇuje pˇri sv´em pouˇzit´ı v programech nebo skriptech dynamicky pˇristupovat a modifikovat samotn´ y obsah dokumentu jako takov´ y, jeho strukturu a tak´e jeho styl. Cel´ y dokument m˚ uˇze b´ yt pak pˇres DOM nˇejak´ ym zp˚ usobem zpracov´an a v´ ysledky tohoto zpracov´an´ı mohou b´ yt zpˇetnˇe vloˇzeny do jiˇz naˇcten´e a prohl´ıˇzen´e str´anky. Jeden reprezentativn´ı pˇr´ıklad za vˇsechny. Po naˇcten´ı HTML str´anky se skriptovac´ım
3.1
Technologie pro implementaci
20
jazykem spouˇstˇen´ ym na stranˇe klienta, konkr´etnˇe tˇreba JavaScriptem, projde cel´a naˇcten´a str´anka a vyhledaj´ı se vˇsechny nadpisy. Z tˇech se pot´e vytvoˇr´ı ˇc´ıslovan´ y seznam slouˇz´ıc´ı jako obsah pro lepˇs´ı orientaci na str´ance, kter´ y se vloˇz´ı pˇred veˇsker´ y obsah na samotn´ y zaˇca´tek str´anky. DOM se ovˇsem neomezuje pouze na HTML str´anky a umoˇzn ˇuje pr´aci i se XML dokumenty. S´am o sobˇe je neutr´aln´ı na pouˇzit´em programovac´ım nebo skriptovac´ım jazyku a z´aleˇz´ı na konkr´etn´ı aplikaci, jak´a rozhran´ı pro pr´aci s DOMem implementuje (W3C, 2005). Prohl´ıˇzeˇce maj´ı implementovan´e rozhran´ı pro JavaScript, prohl´ıˇzeˇc Internet Explorer od firmy Microsoft podporuje i skriptovac´ı jazyk pˇr´ımo od Microsoftu, VBScript. Pomoc´ı DHTML, a tedy i vˇsech v´ yˇse zm´ınˇen´ ych technologi´ı, kter´e pod DHTML spadaj´ı, jsou realizov´any vˇsechny dodan´e e-learningov´e kv´ızy, kter´e slouˇz´ı jako pˇredloha pro vytvoˇren´ı aplikace gener´atoru. Je tedy nutn´e tyto technologie opˇet pouˇz´ıt, protoˇze aplikace bude nov´e kv´ızy nejen vytv´aˇret, ale bude je i pro jednotliv´e autory uchov´avat a pro kaˇzd´eho uˇzivatele vˇsechny uloˇzen´e kv´ızy zobrazovat, aby si je mohl kdokoliv vyzkouˇset. 3.1.2
V´ ybˇ er JS knihovny
Jedn´a se o volnˇe dostupnou JavaScriptovou knihovnu, jej´ımˇz hlavn´ım u ´ˇcelem je v´ yrazn´e zjednoduˇsen´ı skriptov´an´ı na klientsk´e stranˇe a zajiˇstˇen´ı stejn´eho chov´an´ı napˇr´ıˇc vˇsemi prohl´ıˇzeˇci. V dneˇsn´ı dnech se jedn´a s nejvˇetˇs´ı pravdˇepodobnost´ı o nejobl´ıbenˇejˇs´ı a nejrozˇs´ıˇrenˇejˇs´ı JavaScriptovou knihovnu. Podle statistik uveden´ ych na webu BuiltWith (BuiltWith Trends, 2011), m´a knihovna jQuery k datu 3. 5. 2011 t´emeˇr 45% pod´ıl na celkov´em poˇctu prvn´ıho milionu nejnavˇstˇevovanˇejˇs´ıch str´anek na internetu (viz obr´azek 1).
Obr´azek 1: Graf distribuce JavaScriptov´ ych knihoven pro prvn´ı milion str´anek
Prvn´ı vyd´an´ı knihovny jQuery se uskuteˇcnilo na mezin´arodn´ı konferenci BarCamp, kde ji pˇredstavil jej´ı autor John Resig. Od t´eto doby proˇsla knihovna ˇradou aktualizac´ı a nynˇejˇs´ı dostupn´a verze nese oznaˇcen´ı 1.6. Jak uˇz bylo ˇreˇceno, knihovna znaˇcnˇe zjednoduˇsuje veˇskerou pr´aci s DOMem a pˇredevˇs´ım zajiˇst’uje spr´avnou funkcionalitu napˇr´ıˇc vˇsemi nejpouˇz´ıvanˇejˇs´ımi prohl´ıˇzeˇci. Pˇri jej´ım pouˇzit´ı tak uˇsetˇr´ıme
3.1
Technologie pro implementaci
21
ˇcas a m˚ uˇzeme si b´ yt zcela jisti, ˇze n´ami napsan´e skripty budou korektnˇe fungovat ve vˇsech podporovan´ ych prohl´ıˇzeˇc´ıch (jQuery, 2011). • Firefox 2.0+ • Internet Explorer 6+ • Safari 3+ • Opera 10.6+ • Google Chrome 8+ Jak je vidˇet, tak pouˇzit´ım knihovny jQuery dojde ke zjednoduˇsen´ı z´apisu skript˚ u, kter´e obsatar´avaj´ı interaktivitu u jednotliv´ ych e-learningov´ ych kv´ız˚ u. Nav´ıc bude zajiˇstˇeno, ˇze vˇsechny vygenerovan´e u ´lohy budou ve v´ yˇse uveden´ ych prohl´ıˇzeˇc´ıch fungovat. Pokud tedy uˇzivatel na sv´em poˇc´ıtaˇci nepouˇz´ıv´a vyloˇzenˇe zastaralou verzi tˇechto prohl´ıˇzeˇc˚ u, nemˇelo by se mu st´at, ˇze by samotn´a aplikace nebo vytvoˇren´e kv´ızy nefungovaly. Dalˇs´ım pˇr´ınosem zakomponov´an´ı knihovny do aplikace je jeho automatick´a pˇr´ıtomnost ve vygenerovan´em k´odu nov´ ych u ´loh, takˇze pˇri pˇr´ıpadn´em doprogramov´av´an´ı vlastn´ıch specifick´ ych funkc´ı pro jednotliv´e u ´lohy bude moˇzn´e ihned vyuˇz´ıt moˇznost´ı, kter´e jQuery nab´ız´ı. 3.1.3
V´ ybˇ er programovac´ıho jazyka
V´ ybˇer programovac´ıho jazyka je jedn´ım z prvn´ıch krok˚ u, kter´e je tˇreba pˇri v´ yvoji nov´e aplikace udˇelat, a od jeho spr´avn´eho v´ ybˇeru se pot´e odv´ıj´ı moˇznost pouˇz´ıt´ı nejr˚ uznˇejˇs´ıch modul˚ u a standardn´ıch knihoven pro nejr˚ uznˇejˇs´ı u ´ˇcely. Pomoc´ı programovac´ıho jazyka bude nutn´e v prv´e ˇradˇe realizovat algoritmy, kter´e budou generovat nov´e e-learningov´e komponenty, z´aroveˇ n bude tˇreba vytvoˇrit pˇr´ıvˇetiv´e uˇzivatelsk´e rozhran´ı v podobˇe HTML k´odu. Vzhledem k tomu, ˇze se budou jednotliv´e u ´lohy uchov´avat, bude nutn´e zajistit komunikaci s datab´azov´ ym syst´emem. Jedn´ım z poˇzadavk˚ u na v´ yslednou aplikaci je pouˇzit´ı volnˇe dostupn´ ych technologi´ı. Tento fakt je pˇri v´ ybˇeru jazyka nutn´e tak´e zohlednit. Pˇr´ı v´ ybˇeru jazyka pro naprogramov´an´ı webov´ ych aplikac´ı lze vyb´ırat z nˇekolika vhodn´ ych n´astroj˚ u, kter´e splˇ nuj´ı v´ yˇse zm´ınˇen´e poˇzadavky. Prvn´ım je programovac´ı jazyk PHP a druh´ ym programovac´ı jazyk Perl. Mezi dalˇs´ı pouˇziteln´e technologie by ˇslo zaˇradit napˇr. Javu. Ta bohuˇzel nen´ı na vˇetˇsinˇe server˚ u podporovan´a, takˇze moˇznost jej´ıho v´ ybˇeru lze hned zavrhnout, protoˇze aplikace by mˇela b´ yt schopna co nejvˇetˇs´ıho nasazen´ı. Z´aroveˇ n je nutn´e dodrˇzet dˇr´ıve stanoven´e c´ıle na n´ızkou n´aroˇcnost programov´eho vybaven´ı pro provoz kv´ız˚ u i samotn´e aplikace. Perl se ihned jev´ı jako vhodnˇejˇs´ı volba. Jednak disponuje celou ˇradou nejr˚ uznˇejˇs´ıch standardn´ıch knihoven, kter´e poskytuj´ı vˇetˇsinou kvalitn´ı ˇreˇsen´ı urˇcit´eho probl´emu a znaˇcnˇe tak zjednoduˇsuj´ı pr´aci. Poskytuje tak´e skvˇelou podporu pro generov´an´ı HTML k´odu, kterou zajiˇst’uje modul CGI, a pro pr´aci s datab´azov´ ym
3.1
Technologie pro implementaci
22
syst´emem je k dispozici modul DBI. Nejvˇetˇs´ı v´ yhodou tohoto modulu je, ˇze poskytuje jednotn´e rozhran´ı pro komunikaci s jak´ ymkoliv datab´azov´ ym syst´emem. Oproti tomu je v jazyku PHP (PHP, 2011) pro kaˇzd´ y datab´azov´ y syst´em unik´atn´ı rozhran´ı. Pokud je tedy nˇekdy v budoucnu nutn´e pˇrej´ıt na jin´ y datab´azov´ y syst´em, je tˇreba pˇrepsat celou ˇca´st aplikace, kter´a datab´azov´ y syst´em vyuˇz´ıv´a. Jeho v´ yhodou je specializace na v´ yvoj webov´ ych aplikac´ı a obrovsk´a podpora, lze jej povaˇzovat za takov´ y standard, kter´ y lze naj´ıt na t´emˇeˇr kaˇzd´em hostingu. Jeho vˇseobecn´a rozˇs´ıˇrenost pˇrin´aˇs´ı tak´e velk´e mnoˇzstv´ı nejr˚ uznˇejˇs´ıch projekt˚ u, kter´e jsou realizov´any pr´avˇe v PHP, at’ uˇz se jedn´a o frameworky, redakˇcn´ı syst´emy nebo vˇsemoˇzn´e knihovny. Na z´akladˇe vˇsech v´ yˇse uveden´ ych fakt˚ u byl vybr´an programovac´ı jazyk PHP. D˚ uvodem v´ ybˇeru byla pˇredevˇs´ım moˇznost vyuˇzit´ı dostupn´ ych framework˚ u napsan´ ych v PHP, kter´e rapidnˇe pomohou pˇri implementaci aplikace a automaticky se postaraj´ı o n´aleˇzitosti, kter´e by mˇela webov´a aplikace splˇ novat. 3.1.4
V´ ybˇ er frameworku
Pˇri v´ ybˇeru programovac´ıho jazyka, kter´ ym bude aplikace implementovan´a, se rozhodovalo mezi Perlem a PHP. Vybr´ano bylo PHP, protoˇze pro realizaci aplikace je moˇzn´e vyuˇz´ıt jeden z dostupn´ ych framework˚ u, kter´e jsou v PHP naps´any. Pˇr´ınosem pouˇz´ıt´ı frameworku je automatick´e zajiˇstˇen´ı urˇcit´e u ´rovnˇe kvality, protoˇze bez jeho pouˇzit´ı je velice snadn´e napsat ˇspatn´ y k´od. Je to z toho d˚ uvodu, ˇze PHP je velmi pˇr´ıvˇetiv´e na pouˇzit´ı, d´ıky mal´emu poˇctu omezen´ı, kter´e jsou na strukturu program´atorova k´odu kladena. Frameworky jsou schopny poskytnout kvalitn´ı strukturu pro psan´ı k´odu, objektov´ y pˇr´ıstup a dodateˇcn´e funkce. Asi nejvˇetˇs´ım pˇr´ınosem pouˇzit´ı frameworku je vyuˇzit´ı n´avrhov´eho vzoru Model-viewcontroller, kter´ y oddˇeluje jednotliv´e vrstvy aplikace do separ´atn´ıch komponent. Ty jsou udrˇzov´any oddˇelenˇe, coˇz znaˇcnˇe pˇrisp´ıv´a ke snadn´e udrˇzitelnosti, rozˇsiˇritelnosti a programov´an´ı cel´e aplikace. Mezi dostupn´e frameworky patˇr´ı zejm´ena zahraniˇcn´ı v´ ytvory jako CakePHP, Symfony, ZendFramework nebo CodeIgniter. K dispozici je i velmi kvalitn´ı tuzemsk´ y Nette framework. CakePHP Inspirac´ı pro vytvoˇren´ı tohoto frameworku byl u ´spˇech frameworku jin´eho, konkr´etnˇe Ruby on Rails, kter´ y je napsan´ y v objektovˇe orientovan´em programovac´ım jazyku Ruby. Nejedn´a se ovˇsem o port Ruby on Rails do PHP. CakePHP si z frameworku pouze pˇreb´ır´a jeho koncepty. Tak jako kaˇzd´ y framework pouˇz´ıv´a n´avrhov´ y vzor MVC. Je tedy vhodn´ y pro lidi, kteˇr´ı jiˇz pracovali se zm´ınˇen´ ymi Rails (Wikipedia, 2010).
3.1
Technologie pro implementaci
23
CodeIgniter Jak je uvedeno na domovsk´e str´ance projektu (CodeIgniter, 2011), jedn´a se o velmi jednoduch´ y framework, kter´ y vynik´a svou u ´spornost´ı a nezatˇeˇzuje rozs´ahl´ ymi knihovnami. Je zamˇeˇren na rychlost, vysok´ y v´ ykon a nevyˇzaduje t´emˇeˇr ˇz´adnou konfiguraci. Z´aroveˇ n uˇzivatele netlaˇc´ı do pouˇz´ıv´an´ı a v mnoh´ ych pˇr´ıpadech tak i uˇcen´ı zcela nov´eho ˇsablonovac´ıho jazyka, jehoˇz pouˇzit´ı je voliteln´e. Symfony Dalˇs´ı z aplikaˇcn´ıch framework˚ u pro v´ yvoj webov´ ych aplikac´ı postaven´ ych na n´avrhov´em vzoru MVC. Podle informac´ı uveden´ ych na domovsk´e str´ance cel´eho projektu (Symfony, 2011), tento framework poskytuje n´astroje pro tvorbu komplexn´ıch webov´ ych aplikac´ı, jejichˇz v´ yvoj znaˇcnˇe usnadˇ nuje a pˇredevˇs´ım zrychluje. Principy tohoto frameworku jsou postaveny na ovˇeˇren´ ych a pouˇz´ıvan´ ych zvyklostech ve v´ yvoji webov´ ych aplikac´ı a umoˇzn ˇuje snadno integrovat nˇekter´e z n´astroj˚ u ostatn´ıch knihoven. Zend Framework Zend Framework je asi jedn´ım z nejzn´amˇejˇs´ıch pˇredstavitel˚ u PHP framework˚ u a je zaloˇzen na jednoduchosti, produktivitˇe, podpoˇre tzv. Web 2.0 a dobr´ ych zvyklostech objektovˇe orientovan´eho programov´an´ı. Vyznaˇcuje se flexibiln´ı architekturou, rozˇsiˇriteln´ ym a dobˇre otestovan´ ym z´akladn´ım k´odem a pro sv˚ uj bˇeh nen´ı nutn´e zdlouhavˇe nastavovat konfiguraˇcn´ı soubory. Podpora z´ıskan´a pouˇzit´ım tohoto frameworku zaˇc´ın´a tradiˇcn´ım n´avrhov´ ym vzorem MVC, abstraktn´ı vrstvou pro pr´aci s datab´az´ı, pokraˇcuje prostˇredky pro lokalizov´an´ı obsahu webu, spr´avu session, autentizaci a autorizaci a konˇc´ı n´astroji pro RAD2 anebo webov´e sluˇzby (ZendFramework, 2011). Nette framework Jedn´a se o kvalitn´ı tuzemsk´ y framework, kter´ y je v´ ykonn´ y a pˇredevˇs´ım vhodn´ y pro rychl´e a snadn´e vytv´aˇren´ı kvalitn´ıch webov´ ych aplikac´ı. Mezi jeho pˇrednosti patˇr´ı poskytov´an´ı vysoce kvalitn´ıho zabezpeˇcen´ı a automatick´eho oˇsetˇren´ı bezpeˇcnostn´ıch dˇer webu, d´ale nab´ız´ı podporu pro vˇsechny modern´ı technologie pouˇz´ıvan´e pˇri v´ yvoji webov´ ych aplikac´ı jako je AJAX, MVC, SEO, Web 2.0. D´ale ct´ı z´asady pˇr´ıstupu KISS a d´ıky sv´emu propracovan´emu objektov´emu n´avrhu v´ yvoj´aˇre vede ke kvalitn´ımu, ˇcist´emu n´avrhu aplikace, kter´a je kdykoliv v budoucnosti snadno rozˇsiˇriteln´a. Z´aroveˇ n vˇsak ˇz´adn´ ym zp˚ usobem neomezuje a umoˇzn ˇuje vyuˇz´ıvat pouze nˇekterou z jeho ˇca´st´ı, kter´e lze kombinovat s jin´ ymi PHP frameworky. Pro podporu v´ yvoje aplikace jsou nav´ıc k dispozici kvalitn´ı lad´ıc´ı n´astroje (Nette, 2011). 2
Rapid application development.
3.1
Technologie pro implementaci
24
Samotn´ y v´ ybˇer frameworku na z´akladˇe kr´atk´eho v´ yˇctu jeho vlastnost´ı, kter´e byly vˇetˇsinou pˇrevzaty z domovsk´ ych str´anek samotn´ ych projekt˚ u, pˇredstavuje pomˇernˇe nelehk´ y u ´kol a ˇcasto z´aleˇz´ı vyloˇzenˇe na osobn´ıch preferenc´ıch v´ yvoj´aˇre. Zpravidla ale neexistuje ani jedna ˇspatn´a volba a aplikaci by mˇelo j´ıt bezprobl´em˚ u realizovat v kter´emkoliv zm´ınˇen´em frameworku. Pro implmentaci bude zvolen framework Nette, kolem kter´eho je velk´a ˇcesko-slovensk´a komunita. Velk´e vyuˇz´ıt´ı v aplikaci gener´atoru zcela jistˇe nalezne velice kvalitnˇe zpracovan´ y n´astroj pro tvorbu uˇzivatelsk´ ych formul´aˇr˚ u a jejich validaˇcn´ıch pravidel, protoˇze v samotn´e aplikaci m´a b´ yt kladen d˚ uraz na vysokou variabilitu nejr˚ uznˇejˇs´ıch funkˇcn´ıch nastaven´ı pro gener´atory jednotliv´ ych kv´ız˚ u, coˇz povede k netrivi´aln´ı struktuˇre prvk˚ u ve formul´aˇr´ıch vyˇzaduj´ıc´ı podm´ınˇen´e validace. 3.1.5
V´ ybˇ er datab´ azov´ eho syst´ emu
Datab´azov´ y syst´em je spojen´ım datab´aze, coˇz je strukturovan´a mnoˇzina dat, a syst´emu ˇr´ızen´ı b´aze dat, coˇz je integroovan´ y softwarov´ y prostˇredek ˇr´ıd´ıc´ı b´azi dat. Nejrozˇs´ıˇrenˇejˇs´ım datab´azov´ ym syst´emem, kter´ y (stejnˇe jako programovac´ı jazyk PHP) pln´ı na tuzemsk´ ych hostingov´ ych sluˇzb´ach roli jak´ehosi standardu, je MySQL. Jedn´a se o multiplatformn´ı datab´azi, kter´a je dostupn´a jak ve verzi zdarma, tak i ve verzi komerˇcn´ı, tedy placen´e. Alternativn´ım syst´emem je napˇr. PostgreSQL. Rozd´ıly mezi tˇemito relaˇcn´ımi datab´azov´ ymi syst´emy byly jeˇstˇe v relativnˇe ned´avnˇe dobˇe pomˇernˇe zjevn´e. MySQL vynikalo a bylo tak i vˇseobecnˇe vn´ım´ano jako ˇreˇsen´ı pro snadn´e uˇz´ıv´an´ı, kter´e nav´ıc pˇrin´aˇselo vysokou rychlost, ovˇsem na u ´kor absence pokroˇcil´ ych funkc´ı. Oproti tomu Postgres pˇredstavovalo jakousi open source verzi komerˇcn´ıho syst´emu Oracle s ˇradou pokroˇcik´ ych funkc´ı, jako jsou triggery, funkce, nebo pohledy. Dnes se uˇz rozd´ıly smazaly a tak jako MySQL na ˇcetn´e ˇz´adosti uˇzivatel˚ u zapracovalo vyˇzadovan´e funkce, Postgres znaˇcnˇe vylepˇsilo svoji rychlost. V´ ybˇer mezi tˇemito dvˇema syst´emy tak z´avis´ı sp´ıˇse na osobn´ıch preferenc´ıch uˇzivatele, ale hlavnˇe tak´e na podpoˇre serveru, na kter´ y bude aplikace um´ıstˇena. Jelikoˇz bude gener´ator e-learningov´ ych u ´loh um´ıstˇen na hosting, kter´ y bude zdarma, bude jako datab´azov´ y syst´em zvoleno obecnˇe rozˇs´ıˇren´e MySQL. V´ ybˇer datab´azov´eho syst´emu ovˇsem nebude zcela zavazuj´ıc´ı, jelikoˇz spoleˇcnˇe s PHP frameworkem Nette bude pouˇzita knihovna Dibi, poskytuj´ıc´ı abstrakci pro datab´azovou vrstvu. Dibi Jak bylo uvedeno v´ yˇse, velk´ ym probl´emem PHP je, ˇze nativnˇe neposkytuje jednotn´e rozhran´ı pro pˇr´ıstup ke vˇsem druh˚ um nejrozˇs´ıˇrenˇejˇs´ıch datab´azov´ ych syst´em˚ u. Takˇze je tˇreba pˇri pˇrechodu na jin´ y datab´azov´ y syst´em pˇrepisovat veˇsker´ y zdrojov´ y k´od aplikace, kter´ y nˇejak´ ym zp˚ usobem komunikuje s datab´az´ı. Samozˇrejmˇe lze tento nedostatek minimalizovat napˇr. napsan´ım vlastn´ıch funkc´ı, kter´e se n´aslednˇe pouˇzij´ı v k´odu samotn´e aplikace. Pˇri zmˇenˇe pak staˇc´ı zas´ahnout pouze do implementac´ı vlastn´ıch funkc´ı a pˇrechod na nov´ y datab´azov´ y syst´em je tak mnohem jednoduˇsˇs´ı.
3.1
Technologie pro implementaci
25
N´astroj Dibi ovˇsem umoˇzn´ı tyto probl´emy jeˇstˇe v´ıce minimalizovat. Jde o knihovnu, jej´ıˇz funkc´ı je zajistit abstrakci pro pr´aci se vˇsemi nejˇcastˇeji pouˇz´ıvan´ ymi datab´azemi. • MySQL • PostgreSQL • SQLite • MS SQL • Oracle • Access • generic PDO a ODBC Pouˇzit´ım Dibi tedy bude zajiˇstˇen t´emˇeˇr bezprobl´emov´ y pˇrechod na kter´ ykoliv z v´ yˇse uveden´ ych datb´azov´ ych syst´em˚ u. Jedin´e, co bude tˇreba pˇri zmˇene syst´emu v aplikaci upravit, bude pouze nˇekolik ˇra´dk˚ u v konfiguraˇcn´ım souboru.
4
´ VYSLEDKY
4
26
V´ ysledky
4.1
N´ avrh aplikace pro generov´ an´ı u ´loh
Aplikace pro generov´an´ı e-learningov´ ych kv´ız˚ u, kter´e byly podkladem pro tuto pr´aci, bude podle poˇzadavk˚ u rozdˇelena na veˇrejnou ˇca´st, ve kter´e si budou moci vˇsichni n´avˇstˇevn´ıci proch´azet vytvoˇren´e a uloˇzen´e e-learningov´e kv´ızy a zkouˇset si na nich sv´e znalosti, a tak´e soukromou ˇc´ast. Tato ˇca´st bude slouˇzit vˇsem uˇzivatel˚ um, kteˇr´ı si vytvoˇr´ı sv˚ uj vlastn´ı u ´ˇcet, pod kter´ y se pˇrihl´as´ı. Zde jim bude umoˇznˇeno vytv´aˇret nov´e kv´ızy, ukl´adat si kv´ızy do datab´aze nebo si je st´ahnout na sv˚ uj HDD.3 Ukl´ad´an´ı kv´ız˚ u do datab´aze nebude slouˇzit pouze pro jejich zveˇrejnˇen´ı ostatn´ım uˇzivatel˚ um, ale poslouˇz´ı i k tomu, aby se autoˇri ke sv´ ym uloˇzen´ ym u ´loh´am mohli kdykoliv v budoucnosti vracet, aby je mohli d´ale upravovat. 4.1.1
N´ avrh struktury datab´ aze
Struktura datab´aze, kterou bude aplikace pouˇz´ıvat pro uchov´av´an´ı dat, nebude nijak komplikovan´a, protoˇze bude evidov´ano minimum u ´daj˚ u. Hlavn´ım c´ılem t´eto pr´ace je vytvoˇren´ı gener´ator˚ u pro vytv´aˇren´ı nov´ ych kv´ız˚ u. Nen´ı proto kladen d˚ uraz na uˇzivatelsk´e funkce, coˇz se odraz´ı i v samotn´em n´avrhu datab´aze (viz obr. 2). Uzivatele Typy id nazev presenter
int varchar varchar
Ulohy id nazev popis uloha autor typ
int varchar text blob int int
id login password
int varchar char
Obr´azek 2: sch´ema struktury datab´aze
Pro zajiˇstˇen´ı nejd˚ uleˇzitˇejˇs´ı funkcionality cel´e aplikace je tˇreba identifikovat pouze nˇekolik entit. Prvn´ı jsou uˇzivatel´e, kteˇr´ı si pro pˇr´ıstup do aplikace vytv´aˇrej´ı sv´e osobn´ı u ´ˇcty. Pro kaˇzd´eho z uˇzivatel˚ u je nutn´e evidovat jeho pˇrihlaˇsovac´ı jm´eno, heslo a identifik´ator, kter´ y jednoznaˇcnˇe urˇc´ı konkr´etn´ıho uˇzivatele. Jako identifik´ator by zcela urˇcitˇe ˇslo zvolit samotn´e pˇrihlaˇsovac´ı heslo, ale pro pohodlnˇejˇs´ı pr´aci se z´aznamem uˇzivatele bude vytvoˇren umˇel´ y ˇc´ıseln´ y identifik´ator. Dalˇs´ı uchov´avanou entitou jsou vytv´aˇren´e u ´lohy. Aby je mohl autor od sebe nˇejak´ ym zp˚ usobem odliˇsit, je pro kaˇzdou z u ´loh evidov´an jej´ı n´azev. Dalˇs´ım z odliˇsovac´ıch atrbitut˚ u je voliteln´ y popis cel´e u ´lohy, kter´ y m´a slouˇzit pro dalˇs´ı dodateˇcn´e pozn´amky autora, kter´e mu v´ıce pomohou identifikovat, o kterou z u ´loh se vlastnˇe jedn´a. Dalˇs´ı atribut uchov´av´a veˇsker´a nastaven´ı u ´lohy, kter´a autor pˇri jej´ım vytv´aˇren´ı nastavil. Jelikoˇz se od sebe jednotliv´e kv´ızy v mnoha aspektech 3
Hard disk drive – pevn´ y disk.
4.1
N´avrh aplikace pro generov´an´ı u ´loh
27
liˇs´ı, bylo by velmi komplikovan´e vytv´aˇret pro kaˇzd´ y typ zvl´aˇstn´ı tabulku. Jedn´ım z princip˚ u, kter´ y by ˇslo pouˇz´ıt, by bylo kaˇzd´ y parametr u ´lohy uchov´avat jako jeden z´aznam v tabulce parametry_uloh. Z´aznamy z t´eto tabulky by pak byly se z´aznamy v tabulce u ´loh ve vztahu N:1 a kaˇzd´ y parametr u ´lohy by uchov´aval data ve tvaru nazev_parametru, hodnota, uloha. Tento zp˚ usob ukl´ad´an´ı nastaven´ı ale znovu pˇrin´aˇs´ı pomˇernˇe sloˇzit´e manipulace, kter´e je tˇreba s daty v aplikaci prov´adˇet. Z tohoto d˚ uvodu byl zvolen zp˚ usob uchov´av´an´ı veˇsker´eho nastaven´ı pomoc´ı jedin´eho atributu ve formˇe bin´arn´ıch dat. Zde se ukl´ad´a kus PHP k´odu, kter´ y pˇredstavuje popis datov´e struktury uchov´avan´e u ´lohy, se kterou se v samotn´e aplikaci pomˇernˇe snadno a pˇr´ımo manipuluje. Velkou nev´ yhodou tohoto ˇreˇsen´ı je fakt, ˇze u ´lohy nep˚ ujde podle jednotliv´ ych parametr˚ u ˇradit pˇr´ımo v datab´azi, ˇc´ımˇz se pˇrirav´ıme o potencion´aln´ı v´ ykon, kter´eho lze dos´ahnout. Ve chv´ıli, kdy bude tˇreba s jednotliv´ ymi u ´lohami nˇejak´ ym zp˚ usobem pracovat (ˇradit, vyb´ırat) podle uloˇzen´ ych nastaven´ı, nebude moˇzn´e tyto operace prov´est na u ´rovni datab´aze. To ovˇsem tolik nevad´ı, protoˇze se nejedn´a o stˇeˇzejn´ı funkci, bez kter´e by aplikace nebyla provozuschopn´a, ale pˇredevˇs´ım se nejedn´a o hlavn´ı poˇzadavek, kter´ y by mˇela apikace podle zad´an´ı pr´ace splˇ novat. D´ale jsou pro kaˇzdou u ´lohu uchov´av´any dva ciz´ı kl´ıˇce. Prvn´ı odkazuje na autora u ´lohy, tedy instanci z tabulky uˇzivatel´e. Druh´ y kl´ıˇc se odkazuje na instanci posledn´ı evidovan´e entity, a to na typ u ´lohy. Pro jednoznaˇcn´e odliˇsen´ı kaˇzd´e u ´lohy bude vytvoˇren umˇel´ y ˇc´ıseln´ y identifik´ator, jelikoˇz ˇza´dn´ y z atribut˚ u, ani ˇza´dn´a jejich kombinace, nen´ı vhodn´ ym kandid´atem na prim´arn´ı kl´ıˇc, kter´ y by u ´lohy jednoznaˇcnˇe identifikoval. Posledn´ı entitou jsou typy vytv´aˇren´ ych u ´loh a pro kaˇzd´ y z nich je evidov´an n´azev dan´eho typu, kter´ y se bude zobrazovat pˇri v´ ypisu kv´ız˚ u v aplikaci a odpov´ıd´a n´azvu kv´ız˚ u, kter´e byly v pˇredchoz´ıch kapitol´ach rozeb´ır´any. Druh´ ym evidovan´ ym atributem je n´azev presenteru, kter´ y se uchov´av´a z funkˇcn´ıch d˚ uvod˚ u, kter´e budou vysvˇetleny d´ale v textu. Identifik´atorem by pro tuto entitu mohl b´ yt napˇr. n´azev presenteru, protoˇze mus´ı b´ yt pro kaˇzdou z u ´loh unik´atn´ı, ale stejnˇe jako v pˇr´ıpadˇe pˇrihlaˇsovac´ıch jmen u tabulky uˇzivatel˚ u nebude pro lepˇs´ı pr´aci jako identifik´ator pouˇzit ˇretˇezec, ale umˇele vytvoˇren´ y ˇc´ıseln´ y identifik´ator. 4.1.2
N´ avrh struktury presenter˚ u
Zat´ımco vˇetˇsina uveden´ ych PHP framework˚ u pouˇz´ıvala n´avrhov´ y vzor MVC, tedy model-view-controller, zvolen´ y Nette framework jde cestou n´avrhov´e vzoru MVP neboli model-view-presenter. Na prvn´ı pohled se tyto vzory liˇs´ı pouze v posledn´ım p´ısmenku ve zkratce, a tedy i n´azvu posledn´ı sloˇzky. Velice zjednoduˇsenˇe lze ˇr´ıct, ˇze Controller a Presenter pln´ı stejnou funkci. Ve skuteˇcnosti zde ovˇsem existuj´ı urˇcit´e odliˇsnosti, ale pro jejich pln´e pochopen´ı by bylo nutn´e se t´eto problematice vˇenovat velmi podrobnˇe. Abychom nezabˇred´av´ali do nadbyteˇcn´ ych technick´ ych detail˚ u, uvedeme pouze jednoduch´ y popis rozd´ılu, kter´ y uv´ad´ı Bernard v jednom ze sv´ ych ˇcl´ank˚ u (Bernard, 2009). Controller se u webov´ ych aplikac´ı nejˇcastˇeji skl´ad´a z tzv. front controlleru, kter´ y se star´a o zpracov´an´ı HTTP poˇzadavk˚ u, kter´e pos´ıl´a
4.1
28
N´avrh aplikace pro generov´an´ı u ´loh
dalˇs´ımu controlleru. Ten si pot´e z p˚ uvodn´ıho poˇzadavku vyextrahuje potˇrebn´a data a provede patˇriˇcnou operaci. Presenter se star´a o prezentaˇcn´ı i aplikaˇcn´ı logiku a existuje u nˇej vazba z pohledu. Presenter tak m˚ uˇze reagovat na vstupy uˇzivatel˚ u, kteˇr´ı k aplikaci pˇristupuj´ı pr´avˇe pˇres pohledy, zat´ımco u MVC jsou vstupem uˇzivatele do aplikace HTTP poˇzadavky. BasePresenter
PublicPresenter
PrivatePresenter
HomepagePresenter
UlohaPresenter
KrizovkaPresenter
UzivatelPresenter
TahaciPrirazovaniPresenter
Obr´azek 3: sch´ema struktury presenter˚ u
Cel´a aplikace je rozdˇelena na dvˇe hlavn´ı ˇca´sti: na veˇrejnou, kter´a je pˇr´ıstupn´a komukoliv a umoˇzn ˇuje proch´azen´ı a plnˇen´ı jednotliv´ ych vytvoˇren´ ych kv´ız˚ u, a na soukromou, kter´a je pˇr´ıstupn´a uˇzivateli po pˇrihl´aˇsen´ı k jeho osobn´ımu u ´ˇctu. V t´eto ˇca´sti je mu umoˇznˇeno vytv´aˇret jednotliv´e kv´ızy, ukl´adat je a d´ale s nimi pracovat. Kaˇzdou z tˇechto ˇc´ast´ı lze jeˇstˇe d´ale rozdˇelit. Spr´avn´e navrˇzen´ı a rozdˇelen´ı struktury presenter˚ u je jedn´ım z pˇredpokad˚ u dobˇre funguj´ıc´ı a udrˇzovateln´e aplikace. Jak uv´ad´ı Grudl na sv´em blogu (2008), pro n´avrh struktury by mˇela platit stejn´a pravidla, kter´a plat´ı pro OOP.4 Vˇsechny presentery, kter´e jsou v aplikaci pouˇz´ıv´any, by mˇely tvoˇrit jasnˇe danou hierarchickou strukturu. Kaˇzd´ y presenter m´a sv˚ uj ˇzivotn´ı cyklus a hned pˇri sv´em vzniku spouˇst´ı metodu startup(), ve kter´e tak m˚ uˇzeme seskupovat opakuj´ıc´ı se PHP k´od, kter´ y se v dan´e ˇc´asti aplikace mus´ı vˇzdy prov´est. Pˇr´ıkladem m˚ uˇze b´ yt pˇripojen´ı k datab´azi nebo kontrola pˇrihl´aˇsen´ı uˇzivatele a jeho pˇr´ıstupov´ ych pr´av. S t´ımto pˇr´ıstupem nejen ˇze udrˇz´ıme konzistenci v opakuj´ıc´ım se prov´adˇen´em k´odu, ale uˇsetˇr´ıme tak ˇcas a bude mnohem snadnˇejˇs´ı aplikaci udrˇzovat a v pˇr´ıpadˇe potˇreby ji bude snadn´e kdykoliv rozˇs´ıˇrit. 4
Objektovˇe orientovan´e programov´an´ı.
4.1
N´avrh aplikace pro generov´an´ı u ´loh
29
Veˇrejn´ aˇ c´ ast Tato ˇca´st aplikace je pˇr´ıstupn´a vˇsem uˇzivatel˚ um, kteˇr´ı k aplikaci pˇristoup´ı. Zde maj´ı moˇznost prohl´ıˇzet si vˇsechny uloˇzen´e kv´ızy a zkouˇset si jejich ˇreˇsen´ı. Z´aroveˇ n tato ˇca´st aplikace slouˇz´ı jako vstup do soukrom´e ˇc´asti. Uˇzivatel si zde tedy m˚ uˇze vytvoˇrit sv˚ uj osobn´ı u ´ˇcet a samozˇrejmˇe se k nˇemu i pˇrihlaˇsovat. Vˇsechny tyto operace bude obsluhovat jedin´ y presenter, kter´ y bude z´aroveˇ n plnit funkci domovsk´e str´anky aplikace. Soukrom´ aˇ c´ ast Do t´eto ˇca´sti aplikace m˚ uˇze uˇzivatel pˇristoupit teprve po pˇrihl´aˇsen´ı ke sv´emu osobn´ımu u ´ˇctu. Zde m´a moˇznost vytv´aˇret nov´e e-learningov´e kv´ızy, kter´e si po vytvoˇren´ı m˚ uˇze uloˇzit do datab´aze. Vˇsechny takto uloˇzen´e kv´ızy si m˚ uˇze proch´azet stejnˇe jako ve veˇrejn´e ˇca´sti aplikace. Nav´ıc m´a moˇznost si jednotliv´e kv´ızy znovu upravit a proveden´e zmˇeny samozˇrejmˇe opˇet uloˇzit – aktualizace existuj´ıc´ıcho z´aznamu u ´lohy v datab´azi. Pokud nˇekterou z u ´loh jiˇz nebude cht´ıt d´ale uchov´av´at, bude m´ıt uˇzivatel moˇznost z´aznam z datab´aze vymazat – po t´eto operaci jiˇz nebude moˇzn´e u ´lohu obnovit. Vˇsechny tyto operace bude obstar´avat uˇzivatelsk´ y presenter, kter´ y bude z´aroveˇ n plnit funkci uˇzivatelsk´e str´anky. Aby si nemohl e-learningov´e kv´ızy vytv´aˇret kdokoliv, budou presentery realizuj´ıc´ı jejich tvorbu tak´e um´ıstˇeny do soukrom´e ˇca´sti aplikace. Je to z toho d˚ uvodu, ˇze jedn´ım z poˇzadavk˚ u na aplikaci bylo, aby bylo moˇzn´e vytv´aˇren´e u ´lohy ukl´adat do datab´aze. Kdyby mohli uˇzivatel´e k vytv´aˇren´ı kv´ız˚ u pˇristupovat bez pˇrihl´aˇsen´ı, nebylo by moˇzn´e jednotliv´e uˇzivatele od sebe odliˇsit a u ´lohy by tak musely b´ yt teoreticky ukl´ad´any pod anonymn´ım uˇzivatelem, kter´ y by zastˇreˇsoval vˇsechny nepˇrihl´aˇsen´e uˇzivatele. Cel´ y pˇr´ıstup ale vede ke ˇradˇe nepˇr´ıjemnost´ı, napˇr. by si mohli uˇzivatel´e u ´lohy navz´ajem mazat. Moˇzn´e ˇreˇsen´ı tohoto probl´emu je umoˇznit uˇzivatel˚ um bez u ´ˇctu vytvoˇren´e kv´ızy ukl´adat pouze na HDD. To ovˇsem zase vede ke komplikac´ım pr´avˇe z hlediska struktury presenter˚ u, protoˇze v soukrom´e ˇca´sti je potˇreba zajistit operaci ukl´adaj´ıc´ı kv´ız do datab´aze a jelikoˇz se jedn´a o operaci vztahuj´ıc´ı se ke konkr´etn´ımu kv´ızu, mˇela by b´ yt souˇc´ast´ı presenteru dan´eho kv´ızu, kter´ y mus´ı b´ yt pˇr´ıstupn´ y i bez pˇrihl´aˇsen´ı. Aplikace tedy p˚ ujde cestou nejmenˇs´ıho zla a pro vytv´aˇren´ı kv´ız˚ u bude povinn´e pˇrihl´aˇsen´ı uˇzivatele. Vˇsechny presentery, kter´e budou pˇredstavovat ˇca´st aplikace pro generov´an´ı nov´ ych kv´ız˚ u, bude zastˇreˇsovat – bude pˇredkem – presenter u ´lohy. V tomto presenteru budou naps´any vˇsechny metody, kter´e jsou pro kaˇzd´ y typ kv´ızu shodn´e. Jedn´a se pˇredevˇs´ım o opakuj´ıc´ı se operace jako nastavov´an´ı hodnot, jejich maz´an´ı, kontrolu pˇr´ıstup˚ u, nebo deklarace nastaven´ı potˇrebn´ ych atribut˚ u presenteru. Zjednoduˇsenˇe by se tedy dalo ˇr´ıct a celkovˇe tak shrnout u ´ˇcel tohoto presenteru, ˇze obsahuje veˇskerou obecnou aplikaˇcn´ı logiku, kter´a se t´ yk´a vytv´aˇren´ı nov´ ych kv´ız˚ u. Z tohoto presenteru jsou n´aslednˇe odvozeny presentery pro kaˇzd´ y typ u ´lohy, ve kter´ ych jsou vytv´aˇreny vˇsechny komponenty pouˇz´ıv´an´e v aplikaci, kter´e pˇredstavuj´ı
4.2
Implementace aplikace
30
uˇzivatelsk´e formul´aˇre slouˇz´ıc´ı ke sbˇeru dat uˇzivatele, na z´akladˇe kter´ ych se n´aslednˇe generuj´ı nov´e kv´ızy. Alternativn´ım pˇr´ıstupem, kter´ y je moˇzn´ y ve frameworku Nette realizovat, pro oddˇelen´ı soukrom´e a veˇrejn´e ˇca´sti aplikace je jej´ı rozˇclenˇen´ı do modul˚ u. Pod t´ımto pojmem se v Nette frameworku rozum´ı urˇcit´e seskupen´ı presenter˚ u, model˚ u, ˇsablon a komponent, kter´e spolu nˇejak´ ym logick´ ym zp˚ usobem patˇr´ı a tvoˇr´ı tak urˇcitou logickou ˇc´ast aplikace. Pouˇzit´ım modul˚ u by se dos´ahlo jeˇstˇe lepˇs´ıho n´avrhu, ale pro zachov´an´ı urˇcit´e jednoduchosti bylo od modul˚ u upuˇstˇeno a aplikace bude realizov´ana jednoduchou strukturou presenter˚ u zobrazenou na tˇret´ım obr´azku a popsanou v pˇredchoz´ım textu.
4.2
Implementace aplikace
Samotn´a implementace cel´e aplikace pro generov´an´ı iteraktivn´ıch e-learningov´ ych komponent je um´ıstˇena na free hostingov´em serveru endora.cz. Aplikace je vyvinuta v programovac´ım jazkyku PHP, ve kter´em je naps´an i Nette framework, jenˇz je pro v´ yvoj aplikace tak´e pouˇzit´ y. Samotn´a aplikace generuje potˇrebn´ y HTML k´od, kter´ y je ve frameworku ukl´ad´an pomoc´ı ˇsablon. Tento k´od je odes´ıl´an uˇzivatel˚ um do prohl´ıˇzeˇce. HTML k´od je ˇcasto doplnˇen o JavaScript, bez kter´eho generov´an´ı nov´ ych kv´ız˚ u st´ale funguje, ale sn´ıˇz´ı se tak uˇzivatelsk´a pohodlnost a samotn´e kv´ızy, uˇz ze sv´e samotn´e podstaty nebudou zobraziteln´e. Jako datab´azov´ y syst´em aplikace vyuˇz´ıv´a MySQL, jenˇz je na uveden´em hostingu pˇr´ıstupn´ y. 4.2.1
Adres´ aˇrov´ a struktura
Aplikaci lze spustit zad´an´ım adresy http://znbp.tode.cz/ do zvolen´eho webov´eho prohl´ıˇzeˇce. Cel´a aplikace je rozdˇelena do nˇekolika ˇca´st´ı, jejich n´avrh byl pops´an v pˇredchoz´ı kapitole. Nette framework poskytuje pˇredepsanou urˇcitou adres´aˇrovou strukturu, kter´a ovˇsem nen´ı nijak z´avazn´a a lze ji pro potˇreby konkr´etn´ı aplikace adekv´atnˇe upravit. V´ ychoz´ı struktura m´a n´asleduj´ıc´ı podobu – lev´a stromov´a struktura. +-root-stranky/ +-app/ | +-models/ | +-presenters/ | +-templates/ | +-config.ini | +-bootstrap.php +-libs/ | +-dibi/ | +-Nette/ +-log/ +-temp/
+-root-stranky/ +-app/ | +-models/ | +-presenters/ | +-templates/ | +-config.ini | +-bootstrap.php +-libs/ | +-dibi/ | +-Nette/ +-log/ +-temp/
4.2
31
Implementace aplikace
+-www/ +-css/ +-images/ +-js/ +-index.php
+-css/ +-images/ +-js/ +-index.php
Prav´a stromov´a struktura zobrazuje ares´aˇre um´ıstˇen´e na serveru endora.cz. Jak je vidˇet, obsah adres´aˇre www v doporuˇcen´e struktuˇre byl pˇresunut pˇr´ımo do koˇrenov´eho adres´aˇre str´anky. D˚ uvod pro tuto u ´pravu je n´asleduj´ıc´ı. Aby mohlo b´ yt k aplikaci pˇristupov´ano pˇr´ımo z koˇrenov´e adresy, mus´ı b´ yt adres´aˇr www totoˇzn´ y s koˇrenovou sloˇzkou str´anky. Pokud by tomu tak nebylo, k aplikaci by se muselo pˇristupovat pˇres adresu http://znbp.tode.cz/www/. Na nˇekter´ ych serverech vˇsak nen´ı dovoleno zapisovat do jin´e neˇz koˇrenov´e sloˇzky. Z toho d˚ uvodu je obsah adres´aˇre www pˇresunut pˇr´ımo do koˇrenu str´anky. Aby aplikace fungovala, je nutn´e tuto zmˇenu struktury prom´ıtnout i do n´ı. To se provede v souboru index.php, kde se pˇrep´ıˇs´ı nˇekter´e z definovan´ ych konstant ud´avaj´ıc´ıch cestu k adres´aˇr˚ um aplikace, sloˇzky pro doˇcasn´e soubory a knihovny. Podrobnˇejˇs´ımu popisu struktury se nebudeme vˇenovat. 4.2.2
Implementace u ´loh v jQuery
Pˇri v´ ybˇeru technologi´ı, kter´e budou pouˇzity k implementaci aplikace, byla jako JavaScriptov´a knihovna zvolena knihovna jQuery. Hlavn´ım pˇr´ınosem pouˇzit´ı knihovny je zjednoduˇsen´ı z´apisu manipulace s elementy DOMu a pˇredevˇs´ım zaruˇcen´ı jednotn´eho chov´an´ı napˇr´ıˇc vˇsemi nejpouˇz´ıvanˇejˇs´ımi prohl´ıˇzeˇci. Pˇreps´an´ı JavaScriptov´e ˇca´sti dodan´ ych e-learningov´ ych kv´ız˚ u nen´ı zpravidla nutn´e, ale pˇreps´an´ım bude doc´ıleno pˇrehlednˇejˇs´ıho z´apisu a v urˇcit´e m´ıˇre i zkr´acen´ı celkov´eho d´elky k´odu. Nav´ıc bude jQuery vyˇzadov´ano pro spr´avn´ y chod kv´ızu, a tak bude muset b´ yt pˇr´ıtomno ve vygenerovan´ ych u ´loh´ach. Uˇzivatel´e budou m´ıt umoˇznˇeno nav´azat vlastn´ı JS k´od na urˇcit´e ud´alosti, kter´e bˇehem plnˇen´ı u ´loh nast´av´aj´ı. T´ım p´adem budou moci pˇri tˇechto definic´ıch rovnou pouˇz´ıt z´apis JS k´odu s vyuˇz´ıt´ım n´astroj˚ u, kter´e poskytuje jQuery. Samozˇrejmˇe jim ale nebude nic br´anit v psan´ı standardn´ıho JS k´odu. Kˇr´ıˇ zovka Pˇri pˇrepracov´an´ı JavaScriptov´eho k´odu, kter´ y zajiˇst’oval interaktivitu pro elearningov´ y kv´ız kˇr´ıˇzovky, nebyly tˇreba t´emˇeˇr ˇz´adn´e z´asadn´ı z´asahy do p˚ uvodn´ıho k´odu. Zdlouhav´e a mnohdy i sloˇzit´e z´apisy v´ ybˇeru element˚ u byly nahrazeny za elegantn´ı jQuery pˇr´ıkazy. Dalˇs´ım m´ıstem, kde doˇslo k u ´prav´am, bylo navazov´an´ı ud´alost´ı. Zde byl z´apis celkov´eho k´odu znaˇcnˇe zkr´acen, protoˇze jQuery poskytuje sv´e vlastn´ı prostˇredky pro navazov´an´ı ud´alost´ı, kter´e se jiˇz samy postaraj´ı o korektn´ı funkˇcnost ve vˇsech podporovan´ ych prohl´ıˇzeˇc´ıch. Zat´ımco v p˚ uvodn´ım z´apisu bylo nutn´e testovat pˇr´ıtomnost r˚ uzn´ ych objekt˚ u nebo vlastnost´ı v prohl´ıˇzeˇci, pomoc´ı kter´eho pak bylo moˇzn´e urˇcit aktu´aln´ı prohl´ıˇzeˇc a zvolit podle toho adekv´atn´ı
4.2
Implementace aplikace
32
z´apis (to vedlo k dvojn´asobn´emu zapisov´an´ı stejn´e vˇeci pomoc´ı r˚ uzn´ ych objekt˚ u nebo jejich vlastnost´ı), pˇri pouˇzit´ı jQuery postaˇc´ı jednotn´ y z´apis nav´az´an´ı ud´alosti a knihovna se jiˇz sama postar´a o detekci prohl´ıˇzeˇce a zvolen´ı adekv´atn´ıho zp˚ usobu nav´az´an´ı ud´alosti. N´asleduje uk´azka takov´eho k´odu a jeho nahrazen´ı v´ yraznˇe kratˇs´ım a na prvn´ı pohled srozumitelnˇejˇs´ım z´apisem. $(window).keypress(function(event) { klavesnice(event); }); // oproti rozs´ ahlejˇ sı ´mu z´ apisu if (window.addEventListener) window.addEventListener( ’keypress’, function(event) { klavesnice(event); }, true ); else document.attachEvent( ’onkeypress’, function(event) { var objEvent = new Object(); objEvent.type = event.type; objEvent.target = event.srcElement; objEvent.keyCode = event.keyCode; objEvent.charCode = event.keyCode; objEvent.ctrlKey = event.ctrlKey; klavesnice(objEvent); } ); Dalˇs´ı v´ yraznou zmˇenou bylo nahrazen´ı pomˇernˇe sloˇzit´e detekce prohl´ıˇzeˇce, kter´a bohuˇzel s ned´avn´ ym vyd´an´ım nov´e verze prohl´ıˇzeˇce Firefox (verze 4) pˇrestala korektnˇe fungovat a konkr´etnˇe tuto novou verzi Firefoxu detekovala ˇspatnˇe. JQuery poskytuje pro detekci prohl´ıˇzeˇce podporu v podobˇe atributu glob´aln´ıho jQuery objektu. K tomuto atributu lze pˇristoupit dvˇema zp˚ usoby, klasick´ ym z´apisem jQuery.browser nebo zkr´acen´ ym $.browser. Obsahem atributu jsou flagy identifikuj´ıc´ı jednotliv´e prohl´ıˇzeˇce. Pˇri zobrazen´ı kv´ızu v prohl´ıˇzeˇci bude definov´an flag, kter´emu prohl´ıˇzeˇc odpov´ıd´a. Jelikoˇz je pˇri testov´an´ı d˚ uleˇzit´e urˇcit, zda je pouˇzit´ y
4.2
Implementace aplikace
33
prohl´ıˇzeˇc Internet Explorer, napsan´a testovac´ı podm´ınka se pt´a, zda je ˇci nen´ı definov´ana promˇenn´a jQuery.browser.msie, podle kter´e je jiˇz jednoduch´e nastavit odpov´ıdaj´ıc´ı znˇen´ı zpr´avy o ovl´ad´an´ı u ´lohy. Tahac´ı pˇr´ıˇrazov´ an´ı Pˇreps´an´ı obsluˇzn´eho JavaScriptu pro tento e-learningov´ y kv´ız bylo stejnˇe jako v pˇredchoz´ım pˇr´ıpadˇe pomˇernˇe jednoduch´e, ovˇsem rozsah proveden´ ych zmˇen byl mnohem vˇetˇs´ı. Pro zajiˇsten´ı potˇrebn´e interaktivity, kter´a v tomto kv´ızu pˇredstavuje moˇznost pˇretahov´an´ı r˚ uzn´ ych prvk˚ u na str´ance a jejich umist’ov´an´ı do ˇr´adk˚ u tabulky, byla pouˇzita knihovna jQuery UI. Ta poskytuje n´astroje pro vytvoˇren´ı nejr˚ uznˇejˇs´ıch animac´ı, zajiˇstˇen´ı interakce a vytvoˇren´ı prvk˚ u uˇzivatelsk´eho rozhran´ı jako jsou di5 alogov´a okna, teplomˇery pr˚ ubˇehu apod. Jedn´ım z dostupn´ ych prvk˚ u poskytuj´ıc´ı interaktivitu, kter´ y je pouˇzit v tomto kv´ızu, je pˇretahovateln´ y a upustiteln´ y6 objekt. Vˇetˇsina p˚ uvodn´ıch funkc´ı, kter´e v dodan´ ych pˇr´ıkladech zajiˇstovaly celkovou funkcionalitu a umoˇzn ˇovaly pˇretahovat elementy na str´ance, byly zcela nahrazeny knihovnou jQuery UI. Urˇcit´a ˇc´ast p˚ uvodn´ıch funkc´ı byla na druhou stranu zachov´ana a byly pouze lehce upraveny pro potˇreby jejich pouˇzitelnosti s touto knihovnou. Poloˇzk´am nesetˇr´ıdˇen´eho seznamu obsahuj´ıc´ı odpovˇedi, kter´e je nutn´e pˇriˇradit k odpov´ıdaj´ıc´ım kl´ıˇc˚ um, je pomoc´ı metody hybaci pˇriˇrazena tˇr´ıda draggable. Jak je vidˇet v dokumentaci (jQuery UI, 2011), pˇri povolov´an´ı pˇretahovatelnosti elementu je k dispozici cel´a ˇsk´ala moˇzn´ ych nastaven´ı ovlivˇ nuj´ıc´ı chov´an´ı pˇretahovan´eho objektu a je moˇzn´e nav´azat vlastn´ı funkce na celkem ˇctyˇri ud´alosti, spojen´e s pˇretahov´an´ım dan´eho prvku. Oproti p˚ uvodn´ı funkˇcnosti je d´ıky snadn´emu nastaven´ı pohyblivost vˇsech element˚ u omezena pouze na element body, aby nebylo moˇzn´e vyt´ahnout prvek mimo str´anku a zp˚ usobit tak jej´ı nekoneˇcn´e skrolov´an´ı. Dalˇs´ımi nastaven´ımi jsou jiˇz realizov´any konkr´etn´ı uˇzivatelsk´a nastaven´ı, kter´a lze pˇri vytv´aˇren´ı tohoto kv´ızu vyplnit (jde o tˇela vlastn´ıch JS funkc´ı, kter´e jsou tak automaticky nav´az´any na dan´e ud´alosti). Druh´ ym interaktivn´ım prvkem na str´ance s t´ımto kv´ızem jsou buˇ nky tabulky, do kter´ ych je nutn´e jednotliv´e odpovˇedi um´ıstit. K relizaci tohoto interativn´ıho prvku knihovna opˇet poskytuje efektivn´ı n´atroje (jQuery UI, 2011). Z dokumentace lze vyˇc´ıst, jak´ ym zp˚ usobem lze modifikovat chov´an´ı dan´ ych prvk˚ u a na jak´e ud´alosti lze nav´azat vlastn´ı funkce. Jednotliv´e buˇ nky tabulky, kter´e jsou uloˇzeny v poli c´ıl˚ u, kter´e z´aroveˇ n slouˇz´ı k vyhodnocov´an´ı spr´avnosti um´ıstˇen´ı odpovˇedi, jsou proch´azeny v cyklu a na nˇe aplikov´ana droppable funkce s n´asleduj´ıc´ım nastaven´ım. Jako pˇrij´ıman´ y prvek je pouˇzit selektor tˇr´ıdy draggable, kter´a je nastavena u vˇsech odpovˇed´ı. Pokud by se tedy na str´ance objevil i jin´ y pˇretahovateln´ y prvek, kter´ y by nemˇel danou tˇr´ıdu, neˇslo by jej do buˇ nek v tabulce um´ıstit. Pˇri ud´alosti aktivace a deaktivace, tj. v okamˇziku, kdy zaˇcnou a skonˇc´ı pˇrijateln´e prvky b´ yt pˇretahov´any, jsou nav´az´any anonymn´ı funkce, ve kter´ ych doch´az´ı k pˇrebarvov´an´ı 5 6
Progress bary. Draggable a droppable.
4.2
Implementace aplikace
34
pozad´ı dan´ ych buˇ nek podle uˇzivatelsk´ ych nastaven´ı. Stejn´ ym zp˚ usobem doch´az´ı ke zmˇenˇe barev i pro ud´alosti najet´ı odpovˇedi nad buˇ nku tabulky a pˇri odchodu odpovˇedi z buˇ nky (hover efekt). Samotn´e vyhodnocov´an´ı spr´avnosti um´ıstˇen´ı odpovˇedi je nav´az´ano na ud´alost upuˇstˇen´ı odpovˇedi do pˇr´ısluˇsn´e buˇ nky. Vyhodnocovac´ı metoda je velice podobn´a p˚ uvodn´ımu znˇen´ı. Jako prvn´ı se nav´ yˇs´ı poˇcet pokus˚ u, za kter´ ym n´asleduje kontrola spr´avnosti um´ıstˇen´ı. Pˇri kladn´em vyhodnocen´ı jsou odpovˇedi a c´ılu nastaveny potˇrebn´e stylov´e vlastnosti a jsou provedeny potˇrebn´e zmˇeny v DOM stromu. Pˇretahovateln´ y prvek a oblast pro um´ıstˇen´ı jsou deaktivov´any, aby s nimi jiˇz nebylo moˇzn´e manipulovat. D´ale je nav´ yˇseno poˇcitadlo spr´avn´ ych pokus˚ u, zobrazeny alertov´e zpr´avy a pˇr´ıpadnˇe spuˇsten uˇzivatelem definovan´ y JS k´od. Pˇri opaˇcn´em vyhodnocen´ı jsou opˇet podle uˇzivatelsk´ ych nastaven´ı zobrazeny moˇzn´e zpr´avy a spouˇstˇen uˇzivatelsk´ y JS k´od. Pot´e n´asleduje kontrola vyplnˇen´ı cel´eho kv´ızu (poˇcitadlo spr´avn´ ych pokus˚ u je stejn´e jako poˇcet odpovˇed´ı). Pokud je kv´ız u ´spˇeˇsnˇe dokonˇcen, je proveden v´ ypoˇcet u ´spˇeˇsnosti pˇri ˇreˇsen´ı u ´lohy a znovu podle nastaven´ı, kter´e provedl uˇzivatel pˇri vytv´aˇren´ı u ´lohy, dojde k zobrazen´ı zpr´av, manipulaci s DOMem a proveden´ı vlastn´ıho JS k´odu. 4.2.3
Funkˇ cn´ı n´ aplˇ n presenter˚ u
Kaˇzd´ y presenter obstar´av´a urˇcitou skupinu uˇzivatelov´ ych poˇzadavk˚ u na aplikaci, kter´e spolu logick´ ym zp˚ usobem souvis´ı. Metody presenter˚ u mohou pˇredstavovat bud’ tzv. pohledy, akce, tov´arniˇcky komponent, zajiˇstˇen´ı obsluhu sign´al˚ u, nebo obsluhu ud´alost´ı souvisej´ıc´ıch s formul´aˇri. V neposledn´ı ˇradˇe mohou b´ yt jeˇstˇe implementov´any metody souvisej´ıc´ı s funkˇcnost´ı presentru jako takov´eho. Patˇr´ı sem napˇr. metoda startup, kter´a se spouˇst´ı pˇri vytv´aˇren´ı presenteru, nebo metoda beforeRender, kter´a se spouˇst´ı pˇred vykreslov´an´ım pohledu. Tˇechto metod samozˇrejmˇe existuje v´ıce, ale jejich popisem se tato pr´ace zab´ yvat nebude.7 BasePresenter BasePresenter neobshauje ˇza´dnou aplikaˇcn´ı logiku a slouˇz´ı pouze jako pˇredek vˇsech ostatn´ıch presenter˚ u. Ve struktuˇre presenter˚ u tak zaj´ım´a polohu v koˇrenu stromov´e struktury. PublicPresenter Tento presenter pˇredstavuje ve struktuˇre pˇredka vˇsech presenter˚ u, kter´e jsou dostupn´e bez pˇrihl´aˇsen´ı uˇzivatele. Opˇet se zde nen´ach´az´ı ˇza´dn´a aplikaˇcn´ı logika. D˚ uvodem vytvoˇren´ı tohoto presenteru je pˇredevˇs´ım zachov´an´ı urˇcit´e ˇcistoty n´avrhu. Jeho zaˇclenˇen´ım ˇza´dn´ ym v´ yrazn´ ym zp˚ usobem nen´ı zvˇetˇsov´ana sloˇzitost aplikace a je jasnˇe definov´an pˇredek pro dalˇs´ı presentery, kter´e mohou v budoucnu aplikaci rozˇs´ıˇrit. Z´aroveˇ n poskytuje prostor, do kter´eho lze kdykoliv doplnit jak´ ykoliv k´od, kter´ y by byl vyˇzadov´an pro vˇsechny veˇrejn´e str´anky aplikace. 7
Podrobnosti lze naj´ıt v dokumentaci Nette na adrese http://http://doc.nette.org/cs/.
4.2
Implementace aplikace
35
HomepagePresenter Jak bylo uvedeno dˇr´ıve, tento presenter pln´ı funkci domovsk´e str´anky cel´e aplikace. Funkc´ım, kter´e jsou uˇzivateli na domovsk´e str´ance aplikace dostupn´e, tedy odpov´ıdaj´ı i implementovan´e metody tohoto presenteru. Vytv´aˇr´ı se zde celkem dvˇe komponenty, kter´e jsou n´aslednˇe pouˇzity ve dvou pohledech. Jedn´a se o pˇrihlaˇsovac´ı a registraˇcn´ı formul´aˇr. Pro obsluhu ud´alost´ı spojen´ ych s tˇemito formul´aˇri jsou implementov´any metody, kter´e reaguj´ı na stisknut´ı konkr´etn´ıch tlaˇc´ıtek formul´aˇr˚ u. Ud´alost obecn´eho odesl´an´ı formul´aˇre nen´ı ani pro jeden z nich obsluhov´ana ˇz´adnou metodou. Na v´ ychoz´ı str´ance tohoto presenteru je zobrazen seznam uloˇzen´ ych u ´loh a pˇrihlaˇsovac´ı formul´aˇr. Pˇri velk´em poˇctu u ´loh je jejich v´ ypis str´ankov´an. V metodˇe vykresluj´ıc´ı domovskou str´anku je tedy proveden v´ ypoˇcet, od kolik´at´e u ´lohy se bude aktu´aln´ı str´anka u ´loh zobrazovat. Tento poˇcet (spolu s dalˇs´ımi promˇenn´ ymi) je pˇred´an metodˇe modelu u ´loh, kter´ y vr´at´ı potˇrebn´e z´aznamy z datab´aze, jeˇz jsou v odpov´ıdaj´ıc´ı ˇsabolnˇe vykresleny. Princip zobrazov´an´ı jednotliv´ ych u ´loh, kter´e zajiˇst’uje dalˇs´ı vykreslovac´ı metoda, bude podrobnˇe pops´an ve zvl´aˇstn´ı kapitole. PrivatePresenter ´ celem tohoto presenteru je zajistit proveden´ı veˇsker´eho k´odu aplikaˇcn´ı logiky, Uˇ kter´ y je nutn´e prov´est pro soukromou ˇca´st aplikce. Ta je pˇr´ıstupn´a uˇzivatel˚ um po pˇrihl´aˇsen´ı. Z pˇredchoz´ı vˇety lze snadno odvodit, jak´ y k´od se bude pˇri spouˇstˇen´ı potomk˚ u PrivatePresenteru prov´adˇet. Prov´adˇen´ y k´od je velmi jednoduch´ y a pˇr´ımoˇcar´ y. Probˇehne kontrola toho, zda je uˇzivatel pˇrihl´aˇsen. Pokud nen´ı, tak je pˇresmˇerov´an na domovskou str´anku aplikace, kde je zobrazen pˇrihlaˇsovac´ı formul´aˇr. Pˇri kontrole pˇrihl´aˇsen´ı prob´ıh´a jeˇstˇe kontrola d˚ uvodu odhl´aˇsen´ı uˇzivatele. Aplikace totiˇz automaticky uˇzivatele po 30 minut´ach neaktivity odhl´as´ı. V takov´em pˇr´ıpadˇe je tˇreba uˇzivateli zobrazit upozornˇen´ı, proˇc byl aplikac´ı odhl´aˇsen. Pro vˇsechny tyto kontroly a zobrazen´ı zpr´avy poskytuje framework potˇrebn´e prostˇredky. UzivatelPresenter Uˇzivatelsk´ y presenter implementuje pouze nˇekolik m´alo metod. Prvn´ı z nich je metoda pro vykreslen´ı v´ ychoz´ıho pohledu, kter´ y zobrazuje seznam vˇsech uˇzivatelov´ ych u ´loh. Obdobnˇe jako na domovsk´e str´ance je v´ ypis pro vˇetˇs´ı pˇrehlednost str´ankov´an a metoda tak opˇet prov´ad´ı potˇrebn´ y v´ ypoˇcet, jehoˇz v´ ystupn´ı promˇenn´e jsou pˇred´av´any metodˇe modelu u ´loh, vracej´ıc´ı adekv´atn´ı z´aznamy z datab´aze. Zobrazov´an´ı u ´loh je uˇzivateli samozˇrejmˇe umoˇznˇeno stejnˇe jako na domovsk´e str´ance aplikace. Jelikoˇz probl´em vykreslov´an´ı u ´lohy ˇreˇs´ı HomepagePresenter a zobrazen´ı u ´lohy pro pˇrihl´aˇsen´eho uˇzivatele se nijak neliˇs´ı, nemus´ı b´ yt stejn´a metoda implementov´ana i v uˇzivatelsk´em presenteru. M´ısto toho se zobrazov´an´ı u ´lohy pˇrenech´a
4.2
Implementace aplikace
36
na starost presenteru dom´ac´ı str´anky, na kter´ y se v ˇsablonˇe uˇzivatelsk´e str´anky pouze patˇriˇcnˇe odk´aˇzeme. Jelikoˇz m˚ uˇze uˇzivatel sv´e uloˇzen´e u ´lohy mazat, je implementov´ana metoda, kter´a tuto operaci prov´ad´ı. Maz´an´ı nen´ı tˇreba realizovat dalˇs´ım pohledem, a proto je prov´adˇeno v metodˇe obsluhuj´ıc´ı sign´al smaz´an´ı u ´lohy. Pˇri ne´ uspˇeˇsn´em pokusu o smaz´an´ı u ´lohy se zobrazuje chybov´a hl´aˇska, pˇri u ´spˇeˇsn´em se zobrazuje zpr´ava informuj´ıc´ı o u ´spˇeˇsn´em smaz´an´ı u ´lohy. UlohaPresenter Presenter u ´lohy je pˇredkem vˇsech typ˚ u kv´ız˚ u, kter´e je v aplikaci moˇzn´e vytv´aˇret. Obsahuje celou ˇradu metod a atribut˚ u, kter´e zajiˇst’uj´ı veˇskerou apikaˇcn´ı logiku spojenou s vytv´aˇren´ım u ´lohy, jako je kontrola opr´avnˇen´ı pˇr´ıstupu do na sebe navazuj´ıc´ıch ˇc´ast´ı tvorby kv´ızu, uchov´av´an´ı hodnot, jejich nastavov´an´ı a pˇren´aˇsen´ı mezi str´ankami atd. Metoda startup, kter´a se spouˇst´ı pˇri vytv´aˇren´ı presenteru (tento presenter je abstraktn´ı, takˇze nelze vytv´aˇret jeho instance a slouˇz´ı pouze jako pˇredek pro konkr´etn´ı typy kv´ız˚ u, v jejichˇz metodˇe startup se spouˇst´ı metoda pˇredka), vykon´av´a hned nˇekolik d˚ uleˇzit´ ych u ´kon˚ u, bez kter´ ych by vytv´aˇren´ı nov´ ych kv´ız˚ u nebylo moˇzn´e. Nejdˇr´ıve se z´ısk´a objekt reprezentuj´ıc´ı uˇzivatelovu session – resp. jej´ı ˇca´st pro dan´ y kv´ız. V session jsou uchov´av´any hodnoty formul´aˇr˚ u, do kter´ ych uˇzivatel zad´av´a pˇri vytv´aˇren´ı u ´lohy potˇrebn´e hodnoty. D˚ uvodem pro uchov´av´an´ı hodnot do session je rozˇclenˇen´ı cel´eho procesu tvorby na d´ılˇc´ı ˇc´asti, pˇriˇcemˇz kaˇzd´a se odehr´av´a na ˇ sv´e vlastn´ı str´ance, mezi kter´ ymi je tˇreba hodnoty pˇren´aˇset. Rada prvk˚ u se pro kaˇzd´ y kv´ız jmenuje stejnˇe, napˇr. n´azev kv´ızu nebo jeho popis. Aby nedoch´azelo k pˇrekr´ yv´an´ı tˇechto stejnˇe pojmenovan´ ych hodnot mezi r˚ uzn´ ymi typy kv´ız˚ u, jsou v session pouˇzity jmenn´e prostory. Jejich pojmenov´an´ı odpov´ıd´a n´azvu presenteru dan´eho typu u ´lohy. Dalˇs´ım krokem je pˇr´ıpadn´e vymaz´an´ı hodnot, kter´e jsou moment´alnˇe v session ˇ stˇen´ı uloˇzeny. Tento reset se prov´ad´ı na z´akladˇe nastaven´ı parametru reset. Ciˇ hodnot se prov´ad´ı napˇr. vˇzdy pˇri zaˇc´atku vytv´aˇren´ı nov´e u ´lohy. D´ale se prov´ad´ı vytv´aˇren´ı promˇenn´ ych v session potˇrebn´ ych pro uchov´av´an´ı hodnot z formul´aˇr˚ u. Toto vytv´aˇren´ı a nastavov´an´ı v´ ychoz´ıch hodnot je podm´ınˇeno neexistenc´ı tˇechto promˇenn´ ych. Jelikoˇz m˚ uˇze uˇzivatel vytvoˇren´e u ´lohy pozdˇeji kdykoliv upravovat, je tˇreba naˇc´ıst uloˇzen´e hodnoty z datab´aze. To obstar´av´a dalˇs´ı ˇca´st k´odu, pˇriˇcemˇz vˇse je podm´ınˇeno nastaven´ım parametru update, kter´ y obsahuje identifik´ator upravovan´e u ´lohy. V z´avˇeru prov´adˇen´ı cel´e metody jsou nastavov´any hodnoty atribut˚ um presenteru. Dalˇs´ı metody se staraj´ı o manipulaci s hodnotami uchov´av´an´ ych v session. Prvn´ı dvˇe metody ukl´ad´aj´ı hodnoty z formul´aˇre do session. Navz´ajem se liˇs´ı pouze v pˇred´avan´em parametru, kdy jedna obdrˇz´ı objekt reprezentuj´ıc´ı samotn´ y formul´aˇr a druh´a objekt odes´ılac´ıho tlaˇc´ıtka formul´aˇre. Datov´a struktura, ve kter´e jsou data v sesion uchov´av´ana, je asociativn´ı pole, kde kaˇzd´a poloˇzka pˇredstavuje hodnoty
4.2
Implementace aplikace
37
z jednoho formul´aˇre a kl´ıˇcem je n´azev tohoto formul´aˇre. Hodnoty z formul´aˇre jsou opˇet uchov´av´any jako asociativn´ı pole, kde kl´ıˇci jsou n´azvy prvk˚ u formul´aˇre a jejich hodnoty jsou hodnoty dan´ ych prvk˚ u. Jednotliv´e hodnoty je tˇreba po jejich uloˇzen´ı do session (pˇri dalˇs´ım zobrazen´ı str´anky) naˇc´ıst do formul´aˇre, coˇz obstar´av´a metoda, kter´a si na z´akladˇe jm´ena argumentem pˇredan´eho formul´aˇre najde hodnoty v session a nastav´ı je prvk˚ um formul´aˇre. D´ıky rozdˇelen´ı procesu vytv´aˇren´ı kv´ızu na nˇekolik na sebe navz´ajem navazuj´ıc´ıch formul´aˇr˚ u je tˇreba zajistit kontrolu pˇr´ıstupu a zabr´anit tak uˇzivateli v pˇr´ıstupu k n´asleduj´ıc´ım frormul´aˇr˚ um bez toho, aby vyplnil pˇredchoz´ı. Tato kontrola je implementov´ana opˇet metodou presenteru a vyuˇz´ıv´a n´asleduj´ıc´ı princip. Kaˇzd´ y z presenter˚ u pˇredstavuj´ıc´ı gener´ator kv´ızu mus´ı m´ıt definov´an atribut workflow. Jedn´a se o jednoduch´e pole, jehoˇz obsahem jsou n´azvy pohled˚ u,8 na kter´ ych jsou um´ıstˇeny jednotliv´e formul´aˇre pˇresnˇe v tom poˇrad´ı, v jak´em po sobˇe n´asleduj´ı pˇri samotn´em vytv´aˇren´ı nov´eho kv´ızu. Pˇri pˇr´ıstupu na nˇekter´ y z pohled˚ u tedy probˇehne pˇres atribut workflow zjiˇstˇen´ı, zda jiˇz jsou v session uloˇzeny hodnoty z pˇredchoz´ıch formul´aˇr˚ u. Pokud hodnoty nejsou nalezeny, je uˇzivatel pˇresmˇerov´an na posledn´ı nevyplnˇen´ y formul´aˇr a o pˇresmˇerov´an´ı je informov´an pˇr´ısluˇsnou zpr´avou. Samotn´a kontrola je volan´a vˇzdy v metodˇe, kter´a se automaticky spouˇst´ı pˇred vykreslen´ım jak´ehokoliv pohledu dan´eho presenteru. V t´eto metodˇe doch´az´ı i k nastavov´an´ı nadpis˚ u. Toto nastavov´an´ı prob´ıh´a na z´akladˇe aktu´aln´ıho pohledu, podle kter´eho se vybere odpov´ıdaj´ıc´ı nadpis a zobraz´ı se do ˇsablony. Vˇsechny nadpisy jsou uchov´av´any stejn´ ym zp˚ usobem jako n´azvy pohled˚ u ve workflow, a to v atributu menu. Zobrazen´ı nadpis˚ u m´a jasn´ y u ´ˇcel – usnadnit uˇzivateli orientaci mezi formul´aˇri. Ukl´ad´an´ı vytvoˇren´ ych kv´ız˚ u na HDD prob´ıh´a na zvl´aˇstn´ım pohledu, kter´ y je pro vˇsechny u ´lohy stejn´ y. Aplikace je postavena tak, ˇze na konci vytv´aˇren´ı kaˇzd´e u ´lohy je fin´aln´ı str´anka/pohled s povinn´ ym n´azvem u ´loha. Tento pohled zobrazuje pr´avˇe vytvoˇrenou u ´lohu. Podrobnˇejˇs´ı popis zp˚ usobu vykreslov´an´ı bude n´asledovat v kapitole Vykreslov´an´ı u ´lohy. Samotn´e uloˇzen´ı u ´lohy lze prov´est bud’ na domovsk´e uˇzivatelsk´e str´ance, kde je pro tento u ´ˇcel um´ıstˇen odkaz v pˇrehledu uˇzivatelov´ ych u ´loh, nebo rovnou pˇri vytv´aˇren´ı u ´lohy, a to na fin´aln´ı str´ance, kter´a zobrazuje vytvoˇrenou u ´lohu. Pohled pro uloˇzen´ı oˇcek´av´a parametr id, jehoˇz v´ ychoz´ı hodnota je nastavena na NULL. Pokud je tedy id zad´ano, dojde k naˇcten´ı u ´lohy z datab´aze. Neˇz se str´anka zobraz´ı, doch´az´ı k nastaven´ı speci´aln´ıho layoutu, d´ıky kter´emu nebude ve staˇzen´e str´ance zobrazen HTML k´od patˇr´ıc´ı k aplikaci gener´atoru. Zobrazen´ı str´anky ale pˇredch´az´ı jeˇstˇe odesl´an´ı nˇekolika HTTP hlaviˇcek, kter´e donut´ı prohl´ıˇzeˇc str´anku st´ahnout uˇzivateli na disk m´ısto jej´ıho zobrazen´ı v oknˇe prohl´ıˇzeˇce. Oproti tomu ukl´ad´an´ı u ´lohy do datab´aze nevyˇzaduje ˇz´adnou zv´aˇstn´ı reˇzii. Pouze se vytvoˇr´ı potˇrebn´a datov´a struktura, kter´a se jednoduch´ ym vkl´adac´ım dotazem, kter´ y je definovan´ y v modelu u ´loh, uloˇz´ı do datab´aze. Pˇri tomto ukl´ad´an´ı se pouze kontroluje nastaven´ı parametru id, kter´ y signalizuje aktualizaci existuj´ıc´ıho z´aznamu 8
Tyto n´ azvy se nav´ıc shoduj´ı s n´ azvy formul´aˇr˚ u – komponent.
4.2
Implementace aplikace
38
u ´lohy v datab´azi. Po u ´spˇeˇsn´em uloˇzen´ı jsou hodnoty vymaz´any ze session a uˇzivatel je pˇresmˇerov´an na uˇzivatelskou str´anku. Posledn´ı metodou je obecnˇe definovan´a ud´alost kliknut´ı tlaˇc´ıtka zpˇet ve formul´aˇri. Zde opˇet najde uplatnˇen´ı atribut workflow, pomoc´ı kter´eho se zjist´ı pohled, kter´ y pˇredch´az´ı pohledu st´avaj´ıc´ımu a pˇresmˇeruje na nˇej uˇzivatele. Jak je vidˇet, presenter u ´lohy implementuje vˇsechny potˇrebn´e metody, kter´e jsou pro spr´avnou funkˇcnost gener´atoru konkr´etn´ı u ´lohy nezbytn´e. Z´aroveˇ n jsou nˇekter´e metody implementov´any dostateˇcnˇe obecnˇe tak, aby bezprobl´emovˇe fungovaly a poskytly pro kaˇzdou z u ´loh solidn´ı z´aklad. Jednu ze stˇeˇzejn´ıch metod, jej´ımˇz u ´kolem je zpracov´an´ı vˇsech nastaven´ı dan´e u ´lohy, bohuˇzel nebylo moˇzn´e implementovat zde v pˇredkovi. Tento probl´em ˇreˇs´ı rozhran´ı, kter´e mus´ı kaˇzd´ y z presenter˚ u konkr´etn´ı u ´lohy implementovat pro sv´e spr´avn´e fungov´an´ı. Podrobnˇeji bude vˇse vysvˇetleno v jedn´e z n´asleduj´ıc´ıch kapitol. Pˇri popisu presenter˚ u pro konkr´etn´ı u ´lohy se budou popisovat pouze implementace metody zm´ınˇen´eho rozhran´ı a jednotliv´e formul´aˇre neboli komponenty, jelikoˇz t´emˇeˇr vˇsechna aplikaˇcn´ı logika je dˇedˇena z presenteru u ´loh. Konkr´etn´ı u ´lohy tak obsahuj´ı pouze implementace metod vytv´aˇrej´ıc´ı potˇrebn´e komponenty a reakce na stisk tlaˇc´ıtek, definovan´ ych v tˇechto komponent´ach. KrizovkaPresenter Gener´ator e-learningov´e u ´lohy kˇr´ıˇzovky obsahuje celkem pˇet formul´aˇr˚ u, kter´e mus´ı uˇzivatel pro vytvoˇren´ı nov´e kˇr´ıˇzovky vyplnit. Nejdˇr´ıve se vyplˇ nuj´ı obecn´e parametry u ´lohy, mezi kter´e patˇr´ı n´azev, popis a poˇcet ˇra´dk˚ u kˇr´ıˇzovky. Zejm´ena poˇcet ˇra´dk˚ u je d˚ uleˇzit´ y, protoˇze od nˇej se bude odv´ıjet zejm´ena mnoˇzstv´ı ostatn´ıch nastaven´ı. Komponenta prvn´ıho formul´aˇre tedy obsahuje pouze jednoduch´e prvky, jsou to dvˇe pole pro text a jedna oblast pro text. Hned v druh´em kroku je nutn´e zadat samotnou n´aplˇ n kˇr´ıˇzovky. Uˇzivatel si zde tedy vol´ı legendu a odpovˇedi pro jednotliv´e ˇr´adky kˇr´ıˇzovky a mus´ı samozˇrejmˇe urˇcit, kolik´at´e p´ısmeno v odpovˇedi bude souˇc´ast´ı tajenky. Zde je tedy nutn´e zajistit kontrolu zadan´e pozice, kter´a mus´ı b´ yt v rozmez´ı d´elky odpovˇedi (tj. interval od jedn´e do poˇctu p´ısmen odpovˇedi vˇcetnˇe). Pro realizov´an´ı t´eto kontroly (bohuˇzel v Nette, kter´e poskytuje celou ˇradu pˇreddefinovan´ ych validaˇcn´ıch pravidel pro nejpouˇz´ıvanˇejˇs´ıch testy uˇzivatelsk´ ych vstup˚ u, jako kontrola vyplnˇen´ı pole, vynucen´ı typu ˇc´ısla nebo vyhovˇen´ı regul´arn´ımu v´ yrazu) neexistuje pˇredpˇripraven´e pravidlo. Naˇstˇest´ı je moˇzn´e definovat si vlastn´ı valid´atory. Ty jsou realizov´any jako tˇr´ıdy, jejichˇz metody vrac´ı pravdivostn´ı hodnotu, vyhovˇel nebo nevyhovˇel validaci. Zadan´e pozice jsou tedy kontrolov´any validaˇcn´ı metodou pozice tˇr´ıdy Validator, kter´a jako parametr pˇreb´ır´a hodnotu pole odpovˇedi. V tomto formul´aˇri je jeˇstˇe moˇzn´e zadat znˇen´ı hlavn´ı legendy pro celou kˇr´ıˇzovku, v jej´ımˇz textu mus´ı b´ yt ve sloˇzen´ ych z´avork´ach uvedeno velk´ ymi p´ısmeny znˇen´ı tajenky. Pˇri vyplnˇen´ı hlavn´ı legendy je tedy tˇreba zkontrolovat, zda uveden´a tajenka souhlas´ı s vyznaˇcen´ ymi p´ısmeny v odpovˇed´ıch. Zde se opˇet vyuˇzije dˇr´ıve pouˇzit´a validaˇcn´ı tˇr´ıda, ve kter´e je implementov´ana metoda tajenka, jej´ımˇz argumentem je pole pozic a odpovˇed´ı, na z´akladˇe kter´ ych se provede porovn´an´ı a vyhodnocen´ı spr´avnosti.
4.2
Implementace aplikace
39
Jako dalˇs´ı je na ˇradˇe stanoven´ı vzhledu kˇr´ıˇzovky. Pˇr´ısluˇsn´a komponenta nen´ı nijak sloˇzit´a a odpov´ıdaj´ı tomu i pouˇzit´a validaˇcn´ı pravidla. Vˇsechny barvy je nutn´e zad´avat v hexadecim´aln´ım tvaru, kter´ y je uvozen mˇr´ıˇzkou (#). Pro kontrolu zadan´eho tvaru jsou pouˇzity regul´arn´ı v´ yrazy. Aby byl v´ ybˇer barvy pro uˇzivatele co nejjednoduˇsˇs´ı, je pouˇzit JavaScript, kter´ y vˇsechna textov´a pole promˇen´ı na GUI widget pro v´ ybˇer barvy, kter´ y je zn´am´ y z grafick´ ych editor˚ u. Vˇsem textov´ ym pol´ım je tedy pˇriˇrazena potˇrebn´a tˇr´ıda, pomoc´ı kter´e JavaScript identifikuje dan´a pole. N´aslednˇe je nutn´e nastavit zp˚ usob n´apovˇedy. Automaticky je nastavena moˇznost n´apovˇedy n´asleduj´ıc´ıho p´ısmene. Tv˚ urce kˇr´ıˇzovky m˚ uˇze nastavit i n´apovˇedu formou druh´e, dodateˇcn´e legendy, kterou si m˚ uˇze ˇreˇsitel u ´lohy zobrazit. Pˇri definov´an´ı komponenty byla pouˇzita podm´ınˇen´a pravidla validace, kter´a Nette umoˇzn ˇuje snadno pouˇz´ıt. Pˇri zaˇskrtnut´ı zapnut´ı druh´e legendy bude nutn´e vyplnit znˇen´ı druh´e legendy pro kaˇzd´ y ˇr´adek tajenky. V opaˇcn´em pˇr´ıpadˇe jejich vyplnˇen´ı aplikace samozˇrejmˇe nevyˇzaduje. Nette nav´ıc zaˇr´ıd´ı automatick´e skr´ yv´an´ı a zobrazov´an´ı tˇechto prvk˚ u na z´akladˇe hodnoty zaˇskrt´avac´ıho pol´ıˇcka pro zapnut´ı druh´e legendy. Posledn´ım krokem pˇri vytv´aˇren´ı je nastaven´ı JavaScriptov´ ych ud´alost´ı. U kˇr´ıˇzovky jsou identifikov´any ud´alosti prvn´ıho kliknut´ı na ˇra´dek, spr´avn´e vyplnˇen´ı odpovˇedi, ˇspatn´e vyplnˇen´ı odpovˇedi a spr´avn´e vyplnˇen´ı cel´e kˇr´ıˇzovky. Pro kaˇzdou z tˇechto ud´alost´ı m´a uˇzivatel moˇznost nastavit bud’ znˇen´ı alertov´e zpr´avy, napsat tˇelo vlastn´ı JavaScriptov´e funkce nebo na ud´alosti nenavazovat ˇza´dnou akci. Implementace metody rozhran´ı zpracov´av´a zadan´e hodnoty do ˇsablony n´asleduj´ıc´ım zp˚ usobem. Vˇsechny hodnoty z formul´aˇr˚ u jsou do ˇsablony vkl´ad´any ve stejn´e datov´e struktuˇre, v jak´e jsou z´ısk´any pˇr´ımo z formul´aˇre. Vyj´ımkou jsou data z druh´eho formul´aˇre, kter´a jsou, pro lepˇs´ı pr´aci v ˇsablonˇe, roztˇr´ıdˇen´a do zvl´aˇstn´ıch promˇenn´ ych. Vˇsechny legendy a odpovˇedi jsou um´ıstˇeny do stejnˇe pojmenovan´ ych promˇenn´ ych. D´ale zde doch´az´ı k urˇcen´ı pozice sloupce tajenky, k nastaven´ı hlavn´ı legendy, ve kter´e je m´ısto tajenky um´ıstˇen poˇcet teˇcek odpov´ıdaj´ıc´ı d´elce tajenky. Jako posledn´ı zde doch´az´ı k rozˇs´ıˇren´ı jednotliv´ ych odpovˇed´ı o mezery, kter´e pˇredch´az´ı samotn´emu slovu. Tento poˇcet mezer odpov´ıd´a poˇctu buˇ nek v kˇr´ıˇzovce, kter´e pln´ı funkci odsazen´ı slova, aby byla p´ısmena tajenky pˇresnˇe zarovnan´a pod sebou do sloupce. TahaciPrirazovaniPresenter Komponenty, kter´e je tˇreba pro gener´ator tohoto e-learningov´eho kv´ızu definovat, budou velmi podobn´e komponent´am kˇr´ıˇzovky. Jako prvn´ı je pˇri vytv´aˇren´ı tˇreba opˇet definovat z´akladn´ı parametry jako je n´azev u ´lohy, voliteln´ y popis a povinn´ y poˇcet prvk˚ u, kter´e bude ˇreˇsitel kv´ızu pˇriˇrazovat ke kl´ıˇc˚ um. V dalˇs´ım formul´aˇri se nastavuj´ı konkr´etn´ı prvky u ´lohy. Podle zadan´eho poˇctu prvk˚ u v pˇredchoz´ım kroku mus´ı nyn´ı uˇzivatel vyplnit znˇen´ı odpovˇedi a kl´ıˇc, kter´ y k dan´e odpovˇedi n´aleˇz´ı. Volitelnˇe m˚ uˇze jeˇstˇe vyplnit zad´an´ı u ´lohy. Pokud ale zad´an´ı nevypln´ı, bude ve v´ ysledn´em kv´ızu pouˇzito v´ ychoz´ı, obecnˇe formulovan´e zad´an´ı u ´kolu. Zde nebyla tˇreba ˇza´dn´a sloˇzitˇejˇs´ı validaˇcn´ı pravidla a pˇri definici byla pouˇzita pˇreddefinovan´a pravidla Nette.
4.2
Implementace aplikace
40
V dalˇs´ım kroku tvorby kv´ızu mus´ı uˇzivatel definovat barevn´ y vzhled jednotliv´ ych prvk˚ u jako jsou barva pozad´ı a p´ısma. Tyto barevn´e kombinace se vztahuj´ı k r˚ uzn´ ym stav˚ um aplikace (napˇr. pˇretahov´an´ı odpovˇedi myˇs´ı), kter´e jsou d´ale nastavov´any v posledn´ım formul´aˇri JavaScriptov´ ych ud´alost´ı. Mnoˇzstv´ı tˇechto stav˚ u je o pozn´an´ı bohatˇs´ı neˇz u pˇredeˇsl´e kˇr´ıˇzovky. Je to d´ano pˇredevˇs´ım povahou kv´ızu. Uˇzivatel zde m´a moˇznost definovat, jak´ ym zp˚ usobem bude zobrazeno zad´an´ı u ´lohy nebo jej´ı ovl´ad´an´ı, a to bud’ formou alert zp´avy, zobrazen´ı pˇr´ımo na str´ance s u ´lohou nebo zobrazen´ı zak´aˇze u ´plnˇe. Pˇri jejich zobrazen´ı m´a nav´ıc jeˇstˇe moˇznost volby dodateˇcn´ ych nastaven´ı, kter´e umoˇzn´ı skryt´ı zad´an´ı po splnˇen´ı u ´lohy nebo opˇetovn´e zobrazen´ı zad´an´ı pomoc´ı pˇr´ısluˇsn´eho tlaˇc´ıtka. Dalˇs´ı moˇznosti nastaven´ı se jiˇz vztahuj´ı k r˚ uzn´ ym stav˚ um aplikace. Pro ud´alost pˇretahov´an´ı odpovˇedi lze nastavit, zda se budou (a pˇr´ıpadnˇe kdy) zv´ yrazˇ novat oblasti pro um´ıstˇen´ı odpovˇedi, kter´e tak usnadn´ı ˇreˇsiteli u ´lohy jej´ı ovl´ad´an´ı. D´ale lze zvolit, zda bude pˇretahov´an´ı odpovˇedi zn´azornˇeno pomoc´ı p˚ uvodn´ıho textu nebo se vytvoˇr´ı pomocn´a kopie a nechyb´ı ani moˇznost naps´an´ı tˇela vlastn´ı JS funkce, kter´a se bude vˇzdy bˇehem pˇretahov´an´ı odpovˇedi prov´adˇet. Pro ud´alost spr´avn´eho nebo ˇspatn´eho um´ıstˇen´ı odpovˇedi je moˇzn´e nastavit znˇen´ı alert zpr´avy a kolikr´at se m´a zpr´ava zobrazit, pˇr´ıpadnˇe lze opˇet napsat vlastn´ı JS. Dalˇs´ı nastaven´ı umoˇzn ˇuje upravit chov´an´ı aplikace pˇri splnˇen´ı u ´lohy, kdy lze zobrazit vlastnoruˇcnˇe napsanou zpr´avu formou alertu nebo pˇr´ımo na str´ance a opˇet je moˇzn´e napsat vlastn´ı JS. Jako posledn´ı je moˇzn´e nastavit zobrazen´ı u ´spˇeˇsnosti pˇri plnˇen´ı u ´lohy, kter´e lze (stejnˇe jako zpr´avu pˇri splnˇen´ı u ´lohy) um´ıstit pˇr´ımo do str´anky nebo zobrazit ve formˇe JS alertu. Pˇri definov´an´ı posledn´ıho formul´aˇre bylo pouˇzito mnoho podm´ınˇen´ ych validaˇcn´ıch pravidel, jejich podrobnˇejˇs´ı popis je vˇsak zbyteˇcn´ y, protoˇze se jedn´a o st´ale dokola se opakuj´ıc´ı princip, kter´ y byl pops´an v pˇredchoz´ı kapitole. Implementace metody z rozhran´ı pˇredzpracov´av´a uˇzivatelsk´a nastaven´ı do ˇsablony n´asleduj´ıc´ım zp˚ usobem. Vˇsechny hodnoty jsou do ˇsablony vloˇzeny ve stejn´e datov´e struktuˇre (asociativn´ı pole), kter´e je z´ıskano pˇr´ımo z dan´eho formul´aˇre. Vyj´ımku tvoˇr´ı druh´ y formul´aˇr, ve kter´e jsou nastavov´any kl´ıˇce a odpovˇedi. Hodnoty jsou roztˇr´ıdˇeny do zvl´aˇstn´ıch promˇenn´ ych. Vˇsechny odpovˇedi a kl´ıˇce jsou um´ıstˇeny do stejnˇe pojmenovan´ ych pol´ı pro jednoduˇsˇs´ı iterace nad tˇemito hodnotami. Doch´az´ı zde i k nastavov´an´ı v´ ychoz´ıho znˇen´ı zpr´avy o ovl´ad´an´ı a nastaven´ı obecn´eho znˇen´ı zad´an´ı u ´lohy, pokud jej uˇzivatel nezadal s´am. Jelikoˇz je z povahy u ´lohy logick´e, aby poˇrad´ı kl´ıˇc˚ u v tabulce, pokud moˇzno neodpov´ıdlo poˇrad´ı odpovˇed´ı v seznamu, je zde n´ahodnˇe generov´ano poˇrad´ı odpovˇed´ı v seznamu. To zajist´ı n´ahodn´e rozm´ıstˇen´ı odpovˇed´ı pˇri kaˇzd´em naˇcten´ı u ´lohy. 4.2.4
Zpracov´ an´ı uˇ zivatelsk´ ych nastaven´ı
Vygenerov´an´ı veˇsker´eho k´odu jednotliv´ ych u ´loh se odehr´av´a v posledn´ım kroku tvorby nov´ ych e-learningov´ ych u ´loh. T´ımto posledn´ım krokem je vˇzdy zobrazen´ı pr´avˇe vytvoˇren´e u ´lohy. Jak jiˇz bylo pops´ano v´ yˇse, kaˇzd´ y presenter pˇredstavuj´ıc´ı gener´ator konkr´etn´ıch kv´ız˚ u mus´ı implementovat rozhran´ı IUlohaValuesParser. Toto
4.2
Implementace aplikace
41
rozhran´ı m´a velmi jednoduchou definici, jelikoˇz obsahuje pouze jednu statickou metodu. interface IUlohaValuesParser { public static function parseValues($presenter, $allValues); } Tato metoda slouˇz´ı ke zpracov´an´ı vˇsech uˇzivatelsk´ ych nastaven´ı, kter´a jsou mezi str´ankami gener´atoru pˇren´aˇsena v session. Toto zpracov´an´ı m˚ uˇze jednotliv´a data jakkoliv pozmˇenit nebo s nimi prov´adˇet potˇrebn´e operace, vˇse z´aleˇz´ı od konkr´etn´ıho druhu kv´ızu a sloˇzitosti datov´ ych struktur, se kter´ ymi se pracuje. U obou implementovan´ ych u ´loh spoˇc´ıv´a obecnˇe toto zpracov´an´ı v roztˇr´ıdˇen´ı sloˇzit´ ych asociativn´ıch pol´ı na menˇs´ı jednotky, se kter´ ymi lze v ˇsablonˇe l´epe pracovat. Z´aroveˇ n jsou z dat vytv´aˇreny i nov´e promˇenn´e, jejichˇz hodnot bylo dosaˇzeno nˇejak´ ym v´ ypoˇctem ˇci jinou operac´ı nad daty uˇzivatelsk´ ych nastaven´ı. Konkr´etnˇe byly tyto metody pro jednotliv´e gener´atory pops´any v pˇredchoz´ı kapitole. 4.2.5
Vykreslov´ an´ı u ´lohy
Vykreslen´ı uloˇzen´e u ´lohy v datab´azi je zajiˇst’ov´ano metodou presenteru Homepage, kter´ y nen´ı pˇredkem presenter˚ u konkr´etn´ıch typ˚ u u ´loh. Zahrnut´ı t´eto metody do presenteru domovsk´e str´anky aplikace m´a n´asleduj´ıc´ı d˚ uvod. D´ıky rozdˇelen´ı aplikace na soukromou a veˇrejnou ˇc´ast, jsou presentery pro generov´an´ı nov´ ych u ´loh dostupn´e pouze pro pˇrihl´aˇsen´e uˇzivatele. Nen´ı tedy moˇzn´e pouˇz´ıvat ve veˇrejn´e ˇca´sti aplikace metodu pro vykreslen´ı u ´lohy pˇr´ımo z presenteru dan´eho gener´atoru. Je tedy nutn´e napsat implementaci t´eto metody dostateˇcnˇe obecnˇe, aby bezprobl´emovˇe fungovala pro vˇsechy typy kv´ız˚ u, kter´e jsou a budou implementov´any. Vˇse zajiˇst’ujˇe n´asleduj´ıc´ı k´od. public function renderUloha($id) { $row = Ulohy::fetchSingle($id); eval(’$allValues = ’.$row[’uloha’].’;’); $pres = $row[’typ’]; switch ($pres) { case "Krizovka": KrizovkaPresenter::parseValues( $this, $allValues ); break; case "TahaciPrirazovani": TahaciPrirazovaniPresenter::parseValues(
4.2
42
Implementace aplikace
$this, $allValues ); break; default: $this->flashMessage("Neznamy typ ulohy.", "error"); $this->redirect("default"); break; } $this->template->public = 1; $this->template->dir = $pres; $this->setLayout("uloha"); $this->template->setFile( APP_DIR . "/templates/$pres/uloha.latte" ); } Metoda oˇcek´av´a jako parametr identifik´ator u ´lohy. Ten slouˇz´ı k v´ ybˇeru z´aznamu u ´lohy z datab´aze, kter´ y je realizov´an statickou metodou modelu u ´loh. Vzhledem k tomu, ˇze veˇsker´a nastaven´ı jsou uchov´av´ana jako PHP k´od reprezentuj´ıc´ı datovou strukturu tˇechto nastaven´ı, pomoc´ı funkce eval naˇcteme tuto strukturu do promˇenn´e $allValues. D´ale se do promˇenn´e $pres ukl´ad´a n´azev presenteru zobrazovan´e u ´lohy. Podle presenteru se pot´e zavol´a statick´a metoda pˇripravuj´ıc´ı potˇrebn´e promˇenn´e, kter´e jsou vloˇzeny do ˇsablony. Dalˇs´ı promˇenn´a public slouˇz´ı pro zobrazov´an´ı uˇzivatelsk´ ych tlaˇc´ıtek pro ukl´ad´an´ı kv´ız˚ u. Jako posledn´ı se prov´ad´ı nastaven´ı spr´avn´eho layoutu a spr´avn´e ˇsablony pro zobrazen´ı u ´lohy. Jako v´ ychoz´ı layout se automaticky pouˇz´ıv´a soubor s n´azvem @layout.latte. V tomto souboru je definov´ano rozloˇzen´ı, kter´e se pouˇz´ıv´a pro vˇsechny str´anky aplikace. Toto rozvrˇzen´ı se vˇsak pro zobrazen´ı u ´lohy nehod´ı a je tedy definov´ano zvl´aˇstn´ı rozloˇzen´ı pouˇziteln´e pouze pro zobrazov´an´ı u ´loh. Pˇri nastaven´ı souboru ˇsablony je pouˇzit v´ yˇse uloˇzn´ y n´azev presenteru. Vˇsechny ˇsablony pro dan´e presentery jsou totiˇz uspoˇr´ad´any do podsloˇzek, jejichˇz jm´ena jsou n´azvy pˇr´ısluˇsn´ ych presenter˚ u. Je tedy moˇzn´e velice snadno doc´ılit zobrazov´an´ı vˇsech typ˚ uu ´loh. 4.2.6
Zp˚ usob generov´ an´ı u ´lohy
V t´eto kapitole bude kr´atce pops´an zp˚ usob generov´an´ı e-learningov´e u ´lohy Tahac´ıho pˇriˇrazov´an´ı. Popis druh´eho gener´atoru by byl pˇr´ıliˇs podobn´ y, a proto bude demonstrativnˇe pops´an pouze jeden. Z pohledu uˇzivatele vypad´a cel´ y proces jako nˇekolika str´ankov´ y formul´aˇr, do kter´eho jsou vyplˇ nov´any potˇrebn´e hodnoty, na z´akladˇe kter´ ych je v posledn´ım kroku vytv´aˇren´ı nov´e u ´lohy vygenerov´ana HTML str´anka s e-learningovou u ´lohou. Realizace v PHP k´odu je d´ıky pouˇzit´ı Nette frameworku pomˇernˇe jednoduch´a, ale pro
4.2
Implementace aplikace
43
spr´avnou funkˇcnost a zajiˇstˇen´ı kompatibility se samotnou aplikac´ı je tˇreba dodrˇzet nˇekolik krok˚ u. Pˇri vytv´aˇren´ı nov´eho gener´atoru je tak nejd˚ uleˇzitˇejˇs´ı zajistit dˇedˇen´ı veˇsker´e aplikaˇcn´ı logiky, souvisej´ıc´ı s ukl´ad´an´ım a manipulac´ı s uˇzivatelsk´ ymi daty, ze spoleˇcn´eho pˇredka pro vˇsechny gener´atory, kter´ ym je presenter u ´loh. Z´aroveˇ n mus´ı tˇr´ıda presenteru implemetovat rozhran´ı IUlohaValuesParser. Minim´aln´ı k´od by tedy mˇel vypadat n´asledovnˇe. class NovaUlohaPresetner extends UlohaPresenter implements IUlohaValuesParser { public static function parseValues($presenter, $allValues){} } S t´ımto k´odem si samozˇrejmˇe gener´ator nevystaˇc´ı a je tˇreba doplnit dalˇs´ı metody. Konkr´etnˇe se jedn´a o metody pˇredstavuj´ıc´ı tov´arny na komponenty (jednotliv´e formul´aˇre) a obsluˇzn´e metody, neboli handlery, kter´e se volaj´ı v pˇr´ıpadˇe odesl´an´ı formul´aˇre nebo stisknut´ı konkr´etn´ıho tlaˇc´ıtka pro odesl´an´ı formul´aˇre. Po z´ıskan´ı vˇsech potˇrebn´ ych hodnot je tedy v posledn´ım kroku zobrazena pr´avˇe vytvoˇren´a u ´loha. Toto zobrazen´ı je zajiˇstˇeno metodou renderUloha, kter´a je, narozd´ıl od v´ yˇse zm´ınˇen´e metody presenteru domovsk´e str´anky, zdˇedˇena z presenteru u ´loh. Jej´ı k´od je tedy mnohem jednoduˇsˇs´ı, protoˇze pracuje s uˇzivatelsk´ ymi daty pˇr´ımo a odpad´a tak komunikace s datab´az´ı a rozhodov´an´ı, o kter´ y presenter u ´lohy se vlastnˇe jedn´a. Data jsou v t´eto metodˇe zpracov´ana a vloˇzena do ˇsablony, kter´a jiˇz zajist´ı samotn´e zobrazen´ı u ´lohy. ˇ Sablony nejsou nic jin´eho neˇz soubory s HTML k´odem. Nette pro tyto soubory nav´ıc zav´ad´ı moˇznou pˇr´ıponu .latte, kter´a je odvozena od pˇr´ıtomn´eho filtru pouˇz´ıv´an´eho v ˇsablon´ach. Ten umoˇzn ˇuje mnohem jednoduˇsˇs´ı z´apis PHP k´odu, napˇr. vkl´ad´an´ı promˇenn´ ych z presenteru do ˇsablony. Generov´an´ı v´ ysledn´e podoby v´ ysledn´e str´anky tedy prob´ıh´a pomoc´ı vhodnˇe zapsan´ ych podm´ınek v r´amci z´apisu dan´e ˇsablony. Tˇechto podm´ınek je v ˇsablonˇe samoˇrejmˇe cel´a ˇrada a jsou si navz´ajem velmi podobn´e. Detailn´ı popis cel´e ˇsablony by byl tedy zdlouhav´ y a zbyteˇcn´ y. Uvedeme tedy pouze nejd˚ uleˇzitˇejˇs´ı pouˇzit´e prvky a jednu uk´azku vytvoˇren´ı interaktivn´ıho prvku. V ˇsablonˇe jsou pouˇzity tzv. bloky. Jedn´a se o prvek Nette, kter´ y umoˇzn ˇuje oznaˇcit urˇcitou ˇca´st ˇsablony, kter´a je n´aslednˇe vloˇzena v layoutu na pˇr´ısluˇsn´e m´ısto. Takto je nastavov´an n´azev str´anky (tag title) a do hlaviˇcky jsou doplnˇeny definice styl˚ u a skript˚ u. N´asleduj´ıc´ım z´apisem jsou pak do str´anky vkl´ad´any zpracovan´e promˇenn´e uˇzivatelsk´ y nastaven´ı. // nastaven´ ı promˇ enn´ e v JavaScriptu {*pokud nezvyraznovat tak nastavit barvu pozadi*} barvaZvyrazneni = {=$udalosti["zvyraznit"] !== "never"
4.2
Implementace aplikace
44
? $vzhled["pozadiZvyraznit"] : $vzhled["pozadiOdpovedi"]}; // vytvoˇ ren´ ı seznamu odpovˇ ed´ ı
{foreach $poradi as $index} - <span style="cursor:pointer" id="it{$index + 1}"> {$odpovedi[$index]}
{/foreach}
Jak je vidˇet, v z´apisu jsou pouˇzity sloˇzen´e z´avory. Ty slouˇz´ı pro zjednoduˇsen´ı z´apisu ˇsablon a pomoc´ı filtru jsou pˇrevedy na odpov´ıdaj´ıc´ı PHP k´od. V k´odu je uk´az´an zp˚ usob nastaven´ı hodnoty JS promˇenn´e s barvou zv´ yraznˇen´ı, kter´a se bud’ nastav´ı na pˇr´ısluˇsnou zv´ yrazˇ novac´ı barvu, nebo se pouˇzije stejn´a barva, jako je barva pozad´ı (v pˇr´ıpadˇe vypnut´eho zv´ yrazˇ nov´an´ı). {if $udalosti["splneniUspesnost"] !== "empty"} // zobrazeni uspesnosti var uspesnost = spravne/pokusu*100; var zpravaUspesnost = "´ Ukol je dokonˇ cen. Vaˇ se u ´spˇ es ˇnost je " + Math.round(uspesnost) + " %."; {if $udalosti["splneniUspesnost"] === "html"} //zobrazeni $(".ukol").after(function(){ //ve strance var div = document.createElement("p"); $(div).text(zpravaUspesnost).css({ "text-align": "center", "margin" : "10px auto", "padding" : "15px", "border" : "1px solid #0C4DA2", "width" : "510px", "background": "#EFEFEF" }); return div; }); {else} alert(zpravaUspesnost); {/if} {/if}
4.3
Demonstrov´an´ı funkˇcnosti aplikace
45
Pˇredchoz´ı uk´azka zobrazuje zp˚ usob zobrazen´ı u ´spˇeˇsnosti po splnˇen´ı e-learningov´eho kv´ızu. Cel´e zobrazen´ı je nejdˇr´ıve podm´ınˇeno hodnotou zp˚ usobu zobrazen´ı u ´speˇsnosti (pokud je r˚ uzn´e od empty tak zobraz). N´aslednˇe prob´ıh´a v´ ypoˇcet u ´spˇeˇsnosti a nastaven´ı patˇriˇcn´e zpr´avy. Pokud se m´a zpr´ava zobrazit pˇr´ımo na str´ance, je vytvoˇren odstavcov´ y element, jsou mu nastaveny potˇrebn´e stylov´e vlastnosti a je vloˇzen do str´anky. V opaˇcn´em pˇr´ıpadˇe se promˇenn´a se zpr´avou zobraz´ı pomoc´ı alertov´e funkce. Obdobn´ ym zp˚ usobem jsou vytv´aˇreny i dalˇs´ı interkativn´ı prvky na str´ance, napˇr. zad´an´ı nebo ovl´ad´an´ı u ´lohy, spouˇsten´ı vlastn´ıch JS k´od˚ u atd.
4.3
Demonstrov´ an´ı funkˇ cnosti aplikace
V aplikaci jsou vytvoˇreny uk´azkov´e u ´lohy, kter´e demonstruj´ı funkˇcnost cel´e aplikace. V t´eto kapitole budou jen kr´atce pops´any dva vytvoˇren´e kv´ızy, jeden od kaˇzd´eho typu implementovan´ ych gener´ator˚ u. 4.3.1
Kˇr´ıˇ zovka – DBS
Prvn´ım u ´k´azkov´ ym pˇr´ıkladem je kˇr´ıˇzovka na t´ema datab´azov´ ych syst´em˚ u. Pokud si u ´lohu zobraz´ıme v aplikaci, tak vid´ıme, ˇze byla spr´avnˇe vytvoˇrena tabulka zobrazuj´ıc´ı samotnou kˇr´ıˇzovku a pro jednotliv´e buˇ nky byly nastaveny odpov´ıdaj´ıc´ı barvy pozad´ı – b´ıl´a pro nepouˇzitou buˇ nku, svˇetle modr´a pro pouˇzitou a tmavˇe modr´a pro sloupec tajenky. Pod tabulkou je um´ıstˇen ˇc´ıslovan´ y seznam legend, kter´ y sv´ ym ˇc´ıslov´an´ım odpov´ıd´a oˇc´ıslov´an´ı jednotliv´ ych ˇr´adk˚ u tabulky, a pod t´ımto seznamem se nach´az´ı hlavn´ı legenda cel´e tajenky, pˇriˇcemˇz slovo tajenky bylo v legendˇe nahrazeno odpov´ıdaj´ıc´ım poˇctem teˇcek. Pˇri prvn´ım kliknut´ı na ˇra´dek kˇr´ıˇzovky je automaticky zobrazena zpr´ava o zp˚ usobu opravy pˇreklepu, jej´ıˇz znˇen´ı se nastavuje podle pouˇzit´eho prohl´ıˇzeˇce. N´aslednˇe je zvolen´ y ˇra´dek pˇrebarven na zadanou barvu (svˇetle ˇzlut´a). Pokud nyn´ı zaˇcneme ps´at na kl´avesnici, budou se stisknut´a p´ısmena vkl´adat ˇ adek lze kdykoliv zmˇenit kliknut´ım na jin´ do pˇr´ısluˇsn´ ych pol´ıˇcek v kˇr´ıˇzovce. R´ y. A pokud si pˇri ˇreˇsen´ı nev´ıme rady, je k dispozici n´apovˇeda n´asleduj´ıc´ıho p´ısmene, kter´a automaticky vypln´ı dalˇs´ı p´ısmeno v patˇriˇcn´em ˇr´adku. Pokud vypln´ıme nˇekter´e ze slov nespr´avnˇe, zobraz´ı se zp´ava, jej´ıˇz znˇen´ı bylo zad´ano pˇri vytv´aˇren´ı u ´lohy. Podobnˇe je pˇri splnˇen´ı cel´e kˇr´ıˇzovky tak´e zobrazena nastaven´a zpr´ava. 4.3.2
Tahac´ı pˇriˇrazov´ an´ı – ˇ c´ asti dotazu
Druh´ ym uk´azkov´ ym pˇr´ıkladem je u ´loha na pˇriˇrazov´an´ı strukturn´ıch ˇc´ast´ı datb´azov´eho dotazu ke kl´ıˇcov´ ym slov˚ um, za kter´ ymi dan´e ˇc´asti spr´avnˇe n´asleduj´ı. Po jej´ım zobrazen´ı v aplikaci vid´ıme, ˇze pˇr´ısluˇsn´e ˇc´asti jsou um´ıstˇeny v nesetˇr´ıdˇen´em seznamu, pod kter´ ym se nach´az´ı tabulka se kl´ıˇci a m´ısty pro um´ıstˇen´ı jednotliv´ ych odpovˇed´ı. Tak, jak bylo pˇri vytv´aˇren´ı nastaveno, je ovl´ad´an´ı u ´lohy zobrazeno pˇr´ımo v HTML str´ance, stejnˇe jako zad´an´ı u ´kolu, kter´e lze nav´ıc skr´ yt (n´aslednˇe pak i zobrazit) pomoc´ı pˇr´ısluˇsn´eho tlaˇc´ıtka. Pˇri pˇretahov´an´ı je pro zv´ yraznˇen´ı jednotliv´ ym buˇ nk´am nastavov´ana jin´a barva pozad´ı, pˇri najet´ı odpovˇedi nad konkr´etn´ı buˇ nku
4.3
Demonstrov´an´ı funkˇcnosti aplikace
46
tabulky je toto zv´ yraznˇen´ı jeˇstˇe zmˇenˇeno na jinou barvu pro indikaci, kam bude odpovˇed’ pˇri upuˇstˇen´ı um´ıstˇena. Pˇri kaˇzd´em ˇspatn´em um´ıstˇen´ı je zobrazena zpr´ava, jej´ıˇz znˇen´ı bylo opˇet zad´ano pˇri vytv´aˇren´ı u ´lohy, na druhou stranu pˇri spr´avn´em um´ıstˇen´ı je zpr´ava zobrazena pouze pˇri prvn´ım u ´spˇechu a vˇzdy je zmˇenˇena barva pozad´ı. Po u ´spˇeˇsn´em splnˇen´ı cel´eho kv´ızu je zobrazena zpr´ava, celkov´a u ´spˇeˇsnost je zobrazena pˇr´ımo na str´ance a definic´ı vlastn´ıho JS je do str´anky nav´ıc vloˇzen doplˇ nuj´ıc´ı text, zobrazuj´ıc´ı strukturu datab´azov´eho dotazu.
5
DISKUZE
5
47
Diskuze
Pˇri zpracov´an´ı t´eto bakal´aˇrsk´e pr´ace byly vyuˇzity volnˇe dostupn´e technologie, pomoc´ı kter´ ych byla implementov´ana aplikace pro generov´an´ı interaktivn´ıch elearningov´ ych u ´loh. Hlavn´ım c´ılem bylo zajiˇstˇen´ı dostateˇcn´e variability aplikace ve smyslu voliteln´ ych funkˇcn´ıch moˇznost´ı vytv´aˇren´ ych u ´loh, ˇc´ımˇz je myˇsleno poskytnut´ı takov´ ych prostˇredk˚ u pˇri vytv´aˇren´ı u ´lohy, kter´e umoˇzn´ı i uˇzivatel˚ um bez znalosti programov´an´ı modifikovat chov´an´ı a interaktivitu vytv´aˇren´e u ´lohy. Z´aroveˇ n je to n´astroj pro relativnˇe rychl´e vytv´aˇren´ı tˇechto u ´loh, u kter´ ych je automatizovan´ ym procesem vytv´aˇren´ı v´ ysledn´eho k´odu garantov´ana jejich jednotn´a implementace. T´ım p´adem by mˇela aplikace naj´ıt uplatnˇen´ı i u program´ator˚ u, kter´ ym m˚ uˇze zefektivnit vytv´aˇren´ı specifick´ ych poˇzadavk˚ u na funkcionalitu v´ ysledn´eho kv´ızu.
5.1
Nedostatky implementace
Pˇri implementaci byl kladen d˚ uraz pˇredevˇs´ım na splnˇen´ı hlavn´ıho c´ıle zad´an´ı t´eto bakal´aˇrsk´e pr´ace, kter´ ym bylo vytvoˇrit gener´atory pro alespoˇ n dva dodan´e e-learnigov´e kv´ızy. Z toho d˚ uvodu nebyly implementov´any nˇekter´e bˇeˇzn´e (a pˇri praktick´em nasazen´ı aplikace vyˇzadovan´e) funkce pro spr´avu vlastn´ıho uˇzivatelsk´eho u ´ˇctu, jako je sv´az´an´ı u ´ˇctu s e-mailovou adresou, zmˇena hesla nebo zasl´an´ı nov´eho v pˇr´ıpadˇe zamopenut´ı pˇrihlaˇsovac´ıch u ´daj˚ u. Veˇsker´e potˇrebn´e funkce pro manipulaci s uloˇzen´ ymi kv´ızy uˇz implementov´any samozˇrejmˇe jsou. Asi za nejvˇetˇs´ı nedostatek t´eto implementace by bylo moˇzn´e oznaˇcit sice funguj´ıc´ı, ale velmi jednoduch´e uchov´av´an´ı uˇzivatelsk´ ych nastaven´ı pro jednotliv´e vytvoˇren´e kv´ızy, kter´a jsou v datab´azi uloˇzena ve formˇe bin´arn´ıch dat (PHP k´od) pˇredstavuj´ıc´ıch kompletn´ı datovou strukturu dan´ ych nastaven´ı. Toto ˇreˇsen´ı pro u ´ˇcely aplikace funguje dobˇre a nekomplikuje tak n´avrh struktury datab´aze, ale neumoˇzn ˇuje ˇradit jednotliv´e u ´lohy podle tˇechto nastaven´ı na stranˇe datab´azov´eho serveru, kde by mˇelo ˇrazen´ı z d˚ uvodu optimalizace spr´avnˇe prob´ıhat. K umoˇznˇen´ı tohoto zp˚ usobu ˇrazen´ı nebyl pˇri zpracov´an´ı bakal´aˇrsk´e pr´ace ˇza´dn´ y exaktn´ı d˚ uvod, ale je moˇzn´e, ˇze pˇri praktick´em nasazen´ı, kdy by se v aplikaci pracovalo s velk´ ym poˇctem uloˇzen´ ych kv´ız˚ u, by bylo ˇza´douc´ı poskytnout prostˇredky pro lepˇs´ı orientaci a umoˇznit ˇrazen´ı podle urˇcit´ ych krit´eri´ı. V tom pˇr´ıpadˇe by bylo nutn´e aplikaci a strukturu datab´aze pˇrepracovat.
5.2
Moˇ znosti nav´ az´ an´ı na pr´ aci
Prostor pro nav´az´an´ı na tuto bakal´aˇrskou pr´aci urˇcitˇe je. Pokud by mˇela b´ yt aplikace d´ale vyv´ıjena ve formˇe samostatn´e aplikace, bylo by nutn´e dokonˇcit pˇredevˇs´ım potˇrebn´e uˇzivatelsk´e funkce, kter´e by pˇri pln´em nasazen´ı v takov´eto aplikaci nemˇely chybˇet. Druhou moˇznost´ı by bylo aplikaci pˇrepracovat do formy modulu informaˇcn´ıho syst´emu. Pokud by aplikace v t´eto podobˇe naˇsla uplatnˇen´ı napˇr. v univerzitn´ım informaˇcn´ım syst´emu, znamenalo by to jej´ı pˇreps´an´ı do programovac´ıho
5.2
Moˇznosti nav´az´an´ı na pr´aci
48
jazyka Perl. Celkov´ y rozsah nutn´ ych zmˇen by byl v tomto pˇr´ıpadˇe znaˇcn´ y, ale bylo by moˇzn´e vyuˇz´ıt v´ yhod spojen´ ych se zakomponov´an´ım do informaˇcn´ıho syst´emu. Pˇredevˇs´ım by ale bylo vhodn´e dokonˇcit implementace gener´ator˚ u pro ostatn´ı dodan´e e-learningov´e u ´lohy, kter´e nebyly v r´amci t´eto pr´ace zpracov´any. U kv´ız˚ u, pro kter´e byly gener´atory implementov´any, bylo zapotˇreb´ı zajistit dostateˇcn´e mnoˇzstv´ı funkˇcn´ıch nastaven´ı, kter´ ymi si m˚ uˇze uˇzivatel chov´an´ı v´ ysledn´eho kv´ızu upravit. V tomto smˇeru jsou moˇznosti nastaven´ı dostateˇcn´e, ovˇsem dalˇs´ımu rozˇsiˇrov´an´ı nic nebr´an´ı. Nab´ız´ı se moˇznost zakomponovat do procesu vytv´aˇren´ı vˇetˇs´ı podporu pro nastaven´ı vzhledu jednotliv´ ych u ´loh pomoc´ı kask´adov´ ych styl˚ u, protoˇze v souˇcasn´e implementaci je umoˇznˇeno pouze nastaven´ı nˇekter´ ych barev pozad´ı a p´ısma. D˚ uvodem bylo soustˇredˇen´ı se na poskytnut´ı dostateˇcn´eho mnoˇzstv´ı nastaven´ı ovlivˇ nuj´ıc´ıch interaktivitu u ´lohy.
6
6
´ ER ˇ ZAV
49
Z´ avˇ er
C´ılem pr´ace bylo nastudovat funkˇcn´ı ˇreˇsen´ı interaktivn´ıch e-learningov´ ych komponent, kter´e byly dod´any vedouc´ım t´eto pr´ace. Jednotliv´e u ´lohy slouˇzily k ovˇeˇrov´an´ı z´ıskan´ ych znalost´ı ve formˇe interaktivn´ıch HTML str´anek. Interaktivitu zajiˇst’oval skriptovac´ı jazyk (JavaScript), jehoˇz aplikac´ı byly na klientsk´e stranˇe prov´adˇeny potˇrebn´e zmˇeny ve str´ance s kv´ızem. Po nastudov´an´ı bylo nutn´e navrhnout a implementovat gener´ator tˇechto u ´loh v podobˇe webov´e aplikace. V u ´vodu byla pops´ana dosavadn´ı situace v oblasti e-learningu a poskytov´an´ı interaktivity. Byly zde kr´atce shrnuty souˇcasn´e stavy a podoby veˇrejnˇe dostupn´ ych e-learningov´ ych kurz˚ u na dvou tuzemsk´ ych univerzit´ach a jedn´e zahraniˇcn´ı. Kr´atce byly zm´ınˇeny i moˇzn´e dostupn´e prostˇredky pro generov´an´ı interaktivn´ıch komponent e-learningov´ ych kurz˚ u. D´ale tato pr´ace popsala jednotliv´e dodan´e e-learningov´e u ´lohy z hlediska pohledu uˇzivatele, kter´ y dan´e u ´lohy ˇreˇs´ı, a z hlediska jejich technick´eho ˇreˇsen´ı, kde byla rozebr´ana HTML struktura element˚ u, slouˇz´ıc´ıch k zobrazen´ı samotn´e u ´lohy, a zp˚ usob zprostˇredkov´an´ı interaktivity pˇri ˇreˇsen´ı tˇechto u ´loh pomoc´ı JavaScriptu. Pro vytvoˇren´ı gener´ator˚ u byly vybr´any dva konkr´etn´ı typy u ´loh. V´ ybˇer technologi´ı pro implementaci webov´e aplikace podl´ehal podm´ınce pouˇzit´ı zdarma dostupn´ ych technologi´ı pro zachov´an´ı nulov´ ych n´aklad˚ u na realizaci t´eto aplikace. Vybran´e technologie tomuto pˇredpokladu plnˇe vyhovˇely. Pro usnadnˇen´ı pr´ace se psan´ım aplikaˇcn´ı logiky samotn´e aplikace byl pouˇzit PHP framework Nette. Vytvoˇren´a aplikace umoˇzn ˇuje zaloˇzen´ı vlastn´ıho uˇzivatelsk´eho u ´ˇctu, skrze kter´ y je pak moˇzn´e pˇristupovat do soukrom´e ˇc´asti aplikace, kde jsou dostupn´e gener´atory jednotliv´ ych e-learningov´ ych kv´ız˚ u. Ty byly realizov´any formou v´ıcestr´ankov´ ych formul´aˇr˚ u, do kter´ ych uˇzivatel zad´a veˇsker´a nastaven´ı ovlivˇ nuj´ıc´ı obsah, vzhled a chov´an´ı vygenerovan´e u ´lohy. Poˇzadavek na poskytut´ı dostateˇcn´e variability pˇri nastavov´an´ı tˇechto funkˇcn´ıch parametr˚ uu ´loh byl splnˇen. Vytvoˇren´e u ´lohy je moˇzn´e ukl´adat bud’ do datab´aze, kde se k nim m˚ uˇze pozdˇeji uˇzivatel vr´atit a modifikovat je, nebo lze vygenerovan´e HTML str´anky s u ´lohou uloˇzit jako soubor pˇr´ımo na pevn´ y disk. V´ ysledn´a aplikace byla um´ıstˇena na server http://znbp.tode.cz/. Celkov´a funkˇcnost t´eto aplikace byla na z´avˇer demonstrov´ana na nˇekolika uk´azkov´ ych pˇr´ıkladech, kter´e jsou v aplikaci veˇrejnˇe pˇr´ıstupn´e.
A
A
ˇ ıLOHA 1 PR´
50
Pˇr´ıloha 1
Zdrojov´e k´ody aplikace spolu s vyexportovanou datab´az´ı jsou k dispozici na pˇriloˇzen´em CD.
B
B
LITERATURA
51
Literatura
Bernard, Borek Prezentaˇcn´ı vzory z rodiny MVC. MVC a dalˇs´ı prezentaˇcn´ı vzory [online]. 2009-05-11, 2. d´ıl, [cit. 2011-05-08]. Dostupn´ y z WWW:
. BuiltWith Trends JavaScript Libraries and Functions Distribution. [online]. [cit. 2011-05-05]. Dostupn´e z WWW:
. CodeIgniter CodeIgniter – Open source PHP web application framework. [online]. [cit. 2011-05-07]. Dostupn´e z WWW:
. Grudl, David N´avrh struktury presenters/views. [online]. 2008-05-28, [cit. 201105-08]. Dostupn´ y z WWW:
. ˇka, Petr Interaktivn´ı eLearningov´y obsah. In Motyˇcka, A. Informatika Jedlic XXI/2008. Brno: Konvoj, 2008, s. 45–46. ISBN 978-80-7302-151-1. jQuery Browser Compatibility. [online]. [cit. 2011-05-05]. Dostupn´e z WWW:
. jQuery UI Draggable Demos & Documentation [online]. [cit. 2011-05-14]. Dostupn´ y z WWW: . jQuery UI Droppable Demos & Documentation [online]. [cit. 2011-05-14]. Dostupn´ y z WWW: . Nette Framework Nette Framework [online]. [cit. 2011-05-14]. Dostupn´ y z WWW: . PHP: Hypertext Preprocessor PHP Manual [online]. 2011-05-20, [cit. 201105-21]. Dostupn´ y z WWW: . Symfony symfony | Web PHP Framework [online]. [cit. 2011-05-12]. Dostupn´ y z WWW: . Wikipedia CakePHP [online]. 2010-12-24, [cit. 2011-05-18]. Dostupn´ y z WWW: . Wikipedia Learning management system [online]. 2011-05-17, [cit. 2011-05-18]. Dostupn´ y z WWW: . World Wide Web Consortium (W3C) Document Object Model (DOM). [online]. 2005-01-19, [cit. 2011-05-12]. Dostupn´ y z WWW: . World Wide Web Consortium (W3C) XHTMLTM 2.0. [online]. 2010-12-16, [cit. 2011-05-12]. Dostupn´ y z WWW: . Zend Framework Zend Framework [online]. [cit. 2011-05-12]. Dostupn´ y z WWW: .