= [wiki:DeployerGuide Przewodnik wdrożeniowca] > Praca z szablonami Flexy = #tytul === Menu === #menu 1. [#wprowadzenie Wprowadzenie] 2. [#tworzenie Tworzenie szablonu Flexy i wykorzystanie go w raportach][[BR]] 2.1 [#tworzenie_sql Tworzenie raportu SQL][[BR]] 2.2 [#tworzenie_szablon Tworzenie szablonu Flexy dla raportu][[BR]] 2.3 [#instalacja_szablonu Instalacja szablonu Flexy w raporcie][[BR]] 2.4 [#instalacja_dokument Instalowanie raportu w odpowiednim module i dokumencie] 3. [#funkcje Funkcje PHP dostępne w szablonach] == 1. Wprowadzenie == #wprowadzenie Flexy to bardzo szybki i dysponujący wielkimi możliwościami silnik szablonów. Może być używany zarówno w raportach, blokach jak i generowaniu plików zewnętrznych np. do połaczenia z Symfonią. [http://pear.php.net/manual/en/package.html.html-template-flexy.php] ''Przejdź do [#menu Menu]'' == 2. Tworzenie szablonu Flexy i wykorzystanie go w raportach == #tworzenie === 2.1 Tworzenie raportu SQL === #tworzenie_sql Tworzenie raportu z wykorzystaniem Flexy należy rozpocząć od zdefiniowania raportu SQL. W module raporty tworzymy nowy raport. W zakładkę ''Ogólne'' wprowadzamy nazwę raportu, miejsce jego przechowywania. Przechodzimy do zakładki ''Definicja'', gdzie wprowadzamy definicję SQL. W zakładce Wybór kolumn możemy wybrać, jakie kolumny będą wykorzystywane w raporcie. Przykładowo tworzymy raport dla ''Notatek służbowych''. W tym celu tworzymy raport w grupie Dokumenty pt. ''Notatka Służbowa''. W zakładce definicji raportu wprowadzamy SQL-a: {{{ SELECT dv.dscrpt, dv.conten, dv.srctxt, dv.trgtxt, p.symbol||' - '||p.dscrpt as symbol, COALESCE(c.name_2, c.name_1) AS cname_ FROM documents_view dv LEFT JOIN processes p USING (prc_id) --ON (dv.prc_id = p.prc_id) LEFT JOIN doc_link_cont dlc ON (dv.doc_id = dlc.doc_id AND dlc.role__ = 'RELATED') LEFT JOIN contacts c ON (dlc.contid = c.contid) WHERE dv.doc_id = {DOC_ID} }}} Dodatkową funkcjonalnością, którą może być wykorzystana w raportach Flexy są kwerendy. jest to ostatnia zakładka okienka definicji raportu. Parametry takiego raportu muszą być identyczne z parametrami głównego raportu. W odniesieniu do naszego przykładu mogą być to np. kometarze: {{{ SELECT dc.commnt, u.firnam||' '|| u.lasnam as addtxt, to_char(dc.adddat, 'YYYY-MM-DD') AS adddat FROM document_comments AS dc LEFT JOIN users u ON (dc.adduid = u.usr_id) WHERE dc.doc_id = {DOC_ID} ORDER BY dc.adddat ASC }}} Dodatkowy kwerend można zdefiniować dowolną ilość. W tym momencie posiadamy działający już raport === 2.2 Tworzenie szablonu Flexy dla raportu === #tworzenie_szablon Skoro posiadamy już raport SQL teraz należy utworzyć szablon. Czym jest szablon? Otóż jest to plik z rozszerzeniem '''.html''', którego przykładowa zawartość wygląda następująco: {{{

Temat

{resultQueries[0][0][dscrpt]}

Treść

{resultQueries[0][0][conten]:h}

Załączniki

Komentarze

Dokument od: {resultQueries[0][0][srctxt]} Dokument do: {resultQueries[0][0][trgtxt]}
Klient: {resultQueries[0][0][cname_]} Numer sprawy: {resultQueries[0][0][symbol]}
}}} Należy zwrócić uwagę, że nie ma tutaj definicji typowych dla pliku html, jak '', , , ''. Jest niejako tylko czysta treść, na którą składają się: * style CSS pomiędzy znacznikami * elementy struktury dokumentu, jak:
, ,

