Pro starší formuláře (bez parametru "mode") musí být v PHP povolen modul xslt, obvykle takto:
extension=php_xsl.dll
Pro správnou funkčnost povolených modulů je potřeba zkontrolovat cestu, z které se načítají. Na Windows obvykle takto:
extension_dir = "ext"
Pokud se databáze připojuje přes ODBC, je potřeba nastavit dostatečně velkou hodnotu
pro maximální velikost datového pole, např:
odbc.defaultlrl = 524288
Stejně tak je potřeba nastavit limity v případě přímého připojení přes MSSQL:
mssql.textlimit = 524288 mssql.textsize = 524288
Pokud se v PHP nezobrazují warningy a místo toho se provádění skriptu ukončí, zkontrolujte nastavení logování chyb v PHP. K chybě dochází když je nastavené log_errors na On, ale není nastavena cesta k souboru error_log - viz http://forums.iis.net/p/1146102/1856222.aspx#1856222 Pomůže správné nastavení cesty k souboru s logem, nebo případně (jako nouzové řešení) nastavení log_errors na off.
XML formulář definuje obsah, který se zobrazí uživateli a případně akce které se budou provádět po zadání dat.
Může být předávací - to znamená, že se po po uložení vyplněný formulář uloží do databáze (Vyplněné XML formuláře)
a může se předávat dalším uživatelům. Způsob zpracování formuláře určuje parametr mode
.
mode="show"
- zobrazovací formulářmode="process"
- zobrazovací (nepředávací) formulář, ve kterém se provádí i nějaké akce (uložení do databáze atd.).
Po odeslání tohoto formuláře se provede zpracování (process) a následně přesměrování na stejnou XML šablonu - tedy nové zobrazení.
Toto je doporučený mód pro formuláře, které provádějí nějaké zpracování, ukládání dat, volání skriptů, přepočtu atd.mode="data"
- předávací formulář. Ve vyplněném formuláři se ukládají pouze uživatelem vyplněná data.
Pro zpracování vyplněného formuláře se použije znovu původní šablona. V případě změny šablony se změna projeví i ve vyplněných formulářích.
Tento mód je doporučený pro předávací formuláře. Výhodou (proti módu transform) je menší datová velikost vyplněných formulářů (nepřenáší se kód šablony)
a možnost oprav již vyplněných formulářů. Vyplněné datové formuláře je technicky možné následně zpracovávat například pro zjištění nějakých statistik,
což u transformovaných formulářů prakticky nelze.mode="transform"
- předávací formulář. Do vyplněného formuláře se přenáší transformovaný kód původní šablony. Změna šablony nemá vliv na již vyplněné formuláře.
POZOR! tento mód ještě není u většiný tagů implemenován!mode="event"
- šablona je určena pro spouštění událostí (je volána automaticky z kódu Portálu). Nelze použít samostatně.mode="include"
- šablona je určena pro načtení (include) z jiného formuláře. Může obsahovat například nastavení uživatelských proměnných. Nelze použít samostatně.mode="hodnoceni"
- šablona je určena pro zobrazení hodnocení. Nelze použít samostatně.S formulářem se pracuje v několika režimech v závislosti na jeho módu:
Starší formuláře nepoužívaly parametr mode. Místo toho měly příznak neukladat="1"
nebo neukladat="2"
.
Hodnota 2 (doplněna 7.6.2016) pracuje jinak s POST a pro akci formulare používá stejnou URL jako pro zobrazení.
Navíc v nich bylo potřeba pomocí parametru verze="2"
zapnout používání nového zápisu proměnných.
Pro vytváření XML formuláře je někdy užitečné zapnout ladící informace. To se provede povolením v _appdbset.php
$enabledebugmode = 1;
a následným zapnutím v URL adrese pomocí parametru debug=1. Ladící informace se zobrazují jen uživateli, který si je takto zapne, takže je to možné provádět i u zákazníka v ostrém provozu.
Šablona XML formuláře musí vypadat takto:
<?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet href="ronform.xsl" type="text/xsl"?> <!-- JMENO AUTORA, RON Software, 2011 --> <ronform mode="data" xmlns:html="http://www.ron.cz/xmlforms/ns/html/" xmlns:htmladd="http://www.ron.cz/xmlforms/ns/htmladd/> ... obsah xml sablony ... </ronform>
Pokud šablona neobsahuje editovatelné prvky, nebo je zpracování editovatelných prvků a odesílání formuláře řešené nějakým jiným způsobem,
je možné místo ronform
použít ronxml
. Rozdíl je v tom, že ronxml
nevkládá do HTML stránky form
a skrytá pole.
Uvnitř tagu je možné použít xmlform
, který skrytá pole vloží. To lze použít například v případě, že má být ve stránce více formulářů.
<?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet href="ronform.xsl" type="text/xsl"?> <!-- JMENO AUTORA, RON Software, 2013 --> <ronxml mode="show"> ... obsah xml sablony ... ... generovaná stránka neobsahuje form a skrytá pole, takže nelze pouzit <predatdale> a podobně </ronxml>
Datové XML formuláře (tj. formuláře, ve kterých se při předávání ukládají jen data) musí mít parametr mode="data"
.
<?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet href="ronform.xsl" type="text/xsl"?> <!-- JMENO AUTORA, RON Software, 2017 --> <ronform mode="data"> ... obsah xml sablony ... </ronform>
Důležitá je správná hlavička a kořenový tag <ronform>
.
Vše se řídí pravidly XML. Poznámky se zapisují mezi znaky <!--
a -->
Každý element může vypadat takto:
<JMENO_ELEMENTU>
... obsah ... </JMENO_ELEMENTU>
nebo (pokud nemá žádný vnořený obsah) takto:
<JMENO_ELEMENTU />
Pořadí parametrů v tagu není podstatné a některé parametry mohou být úplně vynechány. Záleží na velikosti písmen.
Tagy <ronform>
a <xmlform>
mohou obsahovat také html atributy, např. html:class="..."
Kopíruje se do HTML a v případě transformovaných formulářů (mode="transform") i do výsledného vyplněného formuláře
<div>
... obsah ... </div>
V obsahu lze použít HTML značky, ale musí odpovídat XML pravidlům.
Např.
<BR/>
(všimněte si znaku / )<B>
... text ... </B>
Pozor! Text nesmí obsahovat řídící znaky jako např. "<
" a ">
"
Pro zobrazení těchto znaků lze použít aliasy <
a >
Nebo lze text uzavřít do sekce CDATA
<table class="browser"> <tr> <td>testovací tabulka</td><td>sloupec 2</td><td>třetí sloupec</td> </tr> <tr> <td>druhý řádek</td><td>té testovaci</td><td>tabulky ...</td> </tr> </table>
Orámovaná tabulka, která stylem odpovídá formulářům intrawebu. Tabulka má jeden sloupec s nadpisy a druhý s obsahem (edity, zaškrtávátka atd). Její použití není povinné, takže pokud je potřeba rozvrhnout stránku nějak jinak, lze použít např. standardní HTML tabulky.
<inputtable> <inputtablerow caption="Nadpis řádku"> ... obsah ... </inputtablerow> </inputtable>
<variablevalue name="promenna1" suffix="..." index="..." format="..."/>Zobrazí hodnotu zadané proměnné. Nepovinný suffix je přidán k názvu proměnné. Parametr format je nepovinný. Pokud je zadán index, musí být proměnná pole (nebo null), jinak je zahlášena chyba.
<text> Text s proměnnýma ... </text>Zobrazí přímo zadaný text s nahrazením proměnných.
<nastavrozdeleniformulare typ="kodtypu" kod="kodrozdeleni" />Nastaví rozdělení formuláře (tj. pole KodTypuRozdeleni a Rozdeleni v tabulce VyplnenyXMLFormular a proměnné XML_KODTYPUROZDELENI a XML_ROZDELENI).
<expression name="vysledna_promenna" copy="0/1/yes/no"> PHP výraz s proměnnými, například: '{$retezec1}' . '{$retezec2}' // spojeni retezcu - retezce je nutne uzavirat do uvozovek nebo apostrofu, operator pro spojeni je . (tecka)! </expression>V zadaném výrazu nahradí proměnné a vyhodnotí jej. Výsledek zapíše do zadané proměnné (name). Pokud není název proměnné zadán, tak výsledek nikam neukládá - v takovém případě nemusí zadaný výraz ani vracet žádnou hodnotu a může to být obecně jakýkoliv PHP kód.
copy
určuje, jestli se po vyplnění formuláře zachová původní tag s výrazem (toto je i výchozí chování, pokud není copy
zadán),
nebo se transformuje na <variable>
(v případě, že je copy
"0" nebo "no"), což znamená, že hodnota proměnné se pak již nemění.<nastavobdobiformulare obdobi="..." aplikace="kodaplikace" variabilni="0/1" name="jmenopromenne"/>Nastaví období formuláře (tj. pole Obdobi v tabulce VyplnenyXMLFormular a proměnnou XML_OBDOBI). Pokud je zadaný kód aplikace a jméno proměnné, tak načte z databáze také další parametry období a nastaví podle něj proměnné, stejně jako tag vyberobdobi.
<nastavosobuformulare rc="rodne_cislo" name="jmeno_promenne" />Nastaví osobu formuláře (tj. pole RC v tabulce VyplnenyXMLFormular). Pokud je zadáno jméno proměnné "name" tak zároveň nastaví příslušné proměnné (name_...)
<nastavpracovnipomer idpp="id_PP" name="jmeno_promenne" />Nastaví pracovní poměr formuláře (tj. pole PP_RC, PP_OsobniCislo, PP_DatumNastupu v tabulce VyplnenyXMLFormular). Pokud je zadáno jméno proměnné "name" tak zároveň nastaví příslušné proměnné (name_...)
<adsfilterform autosubmit="0/1" useget="0/1"> <adsfilterform_obdobi aplikace="ADS" jenotevrene="0/1"/> <adsfilterform_osoby prava="prohlizeni"/> <adsfilterform_rozdeleni typrozdeleni="kodtypu" pouzevlastni="0/1/2" prava="typprav" pouzitpopistypurozdeleni="0" > nepovinny_sql_filtr_pro_vyber_rozdeleni </adsfilterform_rozdeleni> <adsfilterform_rozdeleni2 typrozdeleni="kodtypu" pouzevlastni="0/1/2" pouzitpopistypurozdeleni="0" > nepovinny_sql_filtr_pro_vyber_rozdeleni </adsfilterform_rozdeleni2> </adsfilterform>Pro výběr osob podle předávacího procesu formuláře:
<adsfilterform> <adsfilterform_osoby/> </adsfilterform>
Tag <adsfilterform>
zobrazí standardní intrawebový formulář pro výběr období nebo osoby. Zobrazené filtry se určí pomocí
vnořených tagů. Nepovinný parametr autosubmit
určuje, jestli se při změně některého z filtrů provede automatické odeslání formuláře.
Výchozí hodnota je 1 (odesílá se automaticky).
Nepovinný parametr useget
určuje, jestli se pro odeslání hodnot použije metoda GET (hodnota 1 - doporučeno) nebo POST (výchozí kvůli kompatibilitě starých formulářů).
Vytváří proměnnou adsfilterformsubmit
, která obsahuje hodnotu 1 pokud byl v předchozím kroku formulář odeslán (automaticky nebo pomocí tlačítka Nastavit), jinak 0.
Tag <adsfilterform_obdobi aplikace="ADS"/>
zobrazí výběr období zadané aplikace. Vytvoří proměnné
OBDOBI
- počátek zvoleného obdobíOBDOBI_pocatek
OBDOBI_pocatekstr
OBDOBI_konec
OBDOBI_konecstr
OBDOBI_popis
OBDOBI_uzavreno
Tag <adsfilterform_rozdeleni typrozdeleni="kodtypu" pouzevlastni="0/1/2">
zobrazí výběr rozdělení zadaného typu.
Pokud je pouzevlastni=1, zobrazí jen rozdělení uživatele a podřízená. Pokud je pouzevlastni=2 a je zadán typ práv (parametr prava),
zobrazí jen rozdělení zaměstnanců, na které má uživatel příslušné právo.
Vytváří proměnné ROZDELENI, ROZDELENI_kod a ROZDELENI_popis
Pomocí parametru showvcetnepodrizenych="1"
je možné zapnout zobrazení zaškrtávátka "včetně podřízených".
Pak navíc vytváří proměnnou ROZDELENI_vcetnepodrizenych s hodnotou 0 nebo 1.
Tag <adsfilterform_rozdeleni2 typrozdeleni="kodtypu" pouzevlastni="0/1/2">
zobrazí druhý výběr rozdělení zadaného typu.
Vytváří proměnné ROZDELENI2, ROZDELENI2_kod a ROZDELENI2_typ
Pomocí parametru showvcetnepodrizenych="1"
je možné zapnout zobrazení zaškrtávátka "včetně podřízených".
Pak navíc vytváří proměnnou ROZDELENI2_vcetnepodrizenych s hodnotou 0 nebo 1.
Tag <adsfilterform_osoby prava="prohlizeni"/>
zobrazí výběr pracovního poměru podle práv aktuálního uživatele
nebo podle předávacího procesu (pokud není zadán parametr prava
).
Typ práv může být zadán parametrem prava
(viz záznamy v tabulce TypPravaProIntraweb).
Vytvoří proměnné OSOBA, OSOBA_id
- id vybraného pracovního poměru a další proměnné stejně jako u tagu <vyberpracovnihopomeru>
POZOR! Každý prvek musí mít své jedinečné jméno v rámci celého XML formuláře. Toto jméno musí odpovídat identifikátoru programovacího jazyka (začíná písmenem, dále může obsahovat písmena i čísla). Nepoužívejte pro jména diakritiku!
hidden
. Používá se pro předání informací, které nezadává uživatel (např. načtené z databáze).
<hidden name="nazev" value="hodnota" format=""/>
<postvalue name="nazev" format="" htmlname="htmlname" />Načte do proměnné se zadaným názvem hodnotu odeslanou v předchozím kroku formuláře. Může to být hodnota zadaná uživatelem, nebo odeslaná v pomocí
<hidden>
. Umožňuje zjistit hodnotu zadané proměnné ještě před tím, než se ve formuláři zpracuje
příslušný editovatelný prvek (edit a podobně).
Parametr name
určuje jméno vytvořené proměnné.
Parametr format
určuje požadovaný datový formát.
Nepovinný parametr htmlname
určuje jméno použité v html stránce. Pokud není zadán, použije se name
.
<edit name="testovaciedit" format="" required="yes/no/0/1" editing="yes/no/append/nolog" size="60"> předplněný obsah editu - může samozřejmě být prázdný </edit>zobrazí textové pole pro zadání jednoho řádku textu.
yes
- pole bude v dalších fázích editovatelné - kterýkoliv další uživatel jej může změnitno
- pole vyplní jen první uživatel. Další uživatelé jej už uvidí pouze jako text
append
- pole bude v dalších fázích stále editovatelné, ale budou se zobrazovat všechny
hodnoty, které zadali předchozí uživatele (i se jménem uživatele) nolog
- pole zůstává editovatelné, ale na rozdíl od yes
se změny nelogují
required
je nepovinný, výchozí hodnota je 0 (totéž jako no). Hodnota yes nebo 1 znamená, že je vyplění pole povinnéformat
je nepovinný, pokud má zadanou hodnotu, kontroluje se správnost zadaných dat. možné hodnoty jsoudate, time, datetime, int, integer, positive (= kladný integer), float- parametr
size
je nepovinný, určuje šířku zobrazeného editu - jednotka je 'znak', ale je to pouze orientačnídatavariable="0"
lze zabránit uložení hodnoty v datovém xml formulářiname
, ve které je uživatelem zadaná hodnota.
U některých formátů jsou navíc vytvořeny další proměnné:date, time, datetime
- vytvoří proměnnou name_TIMESTAMP - číselná hodnota reprezentující zadaný údaj
float
- vytvoří proměnnou name_FLOAT - číselná hodnota
<memo name="testovacimemo" editing="yes/no/append/nolog" cols="60" rows="8"> předplněný obsah - může samozřejmě být prázdný </memo>Stejné jako textové pole, ale zobrazí se prvek pro zadání víceřádkového textu.
cols
a rows
nejsou povinné, výchozí hodnoty jsou 60, respektive 8.datavariable="0"
lze zabránit uložení hodnoty v datovém xml formuláři.<vyberosoby name="OSOBA" editing="yes/no" />- pole pro zobrazeni comboboxu pro vyber osoby
no
OSOBA
, OSOBA_RC
, OSOBA_jmeno
, OSOBA_prijmeni
, OSOBA_jmenoprijmeni
, OSOBA_titul
<vyberosoby name="OSOBA" editing="yes/no" value="XYZ" />
<vyberpracovnihopomeru name="PP" editing="yes/no" pouzevlastni="0/1/2" />- pole pro zobrazeni comboboxu pro vyber PP
PP_osobnicislo
, PP_datumnastupu
, PP_datumnastupu_str
, PP_popis
, PP_id
(stejna hodnota jako PP)pouzevlastni
určuje, jestli se mají zobrazit všichni zaměstnanci, na které má uživatel právo (hodnota 0 - implicitní),
jen zaměstnanci z vlastních rozdělení (hodnota=1), nebo z podřízených rozdělení (hodnota=2)
<filtrpodleprav name="jmeno_promenne" typprava="kod_typu_prav" tabulka="jmeno_sql_tabulky" obdobiod="datum_od" obdobido="datum_do" />Do zadané proměnné (
name
) vloží SQL podmínku pro kontrolu práv zadaného typu (typprava
) uživatele.
Podmínka se kontroluje v zadané tabulce (pole RC, OsobniCislo a DatumNastupu). Pokud není tabulka zadána, použije
tabulku PracovniPomer. Pokud jsou zadány parametry obdobiod
a obdobido
, musí v nich být platný timestamp.
Pokud nejsou zadány a formulář má přiřazeno období, použije se počátek a konec období a pokud nemá formulář období, použije
se aktuální čas.
<checkbox name="testovacicheck" checked="0/1"/>Zobrazí zaškrtávátko - nepovinný parametr checked určuje, jestli bude zaškrtnuté, nebo ne.
<radio name="testovaciradio" value="hodnota" checked="0/1"/> <radio name="testovaciradio" value="hodnota" checked="0/1">popis volby ... </radio>Zobrazí přepínací zaškrtávátko. Parametr
value
určuje hodnotu této volby. Může být definováno více radiobuttonů se stejným jménem, ale s různou hodnotou.
Nepovinný parametr checked
určuje, jestli bude tato volba zaškrtnutá, nebo ne.
Dále je možné v módu transform
pomocí parametru editing
nastavit, jak se bude zobrazovat po vyplnění:
editing="yes"
- button bude i nadále editovatelý (toto je výchozí hodnota)editing="no"
- button bude po odeslání needitovatelnýediting="remove"
- pokud uživatel tuto volbu nezaškrtne, tak bude z dokumentu odstraněna včetně vnitřního obsahu. Pokud je zaškrtnuta, tak se do výsledného XML zkopíruje vnitřní obsah.<sqlselect name="jmeno" editing="yes/no" format="..." required="0/1" showcode="0/1"> SELECT Kod, Popis FROM ... </sqlselect>SQL dotaz musí obsahovat 2 pole - první je použito interně jako jedinečný kód, druhé je zobrazeno. Parametr format určuje formát prvního pole - pokud je "timestamp", převede se hodnota na číselnou reprezentaci času, jinak na text.
<sqlselect name="testovacisqlselect" editing="yes/no" value="hodnota">Po vyplnění se vytvoří proměnné
jmeno
- obsahuje hodnotu prvního pole z sql dotazu
jmeno_text
- obsahuje hodnotu druhého pole z sql dotazu
<select name="jmeno" editing="yes/no"> <option value=""/> <option value="1" default="1">volba 1</option> ... </select>vytváří proměnné
jmeno
jmeno_text
<xmllog value="text s proměnnými, který se zapíše do XML"/>Zobrazení logu:
<showxmllog name="jmeno"/> <showxmllog name="jmeno"> <div><span class="dotaznik_jmeno">{$xmllog_username} ({$xmllog_time})</span>: <b>{$xmllog_value}</b></div> </showxmllog>Zobrazí log pro příslušný editační prvek (parametr name). Pokud je obsah elementu prázdný (první způsob zápisu), zobrazí výchozí vzhled logu, Pokud má element vnořený obsah (druhý způsob zápisu), použije jej pro výpis každého záznamu. Vnořený obsah může obsahovat jakékoliv jiné tagy a lze použít proměnné xmllog_name, xmllog_time, xmllog_username, xmllog_value, xmllog_value_br (konce řádků jsou nahrazeny tagem br), xmllog_poradipredavani, xmllog_urovenpredavani. xmllog_value_br lze vypsat například takto:
<showxmllog name="poznamka"> <div><span class="dotaznik_jmeno">{$xmllog_username} ({$xmllog_time})</span>: <b><text>{$xmllog_value_br}</text></b></div> </showxmllog>
<browser name="browser_typprava"> <browsersql> SELECT Kod, Popis, Aplikace, TypRozdeleni, Poznamka FROM TypPravaProIntraweb ORDER BY Kod </browsersql> <browserfield sqlindex="0" caption="Kód" format=""/> <browserfield sqlindex="1" caption="Popis"/> <browserfield sqlindex="2" caption="Aplikace"/> <browserfield sqlindex="3" caption="Typ rozdělení" style="text-align:center"/> <browserfield text="zobrazit ..."/> <browserdetail col="1">{$browser_typprava[4]}</browserdetail> </browser>Zobrazí výsledek dotazu jako seznam. SQL dotaz musí být definován v podřízeném tagu
browsersql
name
), vytváří se na každém řádku proměnné name[0], name[1] atd.
(podle počtu polí v SQL dotazu). Proměnné je pak možné použít v textu, v <browserdetail>
nebo v odkazech (link nebo browserlink).browserfield
:<browserfield sqlindex="0" caption="Nadpis" format="" style="css styl" link="..." text="zobrazený text" />
sqlindex
určuje index pole v SQL dotazu.
caption
určuje nadpis sloupce.
style
určuje css styl zobrazení buňky tabulky.
format
určuje, jak se má naformátovat hodnota načtená z databáze, například:date, time, datetime, year, finedate, finedatetime, number1, number_1, number2, number_2, kc, curr, hodiny, minuty, timeofday
text
, zobrazí se přímo tento text. V textu mohou být použity proměnné.
link
definuje proklik například na nějakou akci formuláře. Příklad:link="{$XML_LINK}&xmlaction=zobrazit&kod={$browser_typprava[0]}"
<browserdetail>
je možné definovat text, který se zobrazí jako detail každého řádku.
Zobrazení začíná ve sloupci col - tento parametr není povinný a výchozí hodnota je 1.<dochazkabrowser> <browsersql> SELECT PuvodniDochazka.DatumCasOperace, OperaceDochazky.Popis, PuvodniDochazka.Terminal, PuvodniDochazka.Poznamka FROM PuvodniDochazka, OperaceDochazky WHERE PuvodniDochazka.KodOperace = OperaceDochazky.Kod AND PuvodniDochazka.RC = {$OSOBA_RC} AND PuvodniDochazka.OsobniCislo = {$OSOBA_osobnicislo} AND PuvodniDochazka.DatumNastupu = {$OSOBA_datumnastupu:timestamp} AND PuvodniDochazka.DatumCasOperace >= {$OBDOBI_pocatek:timestamp} AND PuvodniDochazka.DatumCasOperace <= {$OBDOBI_konec:timestamp} ORDER BY PuvodniDochazka.DatumCasOperace </browsersql> </dochazkabrowser>Zobrazí seznam záznamů po dnech. Na každém řádku jsou záznamy z jednoho dne. První pole v SQL dotazu musí vracet čas.
<section name="jmeno_sekce"> ... obsah sekce ... </section>Zobrazí se jenom první sekce v dokumentu. Vše co je v následujících sekcích je ignorováno. Po vyplnění se první sekce odstraní, přenese se pouze její obsah.
<section name="sekce_osoba"> <vyberosoby name="OSOBA" editing=no> </section> <section name="sekce_hlavni_obsah"> ... tato sekce se zobrazí až po odeslání předchozí sekce ... </section>V datových XML formulářích je parametr
name
povinný. Pokud už byla sekce vyplněna, tak se nastaví proměnná příslušného jména
a sekce už se pak implicitně nezobrazuje. Opakované zobrazení lze vynutit parametrem repeat="1"
.
<show> ... obsah ... </show> <fill> ... obsah ... </fill>Obsah elementu
show
se provede pouze při zobrazování formuláře (tj. při generování HTML stránky).fill
se provede pouze při vyplňování nebo zpracování formuláře (tj. při generování upraveného XML nebo zpracování).<lang>test - vsechny jazyky - tohle je asi k nicemu</lang> <lang include='cz'>jen cesky</lang> <lang include='cz;sk'>cesky a slovensky</lang> <lang exclude='cz'>alles, all, vsetko len ne cesky</lang>Obsah bloku lang se provede jen v případě, že je aktivní některý z jazyků, zadaných v parametru
include
.
V případě, že include
není zadán, tak se obsah provede, pokud není aktivní některý z jazyků v parametru exclude
.
Typycké použití bude:
<lang include='sk'>slovenský text ...</lang> <lang include='eng'>anglický text ...</lang> <lang exclude='sk;eng'>defaultní text pro všechny ostatní jazyky</lang>Lze použít i ve fill - tj. pokud jsou uvnitř nějaké vnořené tagy, provedou se jen v případě, že je aktivní příslušný jazyk. V opačném případě se obsah pouze kopíruje.
{#text_pro_preklad}
<include id="id_xml_sablony"> <include name="popis_xml_sablony">Načte a provede zadanou XML šablonu. Může být zadáno id šablony nebo její popis. V režimu transform je možné přidat parametr exprand="1" (výchozí hodnota je 0), který zajistí, že se obsah vložené šablony rozvine do vyplněného XML formuláře.
<debugmsg>text debugovací hlášky s parametry</debugmsg> <infomsg>text informační hlášky s parametry</infomsg>Text hlášky se vypíše přímo do intrawebu ihned v okamžiku zpracování tagu a to v režimu show i fill.
<debugmsg>
se zobrazuje jen v debug režimu, infomsg vždy.
<sql format="..." name="..."> SQL dotaz s parametry. POZOR! Pouze SELECT! Pro UPDATE a další používejte <sqlaction>! </sql>
Pokud je zadán parametr name
, tak se zároveň nastaví proměnná zadaného jména stejně jako v <sqlvariable>.
Format je nepovinný, pokud není zadán, tak se výsledek zobrazí tak, jak je vrácen z databáze.
POZOR!
Nepoužívejte tento tag pro SQL příkazy, které nevrací žádné řádky (UPDATE, INSERT, DELETE). Může to způsobovat chyby,
například:
No tuples available at this result index
, případně Internal server error
Místo toho používejte tag <sqlaction>
Parametr se do dotazu vloží takto: {$JMENO_PROMENNE:FORMAT}
Format je nepovinný, výchozí je string
. U jiných datových typů musí být zadán.
Možné formáty (některé mají různé možné názvy - není mezi nimi rozdíl):
string
date
datetime, timestamp
sqltimestamp
- převede datum načtené z databáze na sql formát
datestr
- převede textové datum (např. zadané editem ve formatu date) na sql format
int, integer
float, double
sql
- vloží přímo hodnotu proměnné jako část sql dotazu (bez dalšího formátování).
Pokud obsahuje další proměnné, tak jsou nejdříve nahrazeny.
To znamená, že je možné nadefinovat nějaký podvýraz (např. filtr) s proměnnýma, který je možné potom využít v dalších sql dotazech
<vyberrozdeleni name="jmeno_promenne" typ="kod_typu_rozdeleni" obdobi="0/1/2" required="yes/no" pouzevlastni="0/1/2/3/4"/> <vyberrozdeleni name="rozdeleni" /> <vyberrozdeleni name="rozdeleni" typ="11"/> <vyberrozdeleni name="rozdeleni" > Rodic IS NOT NULL </vyberrozdeleni>
Zobrazí combobox pro výběr rozdělení. Vybrané rozdělení je přiřazeno XML formuláři.
Pokud není zadán typ rozdělení, použije se typ, který se používá pro předávací procesy.
Parametr required
určuje, jestli je výběr rozdělení povinný.
Parametr name
určuje jméno proměnné.
Parametr obdobi
může být:
Parametr pouzevlastni
může být:
Dále může být zadán filtr pro omezení výběru.
POZOR! Pokud se použije název proměnné "rozdeleni", bude se měnit rozdělení, které má uživatel zadané ve filtrech.
Toto chování nemusí být žádoucí - v tom případě použijte jiný název proměnné.
<link action="akce" params="parametry" text="zobrazený text" question="nepovinná otázka před provedením akce" />Zobrazí HTML odkaz pro provedení zadané akce s parametry v aktuálním formuláři
<editacemesicnich>
- hromadný přehled zaměstnanců s možností editace měsíčních výsledků, mzdových položek - popis nastavení
<forsql name="jmeno_promennych" expand="0/1/no/yes" sqltext="SELECT ... " > ... </forsql> <forsql name="jmeno_promennych" expand="0/1/no/yes" sqltextvariable="sql_var" > ... </forsql>Provede obsah pro každý řádek zadaného sql dotazu. POZOR! Na některých platformách (sqlsrv, pdo_mssql) nefunguje, pokud je v SQL textu datumové pole! U sqlsrv se tento problém dá vyřešit, pokud se v
_appdbset.php
nastaví
$_sqlsrv_converttimestamp = true;Parametr expand určuje, jestli se má forsql přenášet do dalších úrovní tak jak je (takže přímo tag forsql), nebo se má při prvním vyplnění rozgenerovat a pak už se přenáší jen vnitřní obsah.
processonfill
zajistit, aby se tag provedl i při fill (má smysl jen když není nastaven expand).
V tom případě se do výsledného XML tag standardně zkopíruje (jako bez expand), ale navíc se také provede obsah.
<foreach name="jmeno_promenne" arrayvariable="ridici_pole" > ... </foreach>Provede obsah pro každou položku zadaného pole (proměnná s názvem zadaným v arrayvariable musí být pole, které jde získat například pomocí atributu delimiter v tagu variable). V každém kroku cyklu je definována proměnná se zadaným jménem (name) a proměnná s tímto jméném doplněným o "_key".
<variable name="pole" delimiter=";">100;200;300;301</expression> <foreach name="item" arrayvariable="pole" > <div><text>{$item_key} = {$item}</text></div> </foreach>
<while condition="PHP podminka"> ... </while>
Provede while cyklus - vyhodnocuje vnitřní obsah elementu dokud je splněna zadaná PHP podmínka.
<ulozit text="Uložit" question="Opravdu si přejete formulář uložit bez předání na další úroveň?" />- tlačítko pro uložení formuláře bez předání na jinou úroveň (Formulář se vyplní podle všech pravidel. Uživatel se k němu může vrátit, ale pokud jsou tam pole, která nejde dodatečně editovat, tak už je nemůže změnit)
<ulozit/>
<ulozit text="Uložit" question="Opravdu si přejete formulář uložit bez předání na další úroveň?"> <log description="Stisknuto ULOZIT" category="XML formulare">Id formuláře: {$XMLID} </log> <ulozit/>
<predatdale text="Předat dále" question="Opravdu chcete formulář předat dále?" />- tlačítko pro odeslání formuláře a předání na další úroveň
<vratitzpet text="Vratit zpět" question="Opravdu chcete formulář vrátit zpět?" zacatek="0/1"/>- tlačítko pro odeslání formuláře a předání zpět na předchozí úroveň
zacatek="1"
, provede vraceni na zacatek predavaciho procesu<action name="zapsat" text="Zapsat" question="Opravdu si přejete záznam zapsat?" urovne="U1;U2"> ... obsah akce - napr. SQL vyrazy, zmena stavu formulare ... </action> <button name="zapsat" text="Zapsat" question="Opravdu si přejete záznam zapsat?"> ... obsah akce - napr. SQL vyrazy, zmena stavu formulare ... </button>- přidá další tlačítko. Po jeho stisknutí se formulář uloží a provedou se příkazy uvnitř akce (log, email, stav a podobně)
<error>
), akce se neprovede
- tag <button>
se chová stejně jako <action>
, ale zobrazuje se všem uživatelům
<redirect/> <pokracovat/>
Po dokončení formuláře provede html přesměrování (redirect) na stejnou šablonu respektive vyplněný formulář = znovu formulář zobrazí. Lze to použít například pro akci typu "přepočet" - formulář se odešle, uloží se uživatelem zadané hodnoty, přepočítají se nějaké výsledky (pomocí SQL, skriptu a podobně) a formulář se znovu zobrazí. Pomocí parametrů tagu lze přidat url parametry nebo přesměrovat někam jinam:
<redirect params="..."/> - přidá k url zadané parametry <redirect sablona="id_xml_sablony" params="..."/> - přesměrování na jinou xml šablonu (parametry nejsou povinné) <redirect xmlid="id_vyplneneho_formulare" params="..."/> - přesměrování na jiný vyplněný xml formulář <redirect urlparams="..."/> - obecný redirect na jinou stránku v portálu, např. urlparams="menuid=dochazkazamestnance" <redirect url="..." urlparams="..."/> - obecný redirect na jakoukoliv jinou stránku <redirect value="0" /> - zruší případné dříve nastavené přesměrování
<uzavrit />- uzavře formulář (nastaví stav = 128)
<stav novystav="0" />- nastaví stav na zadanou hodnotu
<predat smer="1" />- předá formulář o zadaný počet kroků dále (zpět). Parametr
smer
musí být celé číslo (kladné = předat dále, záporné = vrátit zpět). Hodnota -999 znamená předání na začátek.
<sqlaction> SQL dotaz s parametry </sqlaction>
<sqlaction sqltextvariable="jmeno_promenne_s_sql_dotazem" />- provede zadaný SQL výraz - pokud je zadán parametr sqltextvariable, použije se SQL dotaz z dané proměnné, jinak se použije text uvnitř tagu. Použití proměnné umožňuje spouštění stejného SQL dotazu na různých místech formuláře, takže se nemusí dotaz opakovat.
<record>
, <loadrecord>
, <insertrecord>
, <editrecord>
, <updateorinsertrecord>
, <deleterecord>
.
Tímto způsobem dojde také k zalogování události (INSERT/UPDATE/DELETE/ERROR) včetně původních hodnot.
Update se provede pouze v případě změny některé hodnoty.
<record tablename="JMENOTABULKY"> <recordfield name="JMENOPOLE1" format="FORMAT_POLE1" size="DELKA_TEXTOVEHO_POLE">HODNOTA1</recordfield> <recordfield name="JMENOPOLE2" format="FORMAT_POLE2">HODNOTA2</recordfield> ... <insertrecord /> </record>Provede vložení záznamu a zalogování.
<record tablename="JMENOTABULKY"> <recordfield name="JMENOPOLE1" format="FORMAT_POLE1" size="DELKA_TEXTOVEHO_POLE">HODNOTA1</recordfield> <recordfield name="JMENOPOLE2" format="FORMAT_POLE2">HODNOTA2</recordfield> ... <recordwhere> ... podmínka, která se vloží do SQL výrazu SELECT (při načítání původní hodnoty) a UPDATE (při editaci změněných hodnot) </recordwhere> <editrecord/> </record>Dále je definován tag
<updateorinsertrecord>
, který provede editaci záznamu
a pokud záznam neexistuje, tak vloží nový.<record tablename="JMENOTABULKY"> <recordfield name="JMENOPOLE1" format="FORMAT_POLE1" size="DELKA_TEXTOVEHO_POLE">HODNOTA1</recordfield> <recordfield name="JMENOPOLE2" format="FORMAT_POLE2">HODNOTA2</recordfield> ... <recordwhere> ... podmínka, která se vloží do SQL výrazu SELECT (při načítání původní hodnoty) a UPDATE (při editaci změněných hodnot) </recordwhere> <loadrecord name="JMENO_PROMENNE"/> </record>Načte do proměnných JMENO_PROMENNE_JMENOPOLE... hodnoty jednotlivých polí záznamu. Tagy
<recordfield>
definují jednotlivá pole záznamu:
<recordfield name="JMENOPOLE" format="FORMAT_POLE" size="DELKA_TEXTOVEHO_POLE" readonly="0/1" updatelog="0/1">HODNOTA</recordfield>Parametr name je povinný. U textových polí je možné specifikovat maximální délku (
size
).
V případě, že má hodnota větší délku, bude oříznuta. Příznak readonly zajistí, že nebude pole při editrecord
změněno
(při insert se tento příznak ignoruje - pole bude naplněno). Původní hodnota pole bude zalogována.
Příznak updatelog
způsobí, že se u pole nekontroluje změna hodnoty. Pokud nebude změněno žádné jiné pole,
které nemá updatelog="0", tak se update vůbec neprovede. Lze použít například pro pole "Update_TimeStamp", "Update_UserName" a podobně.
int, integer
float, double
date, datetime, timestamp
- čas v interním formátu PHP (např. hodnota proměnné promenna_TIMESTAMP z editu ve formátu date
)time
- čas (bez datumu)datestr
- datum zadaný textověsqltimestamp, sqldate
- čas nebo datum načtený přímo z databáze (např. pomocí forsql)<log description="Stisknuto ULOZIT" category="XML formulare"> ... doplňující komentář ... lze použít proměnné např. Id dotazníku: {$XMLID} </log>
<dblog tablename="Tabulka" eventtype="Udalost" srcdescription="XML"> ... doplňující komentář ... lze použít proměnné např. Id dotazníku: {$XMLID} </log>
<nastavpodrobnostiformulare fieldname="jmeno_pole">... text s proměnnými ...</nastavpodrobnostiformulare>
Nastaví dodatečná pole, které jsou v tabulce VyplnenyXMLFormular a mohou sloužit například pro filtrování.
V textu je možné použít proměnné. Zároveň jsou vytvořeny proměnné pro získání hodnot těchto polí v XML.
jmeno_pole
může být:
rozliseni1
- proměnná XML_ROZLISENI1
rozliseni2
- proměnná XML_ROZLISENI2
rozliseni3
- proměnná XML_ROZLISENI3
rozliseni4
- proměnná XML_ROZLISENI4
dodatecnypopis
- dodatečný popis, zobrazuje se i v seznamu vyplněných formulářů, proměnná XML_DODATECNYPOPIS
poznamka
- proměnná XML_POZNAMKA
context
- (Až VER2!!!) context xml elementů block, které se budou dále vyhodnocovat. Bloky s jinou hodnotou atributu context budou ignorovány.
Pokud se máblok provést jen v připadě, že není aktivní žádný context, pak zadejte hodnotu #nocontext
. Pokud context není zadán, nebo je prázdný,
vyhodnotí se block
vždy<agent name="ADS_Agent_Processing.exe" app="ads" params="parametry agenta"/>
<script scriptcategory="kategorie" scriptname="nazevskriptu" scriptparameter="textovy_parametr_s_promennyma" variablename="jmenopromenne"/>Spustí zadaný skript z Docházky (kategorie/nazevskriptu) se zadaným parametrem. V parametru je možné použít proměnné. Pokud je zadáno variablename, nastaví se zadaná proměnná na hodnotu 1 v případě úspěšného provedení skriptu, a na hodnotu 0 v případě neúspěšného provedení skriptu.
<prejitnaxml idsablony="..." />Po provedení formuláře (fill) přejde na zadané XML - tj. zobrazí zadaný XML formulář místo standardního seznamu formulářů (přechod provede pouze v případě, že už se formulář nezobrazuje, například po odeslání formuláře).
V aplikaci je možné změnit standardní funkčnost Intrawebu přesměrováním na XML formulář. Provede se v nastavení intrawebu, záložka Předávací procesy, XML. Kromě běžných "menuid" je tam možné přemapovat také zobrazení seznamu hodnocení - zadáním řádku
b_hodnoceni=id xml formuláře
Pomocí tagu <mapovanimenu>
v XML formuláři je pak možné nastavit, jestli se po zobrazení formuláře provede ještě nějaká další (např. defaultní) akce.
XML formulář tak může být použit jen pro zobrazení uživatelských informací před samotným obsahem stránky, například pokyny pro uživatele.
<mapovanimenu pokracovat="0/1" menuid="nove_menuid" />Parametr pokracovat určuje, jestli se po zobrazení formuláře ještě pokračuje standardní obsluhou události. Navíc lze událost změnit pomocí parametru menuid.
<delete okinfomsg="Formulář byl smazán z databáze" />- smaže formulář z databáze a v případě úspěchu zobrazí zadanou hlášku
<error fieldname="JMENO_POLE" text="Chyba! ..." /> <error fieldname="JMENO_POLE">Text chyby</error>- zobrazení chybové hlášky
<test>
<dokument name="JMENO_POLE" popis="popis dokumentu" typ="kod_typu" style="html_styl"/>Zobrazí pole pro přiložení souboru. Soubor se potom zapíše do tabulky dokument a propojí s XML formulářem záznamem v tabulce DokumentXMLFormulare. Po vložení souboru se vytvoří nový záznam v tabulce Dokument, tag
dokument
se transformuje na pripojenydokument
a zobrazuje se odkaz na stáhnutí souboru.editing
(hodnoty yes/no) je možné nastavit, jestli bude možné vložit více dokumentů.
viewfile
je možné změnit způsob zobrazení celé webové stránky.
Parametrem frame="1"
se zapíná zobrazení stránky bez hlavičky a menu (vhodné například pro umístění do frame):
<viewfile frame="1"/>Parametrem
filename="...."
je možné použít jakýkoliv jiný PHP soubor pro vygenerování stránky.
<hlavickahodnoceni /> <DIV class="nadpishodnoceni"> <variablevalue name="HODNOCENI_PopisTematu" /> </DIV> <otazkyhodnoceni id='{$HODNOCENI_Id}' druhhodnoceni='{$HODNOCENI_DruhHodnoceni}' temacislo='{$HODNOCENI_TemaCislo}'> <otazkahodnoceni id='{$HODNOCENI_Id}' druhhodnoceni='{$HODNOCENI_DruhHodnoceni}' temacislo='{$HODNOCENI_TemaCislo}' kodkriteria='{$HODNOCENI_KodKriteria}' zpusobzobrazeni='1' /> </otazkyhodnoceni> <poznamkahodnoceni /> <tlacitkahodnoceni ulozit="Jenom uložit" odeslat="Předat dále" vratit="null" uzavrit="Definitivně uzavřít"/>
Slouží pro zobrazení hodnocení.
Jsou definovány proměnné HODNOCENI_Id
, HODNOCENI_DruhHodnoceni
, HODNOCENI_TemaCislo
, HODNOCENI_PopisTematu
, HODNOCENI_PoznamkaTematu
a HODNOCENI_Action
.
Proměnná HODNOCENI_Action
může mít hodnotu editace
(zobrazení hodnocení pro editaci), nahled
(zobrazení needitovatelneho nahledu hodnocení),
prevzit
(zobrazení informace o již vyplněném dotazníku a možnost převzetí - v případě chyby nebude převzetí umožněno)
a nastavhodnotitele
(nastavení hodnotitele při zobrazení pro editaci - v případě chyby nebude vyplnění umožněno).
Tag <otazkyhodnoceni>
generuje svůj obsah pro každou otázku. Na každém řádku definuje proměnnou HODNOCENI_KodKriteria
.
V tagu <otazkahodnoceni>
je možné změnit způsob zobrazení odpovědí nepovinným parametrem zpusobzobrazeni
-
buď jednotlivé odpovědi zobrazí v tabulce (hodnota 1), nebo v seznamu (UL, LI - hodnota 0). Pokud není zadán, tak se použije nastavení z databáze.
Tlačítka se vkládají pomocí tagu <tlacitkahodnoceni>
- pomocí jednotlivých parametrů je možné zadat zobrazované texty. Pokud je zadáno "null", tak nebude tlačítko zobrazeno.
Při uložení hodnocení se provádí šablona v režimu process
(stejně jako vyplnění datového XML). V ní je možné provést například nějakou dodatečnou kontrolu zadaných hodnot nebo provést nějakou akci.
Pomocí tagu <ulozodpovedihodnoceni>
se provede uložení uživatelem zadaných odpovědí. Pokud není tento tag při zpracování formuláře nalezen, tak se poté uložení provede automaticky.
Podle výsledku nastaví proměnnou HODNOCENI_Ulozeno
.
Pomocí tagu <prepocitejhodnoceni neulozene="0/1">
se provede přepočet hodnocení.
Pokud je parametr neulozene
= 1, tak se přepočet provede i v případě, že odpovědi nebyly úspěšně uloženy a nebyly vyplněny všechny povinné odpovědi.
Podle výsledku nastaví proměnnou HODNOCENI_Prepocteno
.
<editacemesicnich>
SKOLENI_PRIHLASENI_BEFORE
a SKOLENI_PRIHLASENI_AFTER
obsahují navíc oproti záznamu record
i proměnné osobaRC
, osobaOsobniCislo
a osobaDatumNastupu
pro identifikaci vybraného pracovního poměru osoby.
html
možné doplnit i parametry,
které se přímo vygenerují do XML. Ke kořenovému elementu XML formuláře se v tom případě musí doplnit namespace:
<ronform xmlns:html="http://www.w3.org/1999/xhtml" mode="data"> ... <edit name="muj_edit" html:style="width: 500px" /> ... </ronform>
<span style="display:inline-block; width:50px;"> </span>
<span style="float:right"> ... (obsah) ... </span>