Przejdź do głównej treści

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}.

ZnacznikOpis
{LOGGED_USR_ID}ID zalogowanego pracownika