Tworzenie szablonu Flexy dla raportu
W artykule Tworzenie raportu SQL pisaliśmy już raport SQL teraz należy utworzyć szablon. A czym jest szablon? Otóż jest to plik z rozszerzeniem .html, którego przykładowa zawartość wygląda następująco:
<style>
TABLE .ReportTable TD {
font-size: 12px;
}
TD.printLabel {
font-size: 12px;
vertical-align: top;
font-style: italic;
border-bottom: 1px solid grey;
}
TD.printData {
font-size: 12px;
vertical-align: top;
border-bottom: 1px solid grey;
}
.printHeader {
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
}
.parag {
text-indent: 20px;
}
</style>
<div style="margin-left:20px;">
<p class="printHeader" style="margin-top: 10px;">Temat</p>
{resultQueries[0][0][dscrpt]}
<p class="printHeader" style="margin-top: 10px;">Treść</p>
{resultQueries[0][0][conten]:h}
<p class="printHeader" style="margin-top: 10px;">Załączniki</p>
<ul style="list-style-type:none;">
{foreach:resultQueries[2],k,v}
<li style="font-size:12px;"> - {v[filenm]}<li>
{end:}
</ul>
<p class="printHeader" style="margin-top: 10px;">Komentarze</p>
<ul style="list-style-type:none;">
{foreach:resultQueries[1],k,v}
<li><i>{v[addtxt]} {v[adddat]}</i><BR>{v[commnt]:h}<li>
{end:}
</ul>
<table class="RaportTable RaportTable2" style="margin-top:20px; background-color: white; width: 100%" border=0 cellpadding=1 cellspacing=2>
<tr>
<td class="printLabel">Dokument od:</td>
<td class="printData">{resultQueries[0][0][srctxt]}</td>
<td class="printLabel">Dokument do:</td>
<td class="printData">{resultQueries[0][0][trgtxt]}</td>
</tr>
<tr>
<td class="printLabel">Klient:</td>
<td class="printData">{resultQueries[0][0][cname_]}</td>
<td class="printLabel">Numer sprawy:</td>
<td class="printData">{resultQueries[0][0][symbol]}</td>
</tr>
</table>
</div>
Należy zwrócić uwagę, że nie ma tutaj definicji typowych dla pliku html, jak <html>
, <head>
, <body>
, <!DOCTYPE...>
.
Jest niejako tylko czysta treść, na którą składają się:
- style CSS pomiędzy znacznikami
<style></style>
- elementy struktury dokumentu, jak:
<div></div>
,<td></td>
,<p></p>
, 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:
Przykład foreach-a
<ul style="list-style-type:none;">
{foreach:resultQueries[1],k,v}
<li><i>{v[addtxt]} {v[adddat]}</i><BR>{v[commnt]:h}</li>
{end:}
</ul>
Gdzie: {foreach:resultQueries[1],k,v}
oznaczają początek pętli z kwerendy (zakładka Kwerendy), która zwraca parę wartości:
- klucz
k
, - 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.
Domyślne znaczniki Flexy
Posługujemy się nimi podobnie jak innymi znacznikami czyli {znacznik}.
Znacznik | Opis |
---|---|
{LOGGED_USR_ID} | ID zalogowanego pracownika |