, itp. * znaczniki Flexy. '''Znaczniki Flexy''' W tym miejscu zatrzymamy się, aby omówić pokrótce konstrukcję znaczników FLexy. Najważniejszym znacznikiem wykorzystywanym w szablonach jest {resultQueries}. Przykładowe zastosowanie (z powyższego przykładu): {{{ {resultQueries[0][0][dscrpt]} }}} Znacznik ten wybiera dane korzystając z definicji SQL raportu, dla którego jest zdefiniowany. I tak {{{resultQueries}}} - pobierz dane ze skryptu SQL, {{{[0]}}} - pierwszy skrypt z definicji raportu (główna definicja raportu - z zakładki Definicja SQL). Dla kwerend będzie to odpowiednio wg kolejności na liście {{{[1], [2]}}} . {{{[0]}}} - Pobiera pierwszy wiersz (rekord) raportu. {{{[dscrpt]}}} - wybiera dane z kolumny dscrpt pobranego rekordu. Powyższą konstrukcję stosuje się, jeżeli mamy pewność, iż wynikiem będzie jeden wiersz rekordu. Dla większej ilości rekordów stosuje się pętlę '''foreach''' o konstrukcji: {{{ }}} Gdzie: {{{ {foreach:resultQueries[1],k,v} }}} oznaczają początek pętli z kwerendy (zakładka Kwerendy), która zwraca parę wartości: klucz (k) oraz wartość (v). Należy pamiętać o zamknięciu pętli konstrukcją {{{ {end:} }}}. Odwołanie do wartości każdego raportu w pętli to: {{{ {v[adddat]} }}}, gdzie oznacza to pobranie wartości (v) kolumny [adddat]. Jeżeli źródłem danych jest pole tekstowe, to należy zastosować konstrukcję {{{ {v[commnt]:h} }}}, gdzie istotny jest modyfikator ''':h''', który wyłącza przetwarzanie funkcji ''htmlspecialchars''. Uniemożliwia to wykonanie np. szkodliwych skryptów JavaScript. Obecnie mamy dwa elementy takiego systemu. Jak to teraz połączyć, aby ze sobą współpracowały? === 2.3 Instalacja szablonu Flexy w raporcie === #instalacja_szablonu Posiadając w pliku szablon html oraz zdefiniowany raport w systemie należy razem te elementy ze sobą scalić, tak aby ze sobą współpracowały. Pierwszym krokiem w tym procesie jest import szablonu do systemu eDokumenty. Przechodzimy do ''Panelu Sterowania > Szablony Systemowe''. Importujemy plik szablonu. Następnie przechodzimy do definicji raportu, gdzie w zakładce Ogólne w polu domyślny szablon wpisujemy nazwę szablonu flexy (z rozszerzeniem np. notatkaSluzbowa.html). Po zapisie mamy scalony szablon z raportem. Ale to jeszcze nie koniec. Teraz należy podpiąć odpowiednio raport pod dokument. === 2.4 Instalowanie raportu w odpowiednim module i dokumencie === #instalacja_dokument Posiadany raport należy zainstalować w odpowiednim module np. Module Dokumenty oraz odpowiednim dokumencie np. dokumencie typu Notatka służbowa. Wtedy uruchomienie akcji Drukuj > Notakta Służbowa na dokumencie uruchomi raport Flexy. ''Przejdź do [#menu Menu]'' == 3. Funkcje PHP dostępne w szablonach: == #funkcje 1. str_replace {{{ Przykład użycia: {str_replace(#-#, ##, documents.dscrpt):h} Powyższe wywołanie usunie wszystkie wystąpienia znaku "-" z tekstu znajdującego się pod zmienną "documents.dscrpt" }}} 2. trim {{{ {trim(documents.dscrpt):h} Powyższe wywołanie usunie wszystkie białe znaki z początku i końca tekstu znajdującego się pod zmienną "documents.dscrpt" }}} 3. preg_replace 4. substr {{{ {substr(documents.dscrpt, 2, 0):h} Powyższe wywołanie zwróci tekst ze zmiennej "documents.dscrpt" począwszy od drugiego znaku. }}} 5. strpos / stripos {{{ Opis dokumentu {if:strpos(documents.dscrpt, #123#)}ZAWIERA{else:}NIE ZAWIERA{end:} ciąg: "123" }}} 6. funkcje porównujące (eq, gt, gte, lt, lte) {{{ eq(1,2) jednoznaczne z 1 == 2 gt(1,2) jednoznaczne z 1 > 2 gte(1,2) jednoznaczne z 1 >= 2 lt(1,2) jednoznaczne z 1 < 2 lte(1,2) jednoznaczne z 1 <= 2 }}} przykład: {{{ {if:gt(vatnote.netto_,0)} kwota netto jest większa od zera {end:} }}} 7. funkcja wykonująca zapytanie na SQL przykład: {{{ {sql_query(#SELECT street FROM addresses WHERE addrid = (SELECT mainad FROM contacts WHERE contid = {%1})#,event[contid])} }}} wszystkie dostępne funkcje: {{{ round($val, $precision = NULL); in_array($val, $array); array_key_exists($key, $array); strpos($haystack, $needle); stripos($haystack, $needle); substr($string, $start, $length); str_replace($from, $to, $source); trim($string); preg_quote($str); preg_replace($from, $to, $source); date($format, $time = NULL); number_format( float $number , int $decimals , string $dec_point , string $thousands_sep ) str_pad( string $input , int $pad_length [, string $pad_string= " " [, int $pad_type= STR_PAD_RIGHT ]] ) json_decode($target, $json, $param = TRUE) sql_query($query,[$var1,$var2,...]) output_report($rep_id, $clsnam, $keyval, $params = NULL) }}} ''Przejdź do [#menu Menu]''