• No results found

TECHNICK ´A UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborov´ych studi´ı

N/A
N/A
Protected

Academic year: 2022

Share "TECHNICK ´A UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborov´ych studi´ı"

Copied!
54
0
0

Loading.... (view fulltext now)

Full text

(1)

TECHNICK ´ A UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborov´ ych studi´ı

Studijn´ı program: B2646 – Informaˇ cn´ı technologie Studijn´ı obor: 1802R007 – Informaˇ cn´ı technologie

Dynamick´ e webov´ e str´ anky pro tv˚ urce strip˚ u a komiks˚ u

Dynamic webpage

for creators of strips and comics

Bakal´ aˇ rsk´ a pr´ ace

Autor: Jan Brandt

Vedouc´ı pr´ ace: Ing. Petr Kretschmer

V Liberci 18. 5. 2012

(2)

Zad´an´ı sem

(3)

Prohl´aˇsen´ı

Byl jsem sezn´amen s t´ım, ˇze na mou bakal´aˇrskou pr´aci se plnˇe vztahuje z´akon ˇc. 121/2000 Sb., o pr´avu autorsk´em, zejm´ena § 60 – ˇskoln´ı d´ılo.

Beru na vˇedom´ı, ˇze Technick´a univerzita v Liberci (TUL) nezasahuje do m´ych autorsk´ych pr´av uˇzit´ım m´e bakal´aˇrsk´e pr´ace pro vnitˇrn´ı potˇrebu TUL.

Uˇziji-li bakal´aˇrskou pr´aci nebo poskytnu-li licenci k jej´ımu vyuˇzit´ı, jsem si vˇedom povinnosti informovat o t´eto skuteˇcnosti TUL; v tomto pˇr´ıpadˇe m´a TUL pr´avo ode mne poˇzadovat ´uhradu n´aklad˚u, kter´e vynaloˇzila na vytvoˇren´ı d´ıla, aˇz do jejich skuteˇcn´e v´yˇse.

Bakal´aˇrskou pr´aci jsem vypracoval samostatnˇe s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım bakal´aˇrsk´e pr´ace a konzultantem.

Datum

Podpis

(4)

Abstrakt

Bakal´aˇrsk´a pr´ace m´a za c´ıl popsat tvorbu dynamick´ych webov´ych str´anek, kter´e maj´ı podobu publikaˇcn´ıho syst´emu. Ten se zamˇeˇruje na specifickou skupinu uˇzivatel˚u, tv˚urc˚u webov´ych komiks˚u a strip˚u. Zaob´ır´a se pˇredevˇs´ım specifick´ymi vlastnostmi, kter´e maj´ı bˇeˇznˇe dostupn´e publikaˇcn´ı syst´emy bud’ znaˇcnˇe nevyvinut´e, nebo jim pˇr´ımo v z´akladu chyb´ı. Jednou takovou vlastnost´ı je podpora v´ıce jazyk˚u.

Nejdˇr´ıve dojde na kr´atk´y popis nˇekolika technologi´ı, kter´e byly pˇri v´yvoji pouˇzity.

Jedn´a se pˇredevˇs´ım o programovac´ı jazyky. Pr´ace pak pokraˇcuje v teoretick´e ˇc´asti, kter´a obsahuje vysvˇetlen´ı pojmu framework a v´ybˇeru framework˚u pro dva odliˇsn´e programovac´ı jazyky, PHP a JavaScript.

Posledn´ı ˇc´ast obsahuje zejm´ena praktick´e informace k vytvoˇren´emu publikaˇcn´ımu syst´emu. Rozeb´ır´an je n´avrh aplikace a realizace za pomoci zvolen´ych framework˚u.

Kl´ıˇcov´a slova: publikaˇcn´ı syst´em, Nette framework, GD, dibi, MySQL

(5)

Abstract

Bachelor thesis has a goal to describe a creation of dynamic webpages that take form of content management system (CMS). It focuses on specific group of users, creators of comics and strips. Mainly deals with the specific characteristics that are not widely used in CMS or are undeveloped. One such characteristic is support for multiple languages.

First, there is a brief description of several technologies that were used for the development. This consists essentially only a programming languages. Work con- tinues on the theoretical level, where it contains an explanation of the concept of framework and decisions that were made during the selection of frameworks for two different programming languages, PHP and JavaScript.

The last part contains practical information especially about the publication sys- tem that was created. Also concept of application design and actual implementation with use of selected frameworks.

Keywords: content management system, Nette framework, GD, dibi, MySQL

(6)

Obsah

Prohl´aˇsen´ı 3

Abstrakt 4

Abstract 5

Obsah 7

Seznam obr´azk˚u 8

Seznam tabulek 9

Zkratky 10

Uvod´ 12

1 Teorie 13

1.1 Dynamick´e webov´e str´anky . . . 13

1.2 Syst´emy pro spr´avu obsahu . . . 14

1.3 HTML . . . 14

1.4 CSS . . . 15

1.5 PHP . . . 16

1.6 GD knihovna . . . 16

1.7 JavaScript . . . 16

1.8 WYSIWYG editor . . . 18

1.9 MySQL . . . 18

2 Framework 19 2.1 PHP framework . . . 19

(7)

2.2 Nette . . . 20

2.2.1 Model-View-Controller . . . 20

2.2.2 Moduly . . . 24

2.2.3 ACL . . . 24

2.3 JavaScript framework . . . 25

2.4 jQuery . . . 25

3 N´avrh 26 3.1 Poˇzadovan´e funkce aplikace . . . 26

3.2 Uˇzivatel´e a role . . . 27

4 Realizace 29 4.1 Adres´aˇrov´a struktura aplikace . . . 29

4.2 Aplikace . . . 29

4.2.1 Souˇc´asti aplikace . . . 30

4.2.2 Poˇzadavky aplikace . . . 30

4.2.3 Moduly . . . 31

4.3 Datab´aze . . . 43

4.4 V´ıcejazyˇcnost aplikace . . . 46

4.4.1 Datum a ˇcas . . . 47

Z´avˇer 48

Pˇr´ıloha A – Obsah CD 51

Pˇr´ıloha B – Diagram z´avislost´ı mezi moduly 52

Pˇr´ıloha C – EER diagram datab´aze 53

Pˇr´ıloha D – Postup instalace 54

(8)

Seznam obr´ azk˚ u

2.1 MVC . . . 21

4.1 UML diagram presenter˚u s jejich jmenn´ymi prostory . . . 31

4.2 Hlavn´ı str´anka v administraci . . . 32

4.3 Administrace s´eri´ı . . . 32

4.4 Zobrazen´ı komiksu n´avˇstˇevn´ık˚um . . . 33

4.5 Administrace kapitol . . . 34

4.6 Pˇrid´an´ı komiksu . . . 35

4.7 Administrace ˇcl´ank˚u . . . 36

4.8 Administrace kategori´ı . . . 37

4.9 Zobrazen´ı archivu . . . 38

4.10 Administrace uˇzivatel˚u . . . 39

4.11 Administrace koment´aˇr˚u . . . 40

4.12 Editace text˚u v obr´azku . . . 42

4.13 Text se zadanou maxim´aln´ı ˇs´ıˇrkou pˇred pr˚uchodem algoritmem . . . . 43

4.14 Tabulky spojen´e s komiksy a koment´aˇri . . . 44

4.15 Tabulky spojen´e s texty . . . 45

4.16 Tabulky articles, categories, users a options . . . 46

(9)

Seznam tabulek

4.1 Uˇzivatelsk´a pr´ava modulu Series . . . 34

4.2 Uˇzivatelsk´a pr´ava modulu Chapter . . . 34

4.3 Uˇzivatelsk´a pr´ava modulu Comic . . . 36

4.4 Uˇzivatelsk´a pr´ava modulu Category . . . 37

4.5 Uˇzivatelsk´a pr´ava modulu User . . . 39

(10)

Zkratky

PHP - PHP: Hypertext Preprocessor

CMS – Content Management System, syst´em pro spr´avu obsahu DOM – Document Object Model

HTML – Hypertext Markup Language

XHTML – Extensible Hypertext Markup Language XML – Extensible Markup Language

HTTP – Hypertext Transfer Protocol TeX – poˇc´ıtaˇcov´y program pro sazbu

PostScript – programovac´ı jazyk popisuj´ıc´ı grafickou podobu tisknuteln´eho do- kumentu

SGML – Standard Generalised Mark-up Language CSS – Cascading Style Sheets, kask´adov´e styly

ASP – Active Server Pages, skriptovac´ı platforma pro dynamick´e zobrazov´an´ı webov´ych str´anek

ASP.NET – Souˇc´ast .NET frameworku, n´astupce ASP

Java – programovac´ı jazyk od firmy Oracle (dˇr´ıve od Sun Microsystems)

JavaScript – skriptovac´ı jazyk urˇcen´y pro pr´aci na stranˇe klienta, interpretry se nach´az´ı v prohl´ıˇzeˇc´ıch

RDBMS – Relation Database Management System, relaˇcn´ı datab´azov´y syst´em SQL – Structured Query Language, strukturovan´y dotazovac´ı jazyk

RSS – Really Simple Syndication (Rich Site Summary), rodina form´at˚u v podobˇe XML dokumentu urˇcen´a pˇredevˇs´ım pro snadn´e sd´ılen´ı nov´eho obsahu webov´ych str´anek

MVC – Model, View, Controler, n´avrhov´y vzor

MVP – Model, View, Presenter, podobn´y MVC, ale s odliˇsnou logikou

(11)

WYSIWYG – What You See Is What You Get URL – Uniform Resource Locator

OOP – Object Oriented Programming, objektovˇe orientovan´e programov´an´ı

(12)

Uvod ´

Do dneˇsn´ı modern´ı doby patˇr´ı kreslen´a tvorba uˇz dlouh´a l´eta a posledn´ıch nˇekolik let zaznamen´av´a d´ıky rozvoji Internetu obrovsk´y rozlet. Pomˇernˇe silnˇe rozˇs´ıˇren´ymi se st´avaj´ı pˇredevˇs´ım tzv. webkomiksy, kter´e jsou, jak lze z n´azvu odvodit, dostupn´e pˇredevˇs´ım skrze glob´aln´ı s´ıt’ Internet. Ned´ılnou souˇc´ast´ı jsou tedy webov´e str´anky, kter´e umoˇzn´ı tyto komiksy prezentovat a ˇc´ıst. Protoˇze ˇcistˇe nebo pˇredevˇs´ım na ko- miksy zamˇeˇren´ych publikaˇcn´ıch syst´em˚u je velmi poskrovnu, rozhodl jsem se v t´eto pr´aci jeden takov´y vytvoˇrit. D˚uvodem tohoto rozhodnut´ı je moje obliba ve ˇcten´ı a prohl´ıˇzen´ı webkomiks˚u a strip˚u.

Modern´ı webov´e str´anky maj´ı tendenci poskytovat sv˚uj obsah ve v´ıce neˇz jednom jazyce, coˇz m˚uˇze b´yt i pˇr´ıpad komiks˚u. Autor by tak mohl vyd´avat v´ıce jazykov´ych verz´ı sv´ych komiks˚u na jedn´e str´ance. Podle tohoto se ˇr´ıd´ım a v pr´aci se tak zamˇeˇr´ım i na zakomponov´an´ı t´eto funkce do str´anek. Co se t´yˇce samotn´e funkˇcnosti, tak se inspiruji t´ım, jak jin´e str´anky se zamˇeˇren´ım na publikaci webkomiks˚u vypadaj´ı a jak funguj´ı.

Vzhledem k tomu, ˇze m´am kr´atkou osobn´ı zkuˇsenost s frameworky, rozhodl jsem se, ˇze pˇri v´yvoji vyuˇziji jeden framework pro PHP a jeden pro JavaScript. Volba jednoho frameworku z velk´eho mnoˇzstv´ı nen´ı vˇec jednoduch´a, takˇze osvˇetl´ım, i proˇc jsem zvolil konkr´etn´ı framework.

C´ılem pr´ace nen´ı vytvoˇren´ı nˇejak´eho komplexn´ıho publikaˇcn´ıho syst´emu, ale jed- noduˇse ovladateln´eho a ´uzce zamˇeˇren´eho.

(13)

1 Teorie

1.1 Dynamick´ e webov´ e str´ anky

Webov´e str´anky maj´ı v dneˇsn´ı dobˇe nezpochybnitelnou roli ve sd´ılen´ı informac´ı.

Pro tyto potˇreby byl panem Timem Berners-Leem v akademick´em prostˇred´ı vy- tvoˇren z´aklad pro dneˇsn´ı jazyk HTML [3], kter´y pomoc´ı znaˇcek definuje strukturu obsahu. Berners-Lee postavil HTML na , jiˇz v t´e dobˇe pouˇz´ıvan´em, SGML (Standard Generalized Mark-up Language) a rozˇs´ıˇril ho o hypertextov´e odkazy [3].

Kdyˇz mluv´ıme o dynamick´ych webov´ych str´ank´ach, m´ame t´ım na mysli str´anky, kter´e nejsou tvoˇreny ˇcistˇe statick´ym obsahem. Mezi takov´eto str´anky patˇr´ı r˚uzn´e blogy, hry nebo tˇreba e-shopy. Pro dynamick´e generov´an´ı obsahu slouˇz´ı r˚uzn´e pro- gramovac´ı jazyky. Programovac´ı jazyky pouˇz´ıvan´e pˇri v´yvoji str´anek se rozdˇeluj´ı na dvˇe hlavn´ı kategorie, serverov´e a klientsk´e.

Serverov´e jazyky se pouˇz´ıvaj´ı na serveru, na kter´em jsou um´ıstˇeny. Jejich hlavn´ım c´ılem je generov´an´ı obsahu na stranˇe serveru a pr´ace s daty um´ıstˇen´ymi napˇr´ıklad v datab´azi. Mezi nejpouˇz´ıvanˇejˇs´ı jazyky pro takov´e ´uˇcely patˇr´ı PHP, ASP.NET a Java [8].

Klientsk´e jazyky slouˇz´ı k programov´an´ı aplikac´ı nebo jejich ˇc´ast´ı pracuj´ıc´ıch na stranˇe klienta. Hlavn´ım a multiplatformn´ım jazykem je v t´eto kategorii interpre- tovan´y jazyk JavaScript. Ten vyuˇz´ıv´a dalˇs´ıch vlastnost´ı prohl´ıˇzeˇc˚u (napˇr. Document Object Model). Interpretry pro klientsk´e interpretovan´e jazyky jsou souˇc´ast´ı vˇetˇsiny prohl´ıˇzeˇc˚u.

(14)

1.2 Syst´ emy pro spr´ avu obsahu

Nejˇcastˇeji se s nimi setk´ame pod pojmy publikaˇcn´ı syst´emy a CMS (zkratka pro Content Management System). Jedn´a se o typ dynamick´ych webov´ych str´anek, kter´e maj´ı, jak vypl´yv´a z jejich n´azvu, ´uˇcel spravovat obsah tvoˇren´y uˇzivateli. CMS, jeˇz jsou zamˇeˇreny na publikaci komiks˚u, jsem naˇsel pouze dva.

ComicPress

Jedn´a se o rozˇs´ıˇren´ı pro WordPress, kter´y patˇr´ı mezi nejrozˇs´ıˇrenˇejˇs´ı [6] CMS.

Umoˇzˇnuje WordPressu publikovat komiksy s velmi obs´ahlou ˇsk´alou grafick´ych a funkˇcn´ıch ´uprav str´anek. Naproti tomu pˇr´ımo nepodporuje v´ıce jazykov´ych mutac´ı.

ComicCMS

Jedn´a se o projekt psan´y v ˇcist´em PHP, ale stejnˇe jako ComicPress nem´a podporu v´ıce jazykov´ych mutac´ı a ani dostupnou ˇceskou verzi.

1.3 HTML

Vznik HTML se ˇrad´ı spoleˇcnˇe se vznikem HTTP a prvn´ıho webov´eho prohl´ıˇzeˇce do roku 1989 [3]. Mˇelo j´ıt o n´ahradu jazyk˚u jako je TeX, PostScript a SGML.

Prvn´ı verze standardu vyˇsla v roce 1991 s ˇc´ıslem 0.9. Posledn´ı dokonˇcen´a verze je HTML 4.01 a netrpˇelivˇe se ˇcek´a, aˇz vyjde koneˇcn´a verze standartu HTML 5.

Po HTML 4.01 jeˇstˇe vznikl standard XHTML, kter´y je pˇrizp˚usoben do podoby, pˇri n´ıˇz lze pouˇz´ıvat standardn´ı XML parser.

V dneˇsn´ı dobˇe se silnˇe prosazuje trend, kdy se oddˇeluje struktura a obsah od vzhledu. Pomoc´ı HTML se vytv´aˇr´ı struktura a obsah a n´aslednˇe pomoc´ı CSS se upravuje jeho vzhled.

DOM

Jedn´a se o objektovˇe orientovanou reprezentaci HTML nebo XML dokumentu.

Jako takov´y nen´ı z´avisl´y na ˇz´adn´em jazyku a platformˇe. Vˇsechny modern´ı prohl´ıˇzeˇce maj´ı zavedenu podporu pro Document Object Model (zkr´acenˇe DOM).

(15)

K´od 1.1: Pˇr´ıklad HTML str´anky 1 < h t m l >

2 < h e a d >

3 < t i t l e > A h o j H T M L < / t i t l e >

4 < / h e a d >

5 < b o d y >

6 < div c l a s s = " t r i d a " id = " id " >

7 < p > A h o j s v e t e ! < / p >

8 < / div >

9 < / b o d y >

10 < / h t m l >

1.4 CSS

CSS neboli t´eˇz kask´adov´e styly je kolekce metod, kter´e popisuj´ı, jak´ym zp˚usobem se maj´ı str´anky napsan´e v HTML, XHTML nebo XML zobrazovat.

V CSS lze pomoc´ı selektor˚u urˇcit, kterou ˇc´ast chceme ovlivnit. Selektory mohou b´yt d´any pomoc´ı:

• Element˚u – div, p, table, atd.

• Atributu tˇr´ıdy HTML – .trida, pokud m´ame definov´an u elementu atribut class="trida"

• Atributu identifik´atoru v HTML – #id, pokud m´ame definov´an u elementu atribut id="id"

K´od 1.2: Pˇr´ıklad CSS

div . t r i d a { w i d t h : 800 px ; b a c k g r o u n d : b l a c k ;} /* n a s t a v e n i s i r k y a p o z a d i pro e l e m e n t div t r i d y t r i d a */

# id { h e i g h t : 600 px } /* n a s t a v e n i v y s k y e l e m e n t u o z n a c e n e h o i d e n t i f i k a t o r e m id */

(16)

1.5 PHP

Jazyk PHP se ˇrad´ı mezi programovac´ı jazyky, kter´e pracuj´ı na stranˇe serveru.

D´ıky sv´e jednoduch´e syntaxi, jeˇz vych´az´ı z takov´ych jazyk˚u jako je C, Java, Pascal ˇci Perl, a bohat´e ˇsk´ale funkc´ı (pr´ace s FTP, generov´an´ı obr´azk˚u ˇci pˇripojen´ı k da- tab´azi) se stal velmi obl´ıben´ym. Podle statistik [8] se jedn´a o nejpouˇz´ıvanˇejˇs´ı jazyk ke generov´an´ı str´anek na stranˇe serveru.

Jedn´a se o interpretovan´y jazyk, proto nen´ı nutn´e zdrojov´e k´ody kompilovat.

Nicm´enˇe d´ıky tomu m´a oproti kompilovan´ym jazyk˚um nev´yhodu v podobˇe pomalejˇs´ı rychlosti zpracov´an´ı. Podle nez´avisl´eho testu [10] jsou vˇetˇsinou interpretovan´e jazyky pomalejˇs´ı neˇz kompilovan´e. Test ovˇsem nen´ı pˇr´ıliˇs rozs´ahl´y, takˇze se jedn´a sp´ıˇse o orientaˇcn´ı srovn´an´ı.

Trend programovat za pomoci objekt˚u pronikl i do PHP. Poprv´e se m˚uˇzeme se- tkat s objekty v PHP 3. Nejvˇetˇs´ıho rozmachu se ovˇsem objekty doˇckaly v PHP 5, ve kter´em doznaly velk´ych zmˇen a byly takˇrka kompletnˇe pˇrepracov´any. Nav´ıc od PHP 5.3 jsou k dispozici jmenn´e prostory, kter´e d´ale rozˇsiˇruj´ı moˇznosti jazyka.

1.6 GD knihovna

Pro pr´aci s obr´azky v PHP existuje nˇekolik knihoven, v t´eto pr´aci jsem vyuˇzil moˇznost´ı knihovny GD. Tuto knihovnu jsem zvolil, protoˇze zvl´ad´a pr´aci s textem na mnou poˇzadovan´e ´urovni a v porovn´an´ı s ostatn´ımi knihovnami se s n´ı setk´ame mnohem ˇcastˇeji.

1.7 JavaScript

JavaScript patˇr´ı mezi interpretovan´e objektovˇe orientovan´e jazyky. Pouˇz´ıv´a se zejm´ena jako skriptovac´ı jazyk na stranˇe klienta, tj. v prohl´ıˇzeˇci, ale najdeme i moˇznosti vyuˇzit´ı na stranˇe serveru (Node.js). Ve spojen´ı s DOM dok´aˇze JavaScript ovlivˇnovat vzhled a obsah str´anek, coˇz se hod´ı, pokud chceme nˇejak´ym zp˚usobem mˇenit vzhled v z´avislosti na interakci s uˇzivatelem.

(17)

K´od 1.3: Pˇr´ıklad syntaxe jazyka v PHP 5.3

<? php

n a m e s p a c e Z a k l a d ; // j m e n n y p r o s t o r

e c h o ’ A h o j s v e t e ! ’ ; // z o b r a z i t e x t A h o j s v e t e ! // OOP

c l a s s T r i d a { p u b l i c $ n a m e ;

p u b l i c f u n c t i o n _ _ c o n t r u c t ( $ n a m e ) {

$this - > n a m e = $ n a m e ; }

p u b l i c f u n c t i o n g e t N a m e () { r e t u r n $this - > n a m e ;

} }

$ t r i d a = new Z a k l a d \ T r i d a ( ’ T r i d a ’ ) ;

e c h o $trida - > g e t N a m e () ; // z o b r a z i t e x t T r i d a

? >

K´od 1.4: Pˇr´ıklad pouˇzit´ı GD v PHP

<? php

// n a h r a n i o b r a z e k . jpg do p a m e t i

$ i m a g e = i m a g e c r e a t e f r o m j p e g( ’ o b r a z e k . jpg ’ ) ;

$ w i d t h = i m a g e s x( $ i m a g e ) ; // z i s k a n i s i r k y

$ h e i g h t = i m a g e s y( $ i m a g e ) ; // z i s k a n i v y s k y

i m a g e j p e g( $ i m a g e ) ; // v r a c e n i o b r a z k u p r o h l i z e c i // u l o z e n i o b r a z k u do s o u b o r u o b r a z e k 2 . j p e g

i m a g e j p e g( $image , ’ o b r a z e k 2 . j p e g ’ )

? >

(18)

1.8 WYSIWYG editor

Takov´yto editor slouˇz´ı pro editaci text˚u, napˇr. ˇcl´ank˚u, pokud chceme vyuˇz´ıt prostˇred´ı, kter´e n´am poskytuj´ı textov´e preprocesory (jako je Word nebo Writer).

WYSIWYG (What You See Is What You Get) editor je vyuˇz´ıv´an ve velk´em mnoˇzstv´ı CMS. WYSIWYG editor˚u dostupn´ych pod licenc´ı, kter´a je sluˇciteln´a pro pouˇzit´ı v bakal´aˇrsk´e pr´aci, je nˇekolik. J´a jsem se rozhodl pro TinyMCE, se kter´ym m´am uˇz zkuˇsenost.

1.9 MySQL

Dynamick´e webov´e str´anky obvykle vyuˇz´ıvaj´ı nˇejakou datab´azi. Nejˇcastˇeji se jedn´a o kombinaci PHP a pr´avˇe MySQL. D´ıky tomu se tak´e jedn´a o jeden z nej- rozˇs´ıˇrenˇejˇs´ıch RDBMS (Relation Database Management System). Pro komunikaci s datab´az´ı se vyuˇz´ıv´a jazyka SQL (Structured Query Language), kter´y m´a nˇekter´e rozd´ıly [5] oproti standardu ANSI SQL.

K´od 1.5: Pˇr´ıklad SQL dotazu, kter´y n´am vr´at´ı obsah tabulky Tabulka

S E L E C T * F R O M ’ Tabulka ’

MySQL vyuˇz´ıv´a nˇekolik rozd´ıln´ych ´uloˇziˇst’ dat, kter´e maj´ı specifick´e vlastnosti.

Nejbˇeˇznˇejˇs´ı jsou MyISAM a InnoDB. InnoDB zvl´ad´a ciz´ı kl´ıˇce a transakce. Nicm´enˇe se m˚uˇzeme setkat se situac´ı, kdy spoleˇcnost nab´ızej´ıc´ı hosting nepodporuje tento typ

´

uloˇziˇstˇe. Problematick´e m˚uˇze b´yt i ˇspatn´e nastaven´ı InnoDB, kter´e zavin´ı napˇr´ıklad delˇs´ı prov´adˇen´ı dotaz˚u.

(19)

2 Framework

V teoretick´e ˇc´asti doˇslo k pˇredstaven´ı dvou programovac´ıch jazyk˚u, kter´e se hojnˇe pouˇz´ıvaj´ı pˇri v´yvoji dynamick´ych webov´ych str´anek. Tyto jazyky ovˇsem maj´ı sv´e neduhy, kter´e nˇekdy nesouvis´ı pˇr´ımo s nimi, ale jsou d´any napˇr. r˚uznorodost´ı prohl´ıˇzeˇc˚u. V t´eto ˇc´asti osvˇetluji d˚uvody, proˇc a jak´y framework jsem si pro konkr´etn´ı jazyk zvolil.

Pod pojmem framework si m˚uˇzeme pˇredstavit soubor knihoven, kter´y usnadˇnuje tvorbu aplikac´ı. V pˇr´ıpadˇe dynamick´ych webov´ych str´anek tak dost´av´ame n´astroj, jenˇz umoˇzˇnuje zjednoduˇsit a urychlit bˇeˇzn´e praktiky pˇri v´yvoji, a kter´y tak omezuje nutnost programovat pokaˇzd´e stejn´e vˇeci.

V´ybˇer frameworku b´yv´a vˇetˇsinou z´aleˇzitost, kterou je vhodn´e si ˇr´adnˇe rozmyslet a zauvaˇzovat nad t´ım, co vlastnˇe od takov´eho frameworku ˇcek´ame. D˚uvodem je, ˇze nauˇcit se pracovat s frameworkem na vysok´e ´urovni, nen´ı snadn´e.

2.1 PHP framework

PHP je pomˇernˇe jednoduch´y jazyk s velk´ym mnoˇzstv´ım podporovan´ych funkc´ı.

D´ıky frameworku se uˇsetˇr´ı ˇcas nad stereotypn´ım programov´an´ım, coˇz n´am d´av´a moˇznost se vˇenovat v´ıce programov´an´ı myˇslenky. B´yvaj´ı mnohdy napsan´e dle nˇejak´eho n´avrhov´eho vzoru.

V dobˇe, kdy jsem se rozhodoval s jak´ym PHP frameworkem budu pracovat, tu byla ot´azka, jak´y m´am zvolit, jelikoˇz jich je velk´e mnoˇzstv´ı. Hlavn´ım faktorem byla pˇredevˇs´ım obecn´a zn´amost a pˇr´ıpadnˇe podpora v ˇCesk´e republice. Tento faktor bohuˇzel nen´ı vˇetˇsinou splnˇen. Z´akladn´ı poˇzadavky splˇnovaly tˇri, a to Zend, Cake- PHP a Nette. V´ybˇer jsem zohledˇnoval v z´avislosti na informac´ıch ze s´erie ˇcl´ank˚u,

(20)

• Zend: Jedn´a se bezesporu o jeden z nejv´ıce rozˇs´ıˇren´ych framework˚u pro PHP.

M´a velmi dobrou dokumentaci (pˇredevˇs´ım v angliˇctinˇe). Nicm´enˇe d´ıky sv´e mohutnosti se mi jevil jako pomˇernˇe obt´ıˇzn´y na ´upln´e zvl´adnut´ı a tak´e jeho v´ykon se podle testu [2] jevil silnˇe z´avisl´y na pomocn´ych prostˇredc´ıch PHP serveru (napˇr´ıklad v testu [2] pouˇzit´y eAccelerator).

• CakePHP: Dalˇs´ı z velmi rozˇs´ıˇren´ych framework˚u, kter´y bohuˇzel m´a odliˇsn´y probl´em neˇz Zend, zpomalen´y v´yvoj. Z hlediska rychlosti se nach´az´ı na druh´em m´ıstˇe. Nejnovˇejˇs´ı verze m´a probl´em s nedostatkem pˇr´ıklad˚u v ˇceˇstinˇe, kter´e jsem pro jeho pochopen´ı potˇreboval.

• Nette: Nejmladˇs´ı z uvaˇzovan´ych framework˚u, a pˇresto se stal m´ym hlavn´ım kandid´atem a to hlavnˇe d´ıky sv´emu ˇcesk´emu p˚uvodu (framework je vyv´ıjen pod z´aˇstitou Nette Foundation veden´em Davidem Grudlem). Nyn´ı m´a uˇz pomˇernˇe kvalitn´ı dokumentaci. Silnou str´ankou tohoto frameworku je pˇredevˇs´ım pr´ace s formul´aˇri, kde lze vytvoˇrit snadno validaci jak v PHP tak z´aroveˇn i v Ja- vaScriptu. Dobr´y dojem na mne zanechal intern´ı lad´ıc´ı n´astroj zn´am´y jako Ladˇenka.

Na z´akladˇe diskuz´ı, kter´e jsem si proˇsel, a toho, ˇze se mi nejl´epe pracovalo s Nette, jsem ho pouˇzil pro vyv´ıjen´y syst´em.

2.2 Nette

Jak uˇz bylo zm´ınˇeno, jedn´a se o pomˇernˇe mlad´y framework, poˇc´atky se datuj´ı nˇekde do roku 2004 [4]. Jako open-source byl uvolnˇen v roce 2008. Moment´alnˇe je vyv´ıjen ˇceskou komunitou, kter´a si ho velmi obl´ıbila. Rovnˇeˇz si dˇel´a ambice na rozˇs´ıˇren´ı ve svˇetˇe.

2.2.1 Model-View-Controller

Pro Model-View-Controler se pouˇz´ıv´a zkratka MVC. Jedn´a se o n´avrhov´y vzor pro software, kter´y se hojnˇe pouˇz´ıv´a u architektury webov´ych aplikac´ı. Aplikace se rozdˇeluje na tˇri oddˇelen´e komponenty, jak vypl´yv´a z n´azvu, a to model, view

(21)

Obr´azek 2.1: MVC

a controller. Vych´azej´ıc z informac´ı popsan´ych v [1] maj´ı jednotliv´e ˇc´asti n´asleduj´ıc´ı funkce:

• Model m´a na starost obstar´an´ı dat. Data mohou b´yt v r˚uzn´e podobˇe a m˚uˇzeme je z´ısk´avat z r˚uzn´ych prostˇredk˚u, napˇr. datab´aze.

• View (t´eˇz pohled) se star´a o zobrazen´ı z´ıskan´ych informac´ı z modelu.

• Controller reaguje na interakci od uˇzivatele a podle toho pracuje s modelem a/nebo s pohledem.

Nette je na tomto n´avrhov´em vzoru postaveno, resp. na jeho obdobˇe MVP (Model-View-Presenter), kde funkci controller˚u zastupuj´ı presentery, jak je pops´ano v dokumentaci [4].

Models

Jak uˇz bylo zm´ınˇeno, tak modely obsahuj´ı pr´aci nejˇcastˇeji spojenou s datab´az´ı, ale mohou pracovat napˇr´ıklad se soubory. Pro pr´aci s datab´az´ı v modelech jsem pouˇzil knihovnu dibi.

Dibi

(22)

Dibi lze pouˇz´ıvat dvˇema zp˚usoby:

• jako statickou tˇr´ıdu

• jako instanci tˇr´ıdy DibiConnection

U kaˇzd´eho zp˚usobu jeˇstˇe m˚uˇzeme zvolit zp˚usob zad´av´an´ı dotazu pomoc´ı:

• SQL pˇr´ıkaz˚u

• fluent rozhran´ı

View

V Nette se t´eˇz pouˇz´ıv´a pojem pohled. Nette pro pohledy vyuˇz´ıv´a ˇsablonovac´ı ja- zyk ”latte“, kter´y byl speci´alnˇe vytvoˇren pˇri v´yvoji frameworku. Soubory

”latte“

maj´ı odpov´ıdaj´ıc´ı pˇr´ıponu latte. ˇSablony jsou i pˇres generov´an´ı rychl´e, jelikoˇz prob´ıh´a pouze pˇri zmˇenˇe zdrojov´ych k´od˚u nebo prvn´ı n´avˇstˇevˇe pohledu.

K´od 2.1: Uk´azka syntaxe latte { b l o c k c o n t e n t }

< span > P r o m e n n a : { $ p r o m e n n a } </ span >

{\ b l o c k }

V uk´azce je vidˇet pouˇzit´ı promˇenn´e $promenna, kterou jsme do ˇsablony poslali z presenteru pomoc´ı k´odu uk´azan´eho d´ale.

K´od 2.2: Odesl´an´ı promˇenn´e z presenteru do ˇsablony p u b l i c f u n c t i o n r e n d e r D e f a u l t () {

$ p r o m = " N e j a k a p r o m e n n a " ;

$this - > t e m p l a t e - > p r o m e n n a = $ p r o m ; }

”Latte“ je natolik pokroˇcil´e, ˇze s n´ım m˚uˇzeme ps´at k´od, kter´y takˇrka vypad´a jako (X)HTML. Na pˇr´ıkladu je uveden zp˚usob, jak´ym proj´ıt vˇsechny ˇcl´anky, kter´e byly do ˇsablony odesl´any.

(23)

K´od 2.3: R˚uzn´e zp˚usoby uˇzit´ı maker latte // t r a d i c n i f o r e a c h m a k r o

< div >

{ f o r e a c h $ a r t i c l e s as $ a r t i c l e }

< span >{ $ a r t i c l e - > n a m e } </ span >

{\ f o r e a c h }

</ div >

// a ted za p o m o c i n : m a k r a

< div n : f o r e a c h =" $ a r t i c l e s as $ a r t i c l e " >

< span >{ $ a r t i c l e - > n a m e } </ span >

</ div >

Presenter

Presentery pˇredstavuj´ı tˇret´ı z pil´ıˇr˚u kaˇzd´e aplikace napsan´e v Nette. Presentery jsou potomky tˇr´ıdy Nette\Application\UI\Presenter. Jejich ´uˇcelem je dle obr. 2.1 zejm´ena komunikace mezi modelem a pohledem.

Routov´an´ı

Aby mohla aplikace vytv´aˇret

”pˇekn´a URL“ (t´eˇz zn´am´e pod anglick´ym

”cool URL“), bylo nutn´e v souboru bootstrap.php vytvoˇrit takzvanou

”routu“ (podle an- glick´eho route, ˇcesky cesta). Ta definuje podobu URL a podle jej´ı formy se bude v aplikaci volat presenter, modul a pohled s parametry. Pokud nˇekter´a ˇc´ast ne- bude odpov´ıdat ˇz´adn´e z definic, dojde k chybˇe. K vytv´aˇren´ı cest se pouˇz´ıv´a tˇr´ıda Nette\Application\Routers\Route.

Tohoto vyuˇz´ıvaj´ı presentery a ˇsablony pro odkazy, kter´e tak nemus´ıme sloˇzitˇe generovat. Pro uk´azku si nejdˇr´ıve nadefinujeme

”routu“:

$ c o n t a i n e r - > r o u t e r [] = new R o u t e ( ’ < p r e s e n t e r = Default >/ < a c t i o n

= default >[/ < id >] ’) ;

(24)

K´od 2.4: Uk´azka tvorby odkaz˚u v ˇsablon´ach a presenterech

// Pomoci n : makra v s a b l o n e

<a n : h r e f =” A r t i c l e : show $ a r t i c l e I d ”>Clanek </a> // v y t v o r i odkaz n a p r i k l a d na c l a n e k s $ a r t i c l e I d =10 v podobe / a r t i c l e / show /10 //V p r e s e n t e r u pomoci metody l i n k

p u b l i c f u n c t i o n a c t i o n D e f a u l t ( ) { . . .

$ u r l = $ t h i s −>l i n k ( ’ A r t i c l e : show ’ , $ a r t i c l e I d ) ; // v y t v o r i odkaz n a p r i k l a d na c l a n e k s $ a r t i c l e I d =10 v podobe / a r t i c l e / show /10

. . . }

2.2.2 Moduly

V sloˇzitˇejˇs´ıch aplikac´ıch se m˚uˇzeme setkat s potˇrebou rozdˇelit aplikaci na menˇs´ı celky. Pro takov´e potˇreby byly v Nette zavedeny moduly. V adres´aˇrov´e struktuˇre mus´ı b´yt moduly ve stejnojmenn´e sloˇzce. Presentery jsou t´ım tak´e ovlivnˇeny, a proto mus´ı m´ıt definovan´e jmenn´e prostory ve tvaru <NazevModulu>Module, v pˇr´ıpadˇe submodul˚u <NazevModulu>Module\<NazevSubmodulu>Module.

2.2.3 ACL

Jedn´a se o zkratku pro Access control list, coˇz by se dalo do ˇceˇstiny pˇreloˇzit jako Seznam spr´avy pˇr´ıstupu. ACL slouˇz´ı ke spr´avˇe libovolnˇe velk´e specifikace opr´avnˇen´ı.

Princip ACL stoj´ı na tˇrech z´akladn´ıch komponent´ach:

• Role

• Zdroje

• Operace

Kaˇzd´emu uˇzivateli je pˇridˇelena jedna nebo v´ıce rol´ı, pˇr´ıkladem rol´ı m˚uˇze b´yt guest (nepˇrihl´aˇsen´y uˇzivatel) nebo administrator (administr´ator str´anek). Zdroje b´yvaj´ı objekty, kter´e jsou chr´anˇeny, napˇr´ıklad obr´azky, koment´aˇre atd. Operace pˇredstavuj´ı akce, kter´e chceme prov´est nad zdrojem (napˇr´ıklad smazat, upravit ˇci

(25)

zobrazit). Role mohou vytv´aˇret hierarchii, ve kter´e potomek dˇed´ı pr´ava od pˇredka a rozˇsiˇruje je o vlastn´ı. ACL podle toho vytv´aˇr´ı strom, podle kter´eho se nastavuj´ı pr´ava pˇr´ıstupu a opr´avnˇen´ı.

V Nette je ACL souˇc´ast´ı frameworku, takˇze nebylo nutn´e vytv´aˇret vlastn´ı.

Pro nepˇrihl´aˇsen´e uˇzivatele pouˇz´ıv´a framework roli guest. Ostatn´ı role uˇz mus´ı b´yt definovan´e program´atorem.

2.3 JavaScript framework

Kv˚uli probl´em˚um, kter´e vl´adnou kolem st´ale odliˇsn´ych implementac´ı JavaScriptu v prohl´ıˇzeˇc´ıch, jsem se rozhodl pouˇz´ıt framework. Pˇri v´ybˇeru jsem se ˇr´ıdil pˇredevˇs´ım rozˇs´ıˇrenost´ı [7] a tak´e t´ım, jak snadno se d´a s frameworkem pracovat. V ´uvahu pˇrich´azela dvojice framework˚u, jQuery nebo Prototype.

Z hlediska rychlosti jsou si rovny. Horˇs´ı dokumentace a tak´e siln´y vliv Ruby na stranˇe Prototype vedly k tomu, ˇze jsem radˇeji zvolil jQuery. To pouˇz´ıv´a velk´e mnoˇzstv´ı program´ator˚u, lze tak naj´ıt velk´e mnoˇzstv´ı n´avod˚u a doplˇnuj´ıc´ıch plugin˚u.

2.4 jQuery

Framework jQuery je podle sv´e dokumentace [9] rychl´y a struˇcn´y. Jeho se- lektory jsou velmi podobn´e tˇem v CSS, coˇz usnadˇnuje pr´aci a sniˇzuje mnoˇzstv´ı informac´ı, kter´e program´ator mus´ı zn´at. Pˇri pr´aci s frameworkem se pracuje nejˇcastˇeji s objektem dan´ym pˇredpisem $(document). Alternativn´ı verze z´apisu je jQuery(document).

Pˇr´ıklad syntaxe pˇri pouˇzit´ı jQuery:

// H T M L kod

< a h r e f = " " > Link </ a >

// j Q u e r y kod

$ ( d o c u m e n t ) . r e a d y ( f u n c t i o n () {

$ ( " a " ) . c l i c k ( f u n c t i o n () { a l e r t ( " H e l l o w o r l d ! " ) ;

(26)

3 N´ avrh

Bˇehem n´avrhu jsem se ˇr´ıdil pr˚uzkumem, pˇri nˇemˇz jsem proˇsel nˇekolik webov´ych str´anek, kter´e uveˇrejˇnuj´ı komiksy. Na z´akladˇe tohoto pr˚uzkumu jsem si poznamenal nˇekolik funkc´ı, kter´e by takov´e str´anky mˇely ovl´adat, a tak´e to, co od nich oˇcek´av´am.

D´ale jsem se rozhodl, ˇze chci publikaˇcn´ı syst´em nˇeˇc´ım rozˇs´ıˇrit. Tedy nejde pouze o inspiraci, ale t´eˇz o vylepˇsen´ı.

3.1 Poˇ zadovan´ e funkce aplikace

Komiksy

Aplikace se toˇc´ı hlavnˇe kolem komiks˚u, takˇze z´akladem je jejich spr´ava. Komiksy lze rozdˇelit do s´eri´ı, kter´e mohou m´ıt v´ıce jazykov´ych mutac´ı. V s´eri´ıch je moˇzn´e komiksy d´ale jemnˇeji tˇr´ıdit podle kapitol. S´erii lze urˇcit, zda obsahuje komiksy, kter´e se ˇctou v euroamerick´em stylu (zleva doprava), nebo komiksy ve stylu manga (zprava doleva). Tato volba ovlivn´ı pouze zobrazen´ı upozornˇen´ı, jenˇz u mangy informuje o spr´avn´em smˇeru ˇcten´ı.

Cl´ ˇ anky

Cl´ˇ anky maj´ı pouze doplˇnuj´ıc´ı funkci, takˇze se jedn´a o syst´em, kter´y nepoˇc´ıt´a se sloˇzit´ym ˇclenˇen´ım. ˇCl´anku lze pˇridˇelit pouze jednu kategorii. Pro editaci text˚u se pouˇz´ıv´a WYSIWYG editor TinyMCE.

Archiv

Mus´ı m´ıt grafick´e ztv´arnˇen´ı ve stylu kalend´aˇre ˇci seznamu jiˇz dosud vydan´ych komiks˚u v jedn´e s´erii. Z toho mus´ı b´yt jasn´e, kdy jak´y komiks vyˇsel, vˇcetnˇe odkazu

(27)

na nˇej.

Koment´ aˇ re

Jelikoˇz modern´ı str´anky velmi ˇcasto obsahuj´ı tuto funkci, rozhodl jsem se umoˇznit pˇrid´av´an´ı koment´aˇr˚u ke komiks˚um. Koment´aˇre se zobrazuj´ı hned pod komiksem.

RSS

RSS (Really Simple Syndication) chci pouˇz´ıt, protoˇze se objevuje na skoro vˇsech modern´ıch str´ank´ach a s´am ho vyuˇz´ıv´am pro sledov´an´ı obsahu velk´eho mnoˇzstv´ı str´anek. Kan´aly budou vytv´aˇren´e pro vˇsechny s´erie a pro jednotliv´e s´erie.

Editace text˚ u

Proveden´ı by mˇelo b´yt co nejjednoduˇsˇs´ı, jelikoˇz nen´ı pˇr´ım´ym c´ılem vytv´aˇret editor ve stylu GIMPu ˇci Photoshopu. Tato funkce nen´ı nˇeco, co jsem bˇehem pr˚uzkumu nalezl jako bˇeˇzn´e ˇci aspoˇn pˇr´ıtomn´e v redakˇcn´ıch syst´emech pouˇzit´ych pro r˚uzn´e str´anky s webkomiksy. Editor je urˇcen pro ´upravu dialog˚u, kter´e jsou tvoˇren´e pˇredevˇs´ım v horizont´aln´ım smˇeru.

Jazykov´ e mutace komiks˚ u a ˇ cl´ ank˚ u

K modern´ım webov´ym str´ank´am patˇr´ı tak´e podpora v´ıce neˇz pouze jednoho jazyka, a tak autor komiks˚u dost´av´a do rukou moˇznost vyd´avat svou tvorbu v r˚uzn´ych jazyc´ıch. Samozˇrejmˇe tot´eˇz plat´ı i pro uˇzivatelsk´e rozhran´ı. Komiksy jsou rozdˇelov´any podle jazykov´ych mutac´ı s´eri´ı. U ˇcl´ank˚u jsou jazykov´e mutace ˇreˇseny u samotn´ych ˇcl´ank˚u i u kategori´ı.

3.2 Uˇ zivatel´ e a role

K publikaˇcn´ım syst´em˚um patˇr´ı spr´ava uˇzivatel˚u. Vzhledem k tomu, ˇze chci vyuˇz´ıt moˇznost´ı ACL v Nette frameworku, rozhodl jsem se rozdˇelit uˇzivatele do skupin, kter´e pˇredstavuj´ı role. Pro snadnou spr´avu jsem si urˇcil 4 skupiny uˇzivatel˚u.

(28)

• Registrovan´y : Nejniˇzˇs´ı uˇzivatelsk´a pr´ava na str´ank´ach, patˇr´ı sem kdokoli, kdo se zaregistruje. Jedin´a povolen´a akce oproti hostovi je spr´ava vlastn´ıch uˇzivatelsk´ych ´udaj˚u.

• Autor : Pr´ava pro uˇzivatele na t´eto ´urovni jsou rozˇs´ıˇrena o tvoˇren´ı s´eri´ı, kapitol a pˇrid´av´an´ı komiks˚u. M´a pˇr´ıstup pouze k vlastn´ı tvorbˇe.

• Administr´ator : Nejvyˇsˇs´ı uˇzivatelsk´a pr´ava, m˚uˇze zasahovat do dˇen´ı cel´e str´anky. Oproti autorovi mu pˇribude moˇznost spravovat fonty pro editor.

Str´anky by mˇely uˇzivatel˚um umoˇznit se zaregistrovat, a tak jim zajistit, ˇze vy- bran´a pˇrezd´ıvka nebude pouˇz´ıv´ana v koment´aˇr´ıch nˇek´ym jin´ym. Administr´ator pak bude moci zmˇenit uˇzivatel˚um role, napˇr´ıklad na autora.

(29)

4 Realizace

4.1 Adres´ aˇ rov´ a struktura aplikace

Adres´aˇrov´a struktura vych´az´ı z frameworkem doporuˇcen´e [4]. Nicm´enˇe jsem pro- vedl menˇs´ı zmˇeny s ohledem na snadnou instalaci a orientaci. Bˇeˇznˇe doporuˇcovan´a struktura je takov´a, kdy m´ame soubory t´ykaj´ıc´ı se pˇr´ımo webov´ych str´anek ve sloˇzce www. Ta obsahuje napˇr´ıklad JavaScript, CSS soubory nebo tˇreba obr´azky pouˇzit´e pro vzhled webov´ych str´anek. Vzhledem k tomu, jak funguje vˇetˇsina hosting˚u, bylo toto nutn´e zmˇenit a tak vznikla n´asleduj´ıc´ı adres´aˇrov´a struktura:

/ app libs temp log css js img fonts theme css js img .htaccess index.php

4.2 Aplikace

Po zv´aˇzen´ı jsem rozhodl dˇelit aplikaci na moduly v z´avislosti na funkc´ıch, kter´e jednotliv´e ˇc´asti maj´ı. Podle toho vzniklo vˇetˇs´ı mnoˇzstv´ı modul˚u a nˇekter´e

(30)

Jelikoˇz Nette vyuˇz´ıv´a moˇznost´ı OOP, rozdˇelil jsem aplikaci takov´ym zp˚usobem, ˇze vˇsechny Frontend presentery dˇed´ı od BasePresenter a Backend presentery od SecuredPresenter, kter´y dˇed´ı od BasePresenteru. SecuredPresenter pokaˇzd´e ovˇeˇruje, zdali je uˇzivatel pˇrihl´aˇsen. D´ıky tomuto jsou nˇekter´e promˇenn´e dostupn´e pro vˇsechny presentery nebo pouze Backend presentery. Backend presentery urˇcuj´ı napˇr´ıklad, zda m´a uˇzivatel pr´ava k pˇr´ıstupu. Z tohoto d˚uvodu se ve skoro vˇsech sloˇzk´ach templates nach´az´ı dvˇe sloˇzky, Frontend a Backend, kter´e obsahuj´ı ˇsablony pro odpov´ıdaj´ıc´ı presentery.

4.2.1 Souˇ c´ asti aplikace

Jelikoˇz se pˇri v´yvojov´em reˇzimu objevuje Debug Bar, zvolil jsem nˇekolik kom- ponent, kter´e ho rozˇsiˇruj´ı. D´ıky NetteTranslatoru v Debug Baru m´ame poloˇzku, kter´a umoˇzˇnuje pˇrekl´adat rovnou pˇri v´yvoji str´anek. M´a ovˇsem p´ar omezen´ı, napˇr´ıklad probl´emy s pˇreklady flashMessages. Ty se neobjev´ı v nab´ıdce, do- kud nejsou vyvol´any. Dalˇs´ı rozˇs´ıˇren´ı m´a samo dibi, kter´e ukazuje, jak´e SQL do- tazy byly na aktu´aln´ı str´ance provedeny. ˇSikovn´ym pomocn´ıkem je i Component Tree, kter´y zobrazuje velk´e mnoˇzstv´ı informac´ı v´azaj´ıc´ıch se k aktu´aln´ı str´ance, tˇreba parametry presenteru a akce ˇci obsaˇzen´e komponenty a jejich pˇr´ıpadn´a hi- erarchie. ServicesPanel zase seskupuje informace spojen´e se sluˇzbami, napˇr´ıklad translator nebo router.

Jelikoˇz jsem se pot´ykal s probl´emy pˇri vytv´aˇren´ı jednoduch´eho a pˇritom hezk´eho designu, zvolil jsem nakonec Twitter Bootstrap. Ten je volnˇe pouˇziteln´y, coˇz bylo hlavn´ı krit´erium. Jeho pouˇzit´ı ovˇsem s sebou pˇrineslo nˇekolik zmˇen, kter´e bylo nutn´e zohlednit. T´ykalo se to zejm´ena formul´aˇr˚u a navigace.

4.2.2 Poˇ zadavky aplikace

Aplikace potˇrebuje pro sv´e fungov´an´ı nˇekolik prostˇredk˚u. Vˇetˇsina se odv´ıj´ı od Nette frameworku. Poˇzadavek na datab´azi jsem urˇcil na z´akladˇe moˇznost´ı vˇetˇsiny webov´ych hosting˚u, kter´e maj´ı nˇejakou nab´ıdku hostov´an´ı zdarma.

• PHP 5.3+

• GD 2+

(31)

• MySQL 5.1+

Obr´azek 4.1: UML diagram presenter˚u s jejich jmenn´ymi prostory

4.2.3 Moduly

Kaˇzd´y modul m´a stejnou adres´aˇrovou strukturu, kter´a obsahuje sloˇzky models.

Do n´ı se ukl´adaj´ı modely potˇrebn´e pro modul. D´ale je zde sloˇzka presenters, ve kter´e se ukl´adaj´ı presentery, pˇresnˇeji FrontendPresenter a BackendPresenter. Nakonec je

(32)

K´od 4.1: Definice

”route“ v aplikaci

$ c o n t a i n e r −>r o u t e r [ ] = new Route ( ’ i n d e x . php ’ , array ( ’ module ’ => ’ Main ’ , ’ p r e s e n t e r ’

=> ’ F r o n t e n d ’ , ’ a c t i o n ’ => ’ d e f a u l t ’ ) , Route : : ONE WAY) ;

$ c o n t a i n e r −>r o u t e r [ ] = new Route ( ’ admin/<module=Main>/<a c t i o n=d e f a u l t >[/< i d >[/<

t e x t i d > ] ] ’ , array ( ’ p r e s e n t e r ’=> ’ Backend ’ ) ) ;

$ c o n t a i n e r −>r o u t e r [ ] = new Route ( ’<l a n g=c s [ a−z ]{2}>/< module=Main>/<a c t i o n=d e f a u l t

>[/< i d [0 −9]+ >][/ < u r l >[/< c o m i c U r l > ] ] ’ , array ( ’ p r e s e n t e r ’=> ’ F r o n t e n d ’ ) ) ;

Main

Modul obstar´av´a vzhled a obsah z´akladn´ı str´anky (jak v uˇzivatelsk´e ˇc´asti, tak v administraci). V administraci je hlavn´ım c´ılem modulu zobrazen´ı z´akladn´ıho obsahu, kde nejsou funkce, kter´e ovlivˇnuj´ı obsah str´anek. Najdeme tu tedy odkazy na posledn´ı zveˇrejnˇen´e komiksy a nejnovˇejˇs´ı koment´aˇre. V uˇzivatelsk´em prostˇred´ı zase zobrazuje nejnovˇejˇs´ı komiks a pˇr´ıpadnˇe i posledn´ı ˇcl´anky v modulu Nastaven´ı urˇcen´e kategorii.

Obr´azek 4.2: Hlavn´ı str´anka v administraci

Series

Obr´azek 4.3: Administrace s´eri´ı

Z´akladem aplikace jsou s´erie, takˇze tu m´ame modul, kter´y s nimi pracuje. V admi- nistraci obstar´av´a pˇrid´av´an´ı, ´upravy a maz´an´ı jednotliv´ych s´eri´ı a jejich jazykov´ych

(33)

variant. V uˇzivatelsk´em prostˇred´ı m´a ´ulohu zejm´ena pro zobrazen´ı komiks˚u v s´erii a jazyce.

Pˇridat – n´am umoˇzˇnuje pˇrid´an´ı s´erie. Mus´ıme zadat jej´ı n´azev a jazyk, kter´y vy- bereme z dostupn´ych jazyk˚u. Pak m´ame moˇznost oznaˇcit s´erii za veˇrejnou. D˚uleˇzit´e je i vybrat typ s´erie. Na v´ybˇer je euroamerick´y nebo manga.

Upravit – poskytuje moˇznost upraven´ı stejn´ych informac´ı jako pˇri pˇrid´av´an´ı.

Smazat – n´am smaˇze s´erii a vˇsechen jej´ı obsah.

Pˇridat jazykovou variantu – n´as odk´aˇze na stejnou str´anku jako Pˇridat, ale s menˇs´ı zmˇenou v URL, kdy n´am pˇribude ˇc´ıslo skupiny, do kter´e bude nov´a s´erie spadat. Podle toho se odv´ıj´ı i volby jazyk˚u, kde chyb´ı ve skupinˇe uˇz jednou pouˇzit´e jazyky.

Seznam – odkazuje na seznam kapitol nebo komiks˚u, kter´e patˇr´ı k s´erii.

Pˇridat (v sekci kapitola nebo komiks) – n´as odk´aˇze na str´anku, kde m˚uˇzeme pˇridat kapitolu/komiks.

(34)

Tabulka 4.1: Uˇzivatelsk´a pr´ava modulu Series

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ano Ano

Upravit, smazat, seznam, pˇridat jazykovou variantu,

Pˇridat kapitolu/komiks Ne Vlastn´ı Ano

Chapter

Obr´azek 4.5: Administrace kapitol

Submodul v administraci pom´ah´a spravovat kapitoly s´erie. Seznam kapitol se ukazuje pouze pro konkr´etn´ı s´erii. Komiksy, jeˇz nejsou zaˇrazen´e do nˇekter´e kapi- toly, jsou v administraci st´ale pˇr´ıstupn´e a zobrazuj´ı se v uˇzivatelsk´em prostˇred´ı, pokud jsou zveˇrejnˇen´e.

Pˇridat – po n´as vyˇzaduje jazyk, s´erii, do n´ıˇz kapitola m´a patˇrit, a n´azev kapitoly.

Pozice je automaticky nastavena na konec s´erie.

Upravit – n´am umoˇzn´ı zmˇenit jazyk, s´erii, do n´ıˇz kapitola m´a patˇrit, a n´azev kapitoly.

Smazat – zp˚usob´ı smaz´an´ı kapitoly, ale nikoliv komiks˚u, kter´e jsou v n´ı. Komiksy osiˇr´ı a budou povaˇzov´any za nezaˇrazen´e.

Pozice zmenˇsit/zvˇetˇsit – zmˇen´ı pozici kapitoly poˇzadovan´ym smˇerem.

Tabulka 4.2: Uˇzivatelsk´a pr´ava modulu Chapter

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ano Ano

Upravit, smazat Ne Vlastn´ı Ano

(35)

Comic

Tento submodul m´a pouze administraˇcn´ı ˇc´ast, kter´a se star´a o spr´avu komiks˚u v s´erii. Komiksy jsou seˇrazeny podle zadan´eho data publikace.

Pˇridat po n´as bude poˇzadovat ˇradu informac´ı, ale ne vˇsechny jsou povinn´e.

Mezi povinn´e patˇr´ı jazyk, s´erie, do n´ıˇz kapitola m´a patˇrit, n´azev, jm´eno autora (pˇredvyplnˇeno jako pˇrezd´ıvka osoby, kter´a komiks vkl´ad´a), zda chceme komiks rov- nou zveˇrejnit, zda obsahuje tento konkr´etn´ı d´ıl obsah pouze pro dospˇel´e, datum pub- likov´an´ı a obr´azek, kter´y pˇredstavuje komiks. Nepovinn´e ´udaje jsou kapitola, pod niˇz komiks spad´a, hover text, kter´y se zobraz´ı pˇri najet´ı ukazatele myˇsi na obr´azek a pˇr´ıbuzn´y komiks. Pˇr´ıbuzn´y obr´azek urˇcuje pozici obr´azku v s´erii a tak´e umoˇzˇnuje pouˇz´ıt p˚uvodn´ı nebo upraven´y obr´azek pˇr´ıbuzn´eho komiksu pˇri volbˇe obr´azku.

Obr´azek 4.6: Pˇrid´an´ı komiksu

Pro nahr´an´ı obr´azku slouˇz´ı plupload, kter´y je um´ıstˇen v modal oknˇe. Po nahr´an´ı se okno zavˇre a stejnˇe jako v pˇr´ıpadˇe zvolen´ı obr´azku z pˇr´ıbuzn´eho komiksu dojde k jeho okamˇzit´emu zobrazen´ı. Souˇc´ast´ı nahr´an´ı obr´azku na server je kontrola exis- tence pomoc´ı hashe obsahu souboru nikoliv jeho n´azvu, zdali tento soubor uˇz je pouˇzit. Pokud nen´ı jeˇstˇe v datab´azi, tak se vytvoˇr´ı a pˇrid´a do datab´aze hash a cesta

(36)

tuj´ıc´ıho.

Bˇehem smaz´an´ı komiksu se kontroluje, zda je obr´azek pouˇzit jeˇstˇe u jin´eho ko- miksu. Pokud tomu tak skuteˇcnˇe je, obr´azek se nesmaˇze.

Upravit – umoˇzˇnuje upravit skoro vˇsechny ´udaje jako pˇri pˇrid´av´an´ı, ale ne- umoˇzˇnuje znovu nahr´at obr´azek.

Smazat – smaˇze komiks i s obr´azkem, pokud ten nen´ı nikde jinde pouˇz´ıv´an.

Ovˇeˇruje se podle hashe vytvoˇren´e z obsahu.

Upravit texty – pˇresune autora nebo administr´atora do editoru text˚u, kde m˚uˇze pˇrid´avat a upravovat texty v obr´azku.

Tabulka 4.3: Uˇzivatelsk´a pr´ava modulu Comic

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ano Ano

Upravit, smazat Ne Vlastn´ı Ano

Article

Modul se star´a v administraci o spr´avu ˇcl´ank˚u a v uˇzivatelsk´em prostˇred´ı o jejich zobrazen´ı.

Obr´azek 4.7: Administrace ˇcl´ank˚u

Pˇridat – n´am umoˇzn´ı vloˇzit ˇcl´anek. Pro vloˇzen´ı potˇrebujeme zn´at n´azev, v jak´em jazyce ˇcl´anek je, kategorii, zdali ho oznaˇcit jako veˇrejn´y, text ˇcl´anku, pro kter´y je vyuˇzit TinyMCE, a nakonec kr´atk´y popis ˇcl´anku.

Pˇridat jazykovou variantu – dˇel´a to sam´e jako Pˇridat s t´ım rozd´ılem, ˇze oˇcek´av´a v URL ˇc´ıslo skupiny, pod kterou patˇr´ı nov´y ˇcl´anek v dalˇs´ım jazyce.

Upravit – umoˇzˇnuje upravit vˇsechny ´udaje v ˇcl´anku.

Smazat – smaˇze ˇcl´anek.

(37)

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ano Ano

Upravit, smazat,

pˇridat jazykovou variantu Ne Vlastn´ı Ano

Category

Modul Category slouˇz´ı ke spr´avˇe kategori´ı pro ˇcl´anky a v uˇzivatelsk´em prostˇred´ı k zobrazen´ı ˇcl´ank˚u dan´e kategorie.

Obr´azek 4.8: Administrace kategori´ı

Pˇridat – n´am umoˇzn´ı vloˇzit kategorii, kterou n´aslednˇe m˚uˇzeme pouˇz´ıt tˇreba pˇri vytv´aˇren´ı menu nebo pro zobrazen´ı na domovsk´e str´ance. Pro vloˇzen´ı potˇrebujeme zn´at n´azev a v jak´em jazyce m´a kategorie b´yt.

Pˇridat jazykovou variantu – dˇel´a to sam´e jako Pˇridat s t´ım rozd´ılem, ˇze oˇcek´av´a v URL ˇc´ıslo skupiny, pod kterou patˇr´ı nov´a kategorie v dalˇs´ım jazyce.

Upravit – umoˇzˇnuje upravit vˇsechny ´udaje kategorie.

Smazat – smaˇze kategorii a vˇsechny k n´ı n´aleˇz´ıc´ı ˇcl´anky se stanou Nezaˇrazen´e (lze k nim st´ale pˇristupovat pˇres administraci).

Tabulka 4.4: Uˇzivatelsk´a pr´ava modulu Category

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ano Ano

Upravit, smazat,

pˇridat jazykovou variantu Ne Vlastn´ı Ano

(38)

Font

Modul Font – je ˇcistˇe pro administraci a pln´ı funkci spr´avy font˚u vyuˇz´ıvan´ych editorem text˚u. Tento modul m˚uˇze pouˇz´ıvat pouze administr´ator.

Pˇridat – po n´as vyˇzaduje n´azev fontu, kter´y se bude ukazovat v editoru, podporu jazyk˚u z aktu´alnˇe dostupn´ych a nakonec soubor typu ttf.

Upravit – n´am umoˇzn´ı upravit n´azev a podporu jazyk˚u u aktu´alnˇe dostupn´ych.

To lze vyuˇz´ıt napˇr´ıklad, pokud jazyk pˇrid´ame aˇz po pˇrid´an´ı fontu a v´ıme, ˇze je font pro tento jazyk pouˇziteln´y.

Smazat – smaˇze soubor a z´aznam v datab´azi.

Archive

Obsahuje pouze uˇzivatelskou ˇc´ast, kter´a zobrazuje pro s´erie archiv jiˇz vyˇsl´ych ko- miks˚u v podobˇe kalend´aˇre. Kalend´aˇr je vytv´aˇren skrze stejnojmennou komponentu.

Obr´azek 4.9: Zobrazen´ı archivu

User

Modul umoˇzˇnuj´ıc´ı pr´aci s uˇzivatelsk´ymi ´udaji. Administr´ator zde m˚uˇze upravovat vlastn´ı a ciz´ı ´udaje nebo pˇrid´avat nov´e uˇzivatele. Ostatn´ı uˇzivatel´e (registrovan´ı a autoˇri) zde mohou upravovat sv´e vlastn´ı ´udaje. Pro uˇzivatelsk´e prostˇred´ı funguje pouze zobrazen´ı nˇekolika informac´ı o uˇzivateli a moˇznost se zaregistrovat.

(39)

Obr´azek 4.10: Administrace uˇzivatel˚u

Pˇridat – funguje podobnˇe jako registrace a vyˇzaduje po n´as ˇradu informac´ı, pˇrihlaˇsovac´ı jm´eno, kter´e se z´aroveˇn chov´a jako pˇrezd´ıvka, heslo a jeho potvrzen´ı, jazyk prostˇred´ı uˇz´ıvan´em v pˇr´ıpadˇe administrace a email uˇzivatele. Doplˇnuj´ıc´ı in- formace jsou kˇrestn´ı jm´eno a pˇr´ıjmen´ı a zdali splˇnuje podm´ınky, ˇze je ve sv´e zemi uzn´an jako dospˇel´y.

Upravit – umoˇzn´ı zmˇenit ´udaje, kter´e jsme zadali, kromˇe pˇrihlaˇsovac´ıho jm´ena.

Zabanovat/odbanovat – dok´aˇze nastavit status

”ban“ (ˇcesky z´akaz) uˇzivateli.

Ten mu znemoˇzn´ı se pˇrihl´asit a tak pˇrisp´ıvat do koment´aˇr˚u ˇci na str´anky. Pˇri pokusu o pˇrihl´aˇsen´ı se zobraz´ı zpr´ava o tom, ˇze byl uˇzivateli udˇelen

”ban“.

Aktivovat – se pouˇz´ıv´a v pˇr´ıpadˇe nov´ych registrac´ı. Ty jsou automaticky neak- tivn´ı a administr´ator je mus´ı ruˇcnˇe aktivovat. Jinak by se uˇzivatel nemohl pˇrihl´asit.

Smazat – smaˇze uˇzivatele, ale nikoliv j´ım vytvoˇren´y obsah, to mus´ı uˇcinit ad- ministr´ator nebo uˇzivatel pˇred smaz´an´ım.

Role – umoˇzˇnuje administr´atorovi zmˇenit roli, kterou m´a uˇzivatel na str´ank´ach.

Tabulka 4.5: Uˇzivatelsk´a pr´ava modulu User

Akce Registrovan´y Autor Administr´ator

Pˇridat Ne Ne Ano

Upravit Vlastn´ı Vlastn´ı Ano

Smazat, zabanovat/odbanovat,

aktivovat, zmˇenit pr´ava Ne Ne Ano

(40)

Comment

Jedn´a se o modul dostupn´y pouze pro administraci, ve kter´e umoˇzˇnuje spravovat koment´aˇre. Koment´aˇre v uˇzivatelsk´em prostˇred´ı jsou tvoˇreny pomoc´ı komponenty Comments, jeˇz umoˇzˇnuje jejich vkl´ad´an´ı a zobrazen´ı. Zasahovat do koment´aˇr˚u m˚uˇze administr´ator a autor, kter´y je omezen na koment´aˇre u jeho komiks˚u.

Obr´azek 4.11: Administrace koment´aˇr˚u

Upravit – umoˇzn´ı upravit koment´aˇr.

Smazat – smaˇze koment´aˇr.

Options

V administraci m´a tento modul funkci spr´avy nastaven´ı. Z´asadn´ı vlastnost´ı mo- dulu je, ˇze umoˇzˇnuje mˇenit n´azev str´anky dostupn´ych skrz uˇzivatelsk´e prostˇred´ı a tak´e moˇznost obnovovat dostupn´e jazyky. Do tohoto modulu m´a pˇr´ıstup pouze administr´ator.

Rss

Tento modul v uˇzivatelsk´em prostˇred´ı vytv´aˇr´ı RSS kan´aly za pomoci kompo- nenty, kter´a byla pro tento ´uˇcel vytvoˇrena. Kaˇzd´a s´erie m´a sv˚uj kan´al a nav´ıc existuje kan´al pro vˇsechny s´erie.

Sign

Tento modul slouˇz´ı v uˇzivatelsk´em prostˇred´ı ˇcistˇe k pˇrihlaˇsov´an´ı a ovˇeˇrov´an´ı uˇzivatel˚u. Pokud sem byl uˇzivatel pˇresunut z nˇejak´e str´anky z d˚uvodu tˇreba dlouh´e neˇcinnosti, tak bude pˇresunut po pˇrihl´aˇsen´ı zpˇet na str´anku, kterou se snaˇzil navˇst´ıvit, pokud m´a pr´ava k jej´ımu pˇr´ıstupu.

(41)

K´od 4.2: Uk´azka vygenerovan´eho RSS k´odu

<? x m l v e r s i o n = " 1 . 0 " ? >

< rss v e r s i o n = " 2.0 " >

< c h a n n e l >

< t i t l e > l l u n < / t i t l e >

< d e s c r i p t i o n > N e w s for c o m i c l l u n < / d e s c r i p t i o n >

< l i n k > / cs / s e r i e s / s h o w / l l u n < / l i n k >

< l a s t B u i l d D a t e > 2012 -06 -11 0 8 : 4 5 : 5 6 < / l a s t B u i l d D a t e >

< i t e m >

< p u b D a t e > 2012 -05 -02 0 0 : 0 0 : 0 0 < / p u b D a t e >

< t i t l e > D r u h e s e t k a n i < / t i t l e >

< l i n k > / cs / s e r i e s / s h o w / l l u n / druhe - s e t k a n i < / l i n k >

< g u i d > / cs / s e r i e s / s h o w / l l u n / druhe - s e t k a n i < / g u i d >

< / i t e m >

< i t e m >

< p u b D a t e > 2012 -02 -01 0 0 : 0 0 : 0 0 < / p u b D a t e >

< t i t l e > C a s t p r v n i < / t i t l e >

< l i n k > / cs / s e r i e s / s h o w / l l u n / cast - p r v n i < / l i n k >

< g u i d > / cs / s e r i e s / s h o w / l l u n / cast - p r v n i < / g u i d >

< / i t e m >

< / c h a n n e l >

< / rss >

Image

Modul m´a pouze administrativn´ı prostˇred´ı, d´ıky kter´emu umoˇzˇnuje pomˇernˇe zaj´ımavou funkci pˇrid´av´an´ı textu do obr´azk˚u. Editor je to velmi jednoduch´y, ne- umoˇzˇnuje nijak sloˇzit´e operace s textem. K dispozici jsou pouze fonty, kter´e byly pˇrid´any skrze webov´e rozhran´ı.

Za editorem stoj´ı kombinace jQuery pluginu imgAreaSelect, kter´y slouˇz´ı k v´ybˇeru obd´eln´ıkov´e oblasti, kde se m´a nach´azet text, a knihovny GD, kter´a zpra- cov´av´a z´apis text˚u do obr´azku. GD nem´a nijak velk´e moˇznosti pˇri pr´aci s textem, nicm´enˇe i to m´alo se uk´azalo jako dostaˇcuj´ıc´ı. Podporov´an je pouze horizont´aln´ı text, jelikoˇz jsem doˇsel k z´avˇeru, ˇze pˇri editaci komiksu nen´ı nutn´e m´ıt podporu pro vertik´aln´ı text. Tento n´azor podp´ır´am t´ım, ˇze jsem editor vytv´aˇrel za ´uˇcelem doplˇnov´an´ı text˚u dialog˚u. Algoritmus pˇrid´av´an´ı text˚u do obr´azk˚u vyuˇz´ıv´a nˇekolik funkc´ı GD (imagettfbbox a imagettftext). Lze tedy pouˇz´ıt pouze ttf fonty. Po- moc´ı tˇechto funkc´ı na z´akladˇe zadan´ych ´udaj˚u vykresluje text do obr´azku.

(42)

Obr´azek 4.12: Editace text˚u v obr´azku

se jedn´a o velikost textu v bodech (points, pt), barvu v RGB, x a y pozici lev´eho horn´ıho rohu, maxim´aln´ıˇs´ıˇrku textu, zarovn´an´ı textu a font. Pokud chceme vykreslit ˇci vygenerovat obr´azek i s texty, provede se pro kaˇzd´y z´aznam v datab´azi sekvence krok˚u, kterou popisuji v n´asleduj´ıc´ım textu.

Nejprve se rozdˇel´ı text na ˇr´adky podle znaku nov´eho ˇr´adku, a t´ım je znak \n.

Takto jsme z´ıskali prvotn´ı ˇr´adky, kter´e ale jeˇstˇe mus´ı proj´ıt dalˇs´ı f´az´ı, kontrolou je- jich ˇs´ıˇre. V tomto momentˇe vyuˇz´ıv´ame moˇznosti funkce imagettfbbox, kter´a vrac´ı souˇradnice roh˚u obd´eln´ıku, kter´y obsahuje text. Zaj´ımaj´ı n´as pouze horizont´aln´ı souˇradnice lev´eho a prav´eho horn´ıho rohu. Jejich rozd´ıl n´am d´av´a ˇs´ıˇrku ˇr´adku, tu porovn´ame s maxim´aln´ı ˇs´ıˇrkou. V pˇr´ıpadˇe, ˇze pˇresahuje, tak se pokus´ı rozdˇelit ˇr´adek po slovech na v´ıce ˇr´adk˚u, kter´e podm´ınku maxim´aln´ı ˇs´ıˇrky splˇnuj´ı. Pokud na- stane situace, kdy m´ame jedno nebo v´ıc slov, kter´e pˇresahuj´ı maxim´aln´ı ˇs´ıˇri, tak do- jde k pˇrizp˚usoben´ı na jejich maxim´aln´ı ˇs´ıˇrku. Algoritmus se n´aslednˇe spust´ı znovu s touto novou ˇs´ıˇrkou. Tato hodnota se uloˇz´ı do datab´aze.

(43)

Obr´azek 4.13: Text se zadanou maxim´aln´ı ˇs´ıˇrkou pˇred pr˚uchodem algoritmem

Dalˇs´ı ˇc´ast se skl´ad´a z v´ypoˇctu ˇs´ıˇrek novˇe vznikl´ych ˇr´adk˚u a celkov´e v´yˇsky textu.

Jako posledn´ı vˇec je proch´azen´ı ˇr´adk˚u textu, nastaven´ı offsetu od lev´e strany, kter´y je ovlivnˇen zarovn´an´ım textu. N´asleduje v´ypoˇcet vertik´aln´ıho offsetu tj. mezer mezi ˇr´adky. Jeho pˇrid´an´ı do celkov´e v´yˇsky textu a nakonec z´apis samotn´eho textu podle udan´ych parametr˚u.

Install

Modul Install slouˇz´ı k instalaci aplikace. Instalace je prov´adˇena ve tˇrech kroc´ıch.

Prvn´ı krok n´as informuje o tom, ˇze vˇsechny tabulky, kter´e se budou shodovat s n´azvy tabulek aplikace, budou nahrazeny tˇemi aplikaˇcn´ımi. Zb´yvaj´ıc´ı kroky uˇz prob´ıhaj´ı s novˇe vygenerovanou datab´az´ı, do kter´e ukl´adaj´ı potˇrebn´e informace. Mezi tyto informace patˇr´ı z´akladn´ı jazyk, n´azev str´anek a zaloˇzen´ı administr´atorsk´eho ´uˇctu, kter´y m´a nastaven jako sv˚uj jazyk z´akladn´ı jazyk str´anek.

4.3 Datab´ aze

Datab´aze tvoˇr´ı z´aklad vˇetˇsiny dneˇsn´ıch webov´ych aplikac´ı, proto je d˚uleˇzit´e se zab´yvat jej´ı strukturou. Protoˇze jsem rozhodl pouˇz´ıt MySQL, musel jsem zv´aˇzit, jak´e

´

uloˇziˇstˇe dat v nˇem pouˇz´ıt. Pro vˇsechny tabulky jsem pouˇzil ´uloˇziˇstˇe dat MyISAM z d˚uvod˚u vˇetˇs´ı podpory hosting˚u. Nˇekter´e hostingy zdarma nepodporuj´ı InnoDB

(44)

Vzhledem k v´ıcejazyˇcnosti je v datab´azi pouˇzito k´odov´an´ı utf8 unicode ci.

Komiksy

Komiksy jsou definov´any pomoc´ı ˇctveˇrice tabulek, series, chapters, comics a images. Kaˇzd´a z tabulek odpov´ıd´a obsahu jednotliv´ych ˇc´ast´ı. S´erie rozhoduj´ı o tom, jak´y jazyk maj´ı komiksy, kter´e do n´ı patˇr´ı. S´erie se dˇel´ı do skupin. Sku- pinou je myˇsleno seskupen´ı s´eri´ı, ve kter´em m´ame k dispozici r˚uzn´e jazykov´e verze.

Kapitoly n´am d´avaj´ı moˇznost, jak seskupovat v s´erii jednotliv´e komiksy do celk˚u.

Z´asadn´ı pro tabulku chapters je, ˇze obsahuje atribut position, kter´a vyjadˇruje pozici v s´erii. Spojen´ı r˚uzn´ych jazykov´ych verz´ı prob´ıh´a skrze s´erie.

Images obsahuje hash vytvoˇren´y z obsahu obr´azku a cesty k nˇemu. Za prim´arn´ı kl´ıˇc jsem zvolil hash, jelikoˇz ten by mˇel jednoznaˇcnˇe identifikovat soubor. V tabulce comics nalezneme dva hashe, jeden slouˇz´ı k odkazov´an´ı na aktu´aln´ı obr´azek a druh´y, original hash, na p˚uvodn´ı. Ve vˇetˇsinˇe pˇr´ıpad˚u budou duplicitn´ı, ale v momentˇe, kdy vyuˇzijeme moˇznosti editovat texty, tak se pˇri uloˇzen´ı zmˇen do obr´azku a vy- tvoˇren´ı dalˇs´ıho fyzick´eho souboru, budou tyto hashe liˇsit.

V tabulce comics kromˇe jiˇz zm´ınˇen´ych atribut˚u hash a original hash nalez- neme napˇr´ıklad ciz´ı kl´ıˇce na s´erii a kapitolu, do kter´e patˇr´ı.

Obr´azek 4.14: Tabulky spojen´e s komiksy a koment´aˇri

V pr˚ubˇehu v´yvoje se datab´aze postupnˇe mˇenila, zpoˇc´atku byla pˇr´ıtomna tabulka

(45)

groups, kter´a mˇela slouˇzit ke spojov´an´ı jazykov´ych verz´ı s´eri´ı a komiks˚u. Po zral´e

´

uvaze jsem nakonec doˇsel k z´avˇeru, ˇze se t´ım stane obt´ıˇznˇejˇs´ı udrˇzen´ı konzistence datab´aze a pˇrehledu o tom, co seskupuje, a bude tedy lepˇs´ı tuto tabulku vynechat.

M´ısto toho jsem zajistil seskupov´an´ı pomoc´ı atributu group number nebo position.

Doˇ casn´ e obr´ azky

Tabulka tempimages slouˇz´ı k ukl´ad´an´ı informac´ı o nahran´ych souborech, kter´e nebyly jeˇstˇe pouˇzity pro nˇejak´y komiks. Jelikoˇz se ukl´ad´a informace o tom, kdy maj´ı soubory vyprˇset, je zajiˇstˇeno, ˇze nebudou soubory uloˇzeny vˇeˇcnˇe. Kontrola platnosti prob´ıh´a pokaˇzd´e, kdyˇz je nˇejak´y nov´y obr´azek nahr´an. Pokud platnost obr´azku vyprˇsela bude smaz´an.

Koment´ aˇ re

Koment´aˇre jsou tvoˇreny pouze jednou tabulkou comments, kter´a je propojena pomoc´ı ciz´ıho kl´ıˇce s komiksy. Obsahuje identifik´ator, jm´eno toho, kdo koment´aˇr pˇridal, text zpr´avy, e-mail a ciz´ı kl´ıˇc na komiks.

Texty

Texty jsou reprezentov´any dvojic´ı tabulek, texts a fonts. V prvn´ı jsou vˇsechny texty a obsahuje dva ciz´ı kl´ıˇce, a to pro komiks a font. Druh´a tabulka obsahuje n´azev fontu, cestu k souboru, kterou pouˇz´ıv´a skript pro tvoˇren´ı text˚u v obr´azc´ıch, a jazyky, kter´e font podporuje.

(46)

Cl´ ˇ anky

Cl´ˇ anky maj´ı pouze dvˇe tabulky, articles a categories. Tabulka articles pˇredstavuje ˇcl´anky, kter´e se stejnˇe jako s´erie seskupuj´ı do skupin jazykov´ych verz´ı.

Jedin´y ciz´ı kl´ıˇc se v´aˇze k uˇzivateli, kter´y ˇcl´anek vytvoˇril. Podobnˇe jako s´erie i ˇcl´anky obsahuj´ı atribut group number, kter´y se star´a o spojov´an´ı r˚uzn´ych jazykov´ych vari- ant t´ehoˇz ˇcl´anku. Kapitoly maj´ı pouze vlastn´ı n´azev a stejnˇe jako s´erie a ˇcl´anky se seskupuj´ı do skupin podle stejn´eho atributu.

Uˇ zivatel´ e

Uˇzivatele pˇredstavuje jedna tabulka, users, do kter´e se o nich ukl´adaj´ı informace a jejich osobn´ı nastaven´ı.

Nastaven´ı

Jednoduch´a tabulka options na ukl´ad´an´ı nastaven´ı cel´e aplikace. Je tvoˇrena pouze dvojic´ı atributy, n´azvem a hodnotou.

Obr´azek 4.16: Tabulky articles, categories, users a options

4.4 V´ıcejazyˇ cnost aplikace

Vzhledem k tomu, ˇze jsem vytv´aˇrel aplikaci, kter´a by zvl´adla pracovat jako v´ıcejazyˇcn´a, vyuˇzil jsem moˇznosti pouˇz´ıt NetteTranslator. Ten je vytvoˇren pro pr´aci v Nette frameworku, ve kter´em implementuje rozhran´ı ITranslator.

(47)

D´ıky tomu jsem mohl vyuˇz´ıt lokalizaˇcn´ı moˇznosti frameworku a z´aroveˇn jsem z´ıskal n´astroj, kter´y mi v lokalizaci pomohl. Lokalizaˇcn´ı soubory jsou bˇeˇznˇe pouˇz´ıvan´e gettextem, kter´y je implementovan´y v NetteTranslatoru takov´ym zp˚usobem, ˇze pˇri zmˇenˇe v lokalizaˇcn´ıch souborech nemus´ı doj´ıt k restartu serveru, jak je to u implementace v PHP nutn´e.

Pro pˇrid´an´ı dalˇs´ıho jazyka mus´ıme nejdˇr´ıve vytvoˇrit jazykov´y soubor, kde se bude nach´azet pˇreklad. Tento soubor lze vytvoˇrit za pomoci NetteTranslatoru, ale to nen´ı moc vhodn´e, jelikoˇz je pak nutn´e proj´ıt vˇsechny str´anky a zobrazit vˇsechny ozn´amen´ı. Druh´ym zp˚usobem je vz´ıt si napˇr´ıklad pˇriloˇzen´y PO soubor a vyuˇz´ıt programu Poedit, kter´y umoˇzˇnuje vytv´aˇren´ı a generov´an´ı MO soubor˚u, jeˇz pouˇz´ıv´a aplikace, a pˇreloˇzit tak aplikaci do nov´eho jazyka. Jako posledn´ı krok je obnoven´ı stavu jazyk˚u v administraci v sekci Nastaven´ı.

Souˇc´ast´ı aplikace je i tˇr´ıda LocaleInfo, kter´a n´am poskytuje informace o r˚uzn´ych jazyc´ıch pouˇziteln´ych pro lokalizaci aplikace.

Vzhledem k tomu, ˇze se vyuˇz´ıv´a i ciz´ı k´od (TinyMCE), tak je nutn´e zajistit i pˇreklad tˇechto ˇc´ast´ı. TinyMCE m´a sv´e pˇreklady ve sloˇzce /js/tinymce/langs/.

V´ıcejazyˇcnost dynamick´ych text˚u, jako jsou ˇcl´anky a komiksy, je ˇreˇsena pomoc´ı datab´aze a v textu pr´ace se j´ı zab´yv´am v sekci t´ykaj´ıc´ı se datab´az´ı.

4.4.1 Datum a ˇ cas

Prvotn´ı nastaven´ı form´atov´an´ı datumu a ˇcasu spoleˇcnˇe s ˇcasovou z´onou nalez- neme v tˇr´ıdˇe LocaleInfo. Uˇzivatel si tato nastaven´ı m˚uˇze zmˇenit v administraci v r´amci modulu Nastaven´ı. Nastaven´ı jsou aplikov´ana podle uˇzivatelov´ych prefe- renc´ı (administrace) nebo jazykov´e mutaci str´anek (uˇzivatelsk´a ˇc´ast). Vˇsechna data ukl´adan´a do datab´aze jsou uloˇzena v z´onˇe UTC kv˚uli konzistenci.

(48)

Z´ avˇ er

V bakal´aˇrsk´e pr´aci se zab´yv´am tvorbou jednoduˇse ovladateln´eho syst´emu specia- lizovan´eho na publikaci webov´ych komiks˚u a/nebo strip˚u. V teoretick´e ˇc´asti popisuji z´akladn´ı technologie, kter´e patˇr´ı k tvorbˇe dynamick´ych webov´ych str´anek. V´ysledek praktick´e ˇc´asti je vidˇet na testovac´ı webov´e str´ance, kterou jsem vytvoˇril pomoc´ı vy- tvoˇren´eho syst´emu. Nalezneme ji na adrese llun-test.g6.cz (admin - pˇrihlaˇsovac´ı jm´eno: geont a heslo: geont258).

Jako PHP framework jsem si zvolil Nette, se kter´ym se mi d´ıky novink´am ve verzi 2 pracovalo dobˇre. Rozhodnut´ı rozdˇelit k´od do modul˚u napomohlo k snadnˇejˇs´ı ori- entaci v k´odu. Pouˇzit´y framework pro JavaScript je jQuery, kter´y m´a velk´e mnoˇzstv´ı dostupn´ych plugin˚u. Nˇekolik plugin˚u bylo vyuˇzito pro potˇreby administrace.

Syst´em umoˇzˇnuje spr´avu komiks˚u, kapitol a s´eri´ı. S´erie pak m˚uˇze m´ıt v´ıce jazy- kov´ych mutac´ı, coˇz n´am umoˇzn´ı vyd´avat komiksy ve v´ıce jazyc´ıch. Vyuˇzit´ı knihovny GD pro pˇrid´av´an´ı text˚u do obr´azk˚u se uk´azalo jako dostateˇcn´e.

S v´yslednou podobou aplikace jsem spokojen´y. Splˇnuje zad´an´ı a poˇzadavky, kter´e byly na n´ı kladeny v pr˚ubˇehu v´yvoje. Bˇehem v´yvoje doˇslo k nˇekolika probl´em˚um (napˇr. ˇspatn´e navrˇzen´ı modul˚u a datab´aze), ale ty se mi podaˇrilo vyˇreˇsit. V´yvoj aplikace ovˇsem nemus´ı b´yt koneˇcn´y, jelikoˇz jsou vˇeci, kter´e by bylo moˇzn´e pˇridat.

Pˇr´ıkladem funkce, kter´a by byla vhodn´a, je podpora addon˚u ˇci plugin˚u podobn´a takov´e, jakou maj´ı pokroˇcil´e CMS (napˇr. Wordpress).

(49)

Literatura

[1] BERNARD, B. Seri´al MVC a dalˇs´ı prezentaˇcn´ı architek- tury [online]. 2009. URL: <http://www.zdrojak.cz/serialy/

mvc-a-dalsi-prezentacni-vzory/>.

[2] DANˇEK, P. Seri´al Velk´y test PHP framework˚u [online]. 2008. URL: <http:

//www.root.cz/serialy/velky-test-php-frameworku/>.

[3] LONGMAN, A. W. A history of HTML [online]. 1998. URL: <http://www.

w3.org/People/Raggett/book4/ch02.html>.

[4] Nette foundation. Dokumentace Nette frameworku [online]. 2012. URL: <http:

//doc.nette.org/cs/>.

[5] Oracle Corporation. MySQL Differences from Standard SQL [on- line]. 2012. URL: <http://dev.mysql.com/doc/refman/5.1/en/

differences-from-ansi.html>.

[6] Q-Success. Usage of content management systems for websites [on- line]. 2012. URL: <http://w3techs.com/technologies/overview/content\

_management/all>.

[7] Q-Success. Usage of JavaScript libraries for websites [online]. 2012. URL:

<http://w3techs.com/technologies/overview/javascript\_library/

all>.

[8] Q-Success. Usage of server-side programming languages for websites [online].

2012. URL: <http://w3techs.com/technologies/overview/programming\

_language/all>.

(50)

[9] The jQuery Foundation. Dokumentace jQuery frameworku [online]. 2012. URL:

<http://docs.jquery.com/Main\_Page>.

[10] ZAHARIEV, I. C++ vs. Python vs. Perl vs. PHP performance ben- chmark [online]. 2012. URL: <http://blog.famzah.net/2010/07/01/

cpp-vs-python-vs-perl-vs-php-performance-benchmark/>.

(51)

Pˇ r´ıloha A – Obsah CD

obsah CD CD

comicPublish ... Publikaˇcn´ı syst´em se z´akladn´ı ˇsablonou Datab´aze...Soubory pro MySQL Workbench Bakal´aˇrsk´a pr´ace...Zdrojov´e k´ody bakal´aˇrsk´e pr´ace Text pr´ace

(52)

Pˇ r´ıloha B – Diagram z´ avislost´ı

mezi moduly

(53)

Pˇ r´ıloha C – EER diagram

datab´ aze

(54)

Pˇ r´ıloha D – Postup instalace

Nejdˇr´ıve mus´ıme zajistit, aby sloˇzky temp a log mˇely nastaveny pr´ava na 0766.

Pot´e mus´ıme nastavit pˇr´ıstupov´e ´udaje k datab´azi. Soubor, kter´y obsahuje nastaven´ı datab´aze, se nach´az´ı v adres´aˇri /app/config a naz´yv´a se database.neon.

K´od 4.3: Uk´azkov´y pˇr´ıklad obsahu souboru database.neon d a t a b a s e :

h o s t : l o c a l h o s t d a t a b a s e : l l u n u s e r : g e o n t

p a s s w o r d : e a s y p a s s w o r d

Podpora datab´aze je zaruˇcena pouze pro MySQL, ale dibi dok´aˇze komunikovat i s jin´ymi datab´azemi beze zmˇeny SQL. Nicm´enˇe u jin´ych datab´az´ı nen´ı zaruˇcena sto- procentn´ı funkˇcnost. Pokud bychom chtˇeli zmˇenit typ datab´aze, musel by se zmˇenit ˇr´adek driver v souboru config.neon.

V momentˇe, kdy nastav´ıme datab´azi, m˚uˇzeme pokraˇcovat v instalaci. Pˇri prvn´ım spuˇstˇen´ı str´anek se objev´ı instal´ator, kter´y reprezentuje modul Install. Ten v nˇekolika kroc´ıch provede z´akladn´ı instalaci. Vˇetˇsinu ´udaj˚u lze pozdˇeji zmˇenit v administraci.

References

Related documents

Prostˇred´ı robotu je zn´amo a je reprezentov´ano pomoc´ı geometrick´e mapy. Dan´a mapa m˚ uˇze b´ yt zachycena pr˚ ujezdem robotu v prostˇred´ı na z´akladˇe pokyn˚

Důvod, proč jsou zapotřebí dva, je následující: Pokud by při konstantním tlaku tedy i indexu lomu uvnitř trubice interferometru, byla fáze výstupního paprsku π/2, nebylo

Obrázek vypínací charakteristiky (Obr. 47 ) ukazuje to, že se v tomto měření jednotlivá měření opakovala ve stejné fázi rozepnutí, proto jsou v některých

Tento budič je koncovým prvkem generátoru obdélníkového průběhu napětí a slouží k posílení výstupu a zároveň z výstupního signálu hradlového pole o

Indukovan´e v´ıˇriv´e proudy ve vodiˇci bud´ı vnitˇrn´ı magnetick´e pole. Podle Lencova pravidla je toto pole orientov´ano tak, ˇze p˚ usob´ı proti vnˇejˇs´ımu poli

Mezi základní filtry patří například Servlet Config, který realizuje nastavení části kontextu akce na základě implementovaného rozhraní..

Pokud bychom chtˇ eli pouˇ z´ıt n−gramov´ y pˇr´ıstup ke z´ısk´ an´ı kandid´ at˚ u, museli bychom napˇr´ıklad z chybov´ e anal´ yzy zjistit jak´ e n−gramy se ˇ casto

Tabulka SmpIdentifyDB obsahuje informace o názvu a typu přístroje v budově a svým primárním klíčem se relací odkazuje do tabulky SmpMeasNameDB, která obsahuje