Tvorba tlačových zostáv v aplikácii rozvrhu FM TnUAD: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 27: Riadok 27:
 
Príklad URL požiadavku:
 
Príklad URL požiadavku:
 
  http://domena.sk/rozvrh/export/pdf/?kruzok=21302&ucitel=3&miestnost=30&predmet=2
 
  http://domena.sk/rozvrh/export/pdf/?kruzok=21302&ucitel=3&miestnost=30&predmet=2
v tomto prípade ma filter nasledovné hodnoty:
+
v tomto prípade ma filter nasledovné hodnoty:<br/>
Krúžok je 21302. Hodnoty ucitel, miestnost a predmet obsahujú identifikačné číslo učiteľa, miestnosti a predmetu v databáze.
+
Krúžok je 21302. Hodnoty ucitel, miestnost a predmet obsahujú identifikačné číslo učiteľa, miestnosti a predmetu v databáze.<br/>
Funkcia public function getUrlData()mi do poľa public $myFilter uloží hodnoty z URL.
+
Funkcia public function getUrlData()mi do poľa public $myFilter uloží hodnoty z URL.<br/>
Ďalším krokom je samotné filtrovanie údajov z databázy.
+
Ďalším krokom je samotné filtrovanie údajov z databázy.<br/>
 +
for($i=1;$i<=5;$i++){
 +
$selectDay = $db->select()
 +
                ->from(T_VIEW)
 +
                ->where('day = ?', $i)
 +
                ->order('hour ASC');
 +
if(isset($this->myFilter['kruzok'])){
 +
$selectDay->where('subclass = ' . $db->quote($this->myFilter['kruzok']).' OR (subclass IS NULL
 +
AND branch_num = ' . intval( $this->myFilter['kruzok'][1]) . '
 +
AND year = ' . intval( $this->myFilter['kruzok'][2]) . ')');           
 +
}
 +
if(isset($this->myFilter['miestnost'])){
 +
  $selectDay->where('room_id = ?',$this->myFilter['miestnost']);
 +
}
 +
if(isset($this->myFilter['ucitel'])){
 +
  $selectDay->where('user_id = ?',$this->myFilter['ucitel']);
 +
}
 +
if(isset($this->myFilter['predmet'])){
 +
  $selectDay->where('subject_id = ?',$this->myFilter['predmet']);
 +
}
 +
Do poľa $selectDay uložíme s tabuľky rozvrh_view všetky záznamy z jednotlivých dní. Postupne sa z tohto poľa filtrujú údaje podľa poľa $myFilter. Získané údaje sú ďalej spracovávané a pripravované na vypisovanie do PDF súboru. Štyri hlavné údaje sa usporiadajú podľa URL požiadavku.<br/>
 +
Ukážka jednej bunky z tabuľky rozvrhu:
 +
[[Image:Example.jpg|Obr. 2 Bunka tabuľky rozvrhu]]
 +
{| border="1" cellpadding="5" cellspacing="0"
 +
|+align="top" style="color:#000;"|''Tab. 2 Tabuľka kombinácií údajov''
 +
!Priorita
 +
!Filter
 +
!Hlavný údaj
 +
!Druhý údaj
 +
!Tretí údaj
 +
|-
 +
|1
 +
|krúžok
 +
|predmet
 +
|učiteľ
 +
|miestnosť
 +
|-
 +
|2
 +
|učiteľ
 +
|predmet
 +
|krúžok
 +
|miestnosť
 +
|-
 +
|3
 +
|predmet
 +
|učiteľ
 +
|krúžok
 +
|miestnosť
 +
|-
 +
|4
 +
|miestnosť
 +
|predmet
 +
|učiteľ
 +
|krúžok
 +
|}
 +
Príklad: ak URL obsahuje filtrovanie pre učiteľa a predmet tak hlavný údaj bude obsahovať predmet, druhý údaj bude obsahovať krúžok a tretí údaj miestnosť. Ďalšie údaje sú pre hociktorú variantu rovnaké.
 +
Zoznam údajov:
 +
*hlavný údaj
 +
*druhý údaj
 +
*tretí údaj
 +
*dĺžka hodiny
 +
*typ hodiny (prednášky, cvičenia alebo laboratórne cvičenia)
 +
*farba políčka
 +
*týždeň (párny, nepárny alebo každý týždeň)
 +
*skratka hlavného údaju
 +
*skratka druhého údaju
 +
*začiatok hodiny
 +
*údaje pre legendu číslo 1
 +
*údaje pre legendu číslo 2
 +
<br/>Príklad jedného záznamu údajov:
 +
[0] => string(32) "Logické a číslicové systémy"
 +
[1] => string(7) "P. Fabo"
 +
[2] => string(7) "Zlm 211"
 +
[3] => string(1) "2"
 +
[4] => string(1) "l"
 +
[5] => string(7) "#EFD1D1"
 +
[6] => string(1) "k"
 +
[9] => string(4) "LČS"
 +
[10] => string(5) "Peter"
 +
[11] => string(2) "12"
 +
[12] => string(27) "P. Fabo - Peter Fabo, RnDr."
 +
[13] => string(39) "LČS - Logické a číslicové systémy"
 +
Takto upravené údaje ukladám do premennej $tabulka.
 +
<br/>'''Vykresľovanie hlavyčky'''<br/>
 +
Ďalší krok je vykreslenie hlavičky PDF súboru. Najprv vykreslím logo našej fakulty potom vypíšem Trenčianska univerzita Alexandra Dubčeka v Trenčíne Fakulta Mechatroniky a nakoniec vykreslím oddeľovací pásik. Pod čiarou sa vykreslí filter s URL požiadaviek.
 +
<br/>'''Vykresľovanie tabuľky s rozvrhom'''<br/>
 +
Najprv som si vykreslil prázdnu tabuľku pomocou public function addEmptyTable($x1,$y1). Premenná $x1 a $y1 obsahuje polohu horného rohu tabuľky.
 +
[[Image:Example.jpg|Obr. 3 Prázdna tabuľka rozvrhu]]
 +
<br/>Potom pomocou opakovaného volania public function addRow($riadok,$x1,$y1) sa vykresľujú jednotlivé dni rozvrhu. Funkcia zabespečuje:
 +
*správne zobrazovanie hodín párneho a nepárneho týždňa
 +
*vyfarbuje bunky podľa typu hodiny
 +
*počíta dĺžku danej bunky
 +
*vypisuje údaje do bunky, ak je dĺžka názvu predmetu dlhšia ako dĺžka bunky tak sa vypíše skratka predmetu
 +
*vyplňuje legendu podľa použitých skratiek
 +
[[Image:Example.jpg|Obr. 4 Vyplnená tabuľka]]
 +
<br/>'''Vypísanie legendy'''<br/>
 +
public function addCaption($y1) do prvého stĺpca vypíše legendu pre skratky učiteľov a do druhého vypíše legendu pre skratky predmetov. Do spodnej časti PDF súboru vypíše legendu farebného značenia buniek.
 +
[[Image:Example.jpg|Obr. 5 Legenda]]
 +
<br/>'''Vypísanie päty dokumentu'''<br/>
 +
V päte súboru sú informácie o katedre ktorá zastrešuje celý projekt a o autorovi.
 +
<br/>'''Popis PDF súboru'''<br/>
 +
Posledným krokom pred samotným odoslaním súboru na stiahnutie, je vyplnenie popisu. Sú vyplnené nasledovné údaje:
 +
*titulok
 +
*autor
 +
*podrobnosti
 +
*kľúčové slová
 +
príklad: PDF súbor generovaný opisovanou aplikáciu by mohol vyzerať nasledovne
 +
[[Image:Example.jpg|Obr. 6 Ukážka PDF súboru]]
  
 
=Záver=
 
=Záver=
 
=Bibliografia=
 
=Bibliografia=

Verzia zo dňa a času 15:18, 17. február 2010


Na projekte „rozvrh FM TnUAD“ pracujeme 3 študenti. Dušan Pagáč, Milan Porubský a ja. Preto sme sa museli dohodnúť na určitých štandardoch a pravidlách. Mojou úlohou bolo:

  • generovanie tlačových zostáv
  • štatistické reporty údajov

Generovanie tlačových zostáv V našej aplikácii má používateľ dve možnosti tlačových zostáv

  • export rozvrhu do PDF súboru
  • export rozvrhu do formátu xlsx

Export rozvrhu do PDF súboru PDF formát je v dnešnej dobe nepísaným štandardom pre archiváciu technických dokumentov. je to voľne šíriteľný formát čo je jedným z dôvodov prečo som sa rozhodol pravé pre tento formát. Export rozvrhu do formátu xlsx Ďalšia možnosť exportu dát je xlsx formát. Xlsx formát je tiež voľne šíriteľný a rozšírený medzi používateľmi.

Realizácia tlačových zostáv

Celý projekt sme realizovali v programovacom jazyku PHP a s použitím ZEND frameworku. Čo je jedným s pravidiel na ktorých sme sa dohodli so študentmi čo pracujú na tomto projekte a s naším konzultantom. Ďalšie pravidlá boli:

  • štruktúra databázových tabuliek
  • formát URL pre filtrovanie rozvrhu

Realizácia exportu rozvrhu do PDF súboru

Prvým krokom bolo spracovanie URL požiadavku na filtrovanie rozvrhu. Príklad URL požiadavku:

http://domena.sk/rozvrh/export/pdf/?kruzok=21302&ucitel=3&miestnost=30&predmet=2

v tomto prípade ma filter nasledovné hodnoty:
Krúžok je 21302. Hodnoty ucitel, miestnost a predmet obsahujú identifikačné číslo učiteľa, miestnosti a predmetu v databáze.
Funkcia public function getUrlData()mi do poľa public $myFilter uloží hodnoty z URL.
Ďalším krokom je samotné filtrovanie údajov z databázy.

for($i=1;$i<=5;$i++){
$selectDay = $db->select()
                ->from(T_VIEW)
                ->where('day = ?', $i)
                ->order('hour ASC');
if(isset($this->myFilter['kruzok'])){
$selectDay->where('subclass = ' . $db->quote($this->myFilter['kruzok']).' OR (subclass IS NULL 
AND branch_num = ' . intval( $this->myFilter['kruzok'][1]) . ' 
AND year = ' . intval( $this->myFilter['kruzok'][2]) . ')');            
}
if(isset($this->myFilter['miestnost'])){
  $selectDay->where('room_id = ?',$this->myFilter['miestnost']);
}
if(isset($this->myFilter['ucitel'])){
  $selectDay->where('user_id = ?',$this->myFilter['ucitel']);
}
if(isset($this->myFilter['predmet'])){
  $selectDay->where('subject_id = ?',$this->myFilter['predmet']);
}

Do poľa $selectDay uložíme s tabuľky rozvrh_view všetky záznamy z jednotlivých dní. Postupne sa z tohto poľa filtrujú údaje podľa poľa $myFilter. Získané údaje sú ďalej spracovávané a pripravované na vypisovanie do PDF súboru. Štyri hlavné údaje sa usporiadajú podľa URL požiadavku.
Ukážka jednej bunky z tabuľky rozvrhu: Obr. 2 Bunka tabuľky rozvrhu

Tab. 2 Tabuľka kombinácií údajov
Priorita Filter Hlavný údaj Druhý údaj Tretí údaj
1 krúžok predmet učiteľ miestnosť
2 učiteľ predmet krúžok miestnosť
3 predmet učiteľ krúžok miestnosť
4 miestnosť predmet učiteľ krúžok

Príklad: ak URL obsahuje filtrovanie pre učiteľa a predmet tak hlavný údaj bude obsahovať predmet, druhý údaj bude obsahovať krúžok a tretí údaj miestnosť. Ďalšie údaje sú pre hociktorú variantu rovnaké. Zoznam údajov:

  • hlavný údaj
  • druhý údaj
  • tretí údaj
  • dĺžka hodiny
  • typ hodiny (prednášky, cvičenia alebo laboratórne cvičenia)
  • farba políčka
  • týždeň (párny, nepárny alebo každý týždeň)
  • skratka hlavného údaju
  • skratka druhého údaju
  • začiatok hodiny
  • údaje pre legendu číslo 1
  • údaje pre legendu číslo 2


Príklad jedného záznamu údajov:

[0] => string(32) "Logické a číslicové systémy"
[1] => string(7) "P. Fabo"
[2] => string(7) "Zlm 211"
[3] => string(1) "2"
[4] => string(1) "l"
[5] => string(7) "#EFD1D1"
[6] => string(1) "k"
[9] => string(4) "LČS"
[10] => string(5) "Peter"
[11] => string(2) "12"
[12] => string(27) "P. Fabo - Peter Fabo, RnDr."
[13] => string(39) "LČS - Logické a číslicové systémy"

Takto upravené údaje ukladám do premennej $tabulka.
Vykresľovanie hlavyčky
Ďalší krok je vykreslenie hlavičky PDF súboru. Najprv vykreslím logo našej fakulty potom vypíšem Trenčianska univerzita Alexandra Dubčeka v Trenčíne Fakulta Mechatroniky a nakoniec vykreslím oddeľovací pásik. Pod čiarou sa vykreslí filter s URL požiadaviek.
Vykresľovanie tabuľky s rozvrhom
Najprv som si vykreslil prázdnu tabuľku pomocou public function addEmptyTable($x1,$y1). Premenná $x1 a $y1 obsahuje polohu horného rohu tabuľky. Obr. 3 Prázdna tabuľka rozvrhu
Potom pomocou opakovaného volania public function addRow($riadok,$x1,$y1) sa vykresľujú jednotlivé dni rozvrhu. Funkcia zabespečuje:

  • správne zobrazovanie hodín párneho a nepárneho týždňa
  • vyfarbuje bunky podľa typu hodiny
  • počíta dĺžku danej bunky
  • vypisuje údaje do bunky, ak je dĺžka názvu predmetu dlhšia ako dĺžka bunky tak sa vypíše skratka predmetu
  • vyplňuje legendu podľa použitých skratiek

Obr. 4 Vyplnená tabuľka
Vypísanie legendy
public function addCaption($y1) do prvého stĺpca vypíše legendu pre skratky učiteľov a do druhého vypíše legendu pre skratky predmetov. Do spodnej časti PDF súboru vypíše legendu farebného značenia buniek. Obr. 5 Legenda
Vypísanie päty dokumentu
V päte súboru sú informácie o katedre ktorá zastrešuje celý projekt a o autorovi.
Popis PDF súboru
Posledným krokom pred samotným odoslaním súboru na stiahnutie, je vyplnenie popisu. Sú vyplnené nasledovné údaje:

  • titulok
  • autor
  • podrobnosti
  • kľúčové slová

príklad: PDF súbor generovaný opisovanou aplikáciu by mohol vyzerať nasledovne Obr. 6 Ukážka PDF súboru

Záver

Bibliografia