Page


Opis

Moduł Page to zestaw metod do obsługi stron. Programista znajdzie tu funkcje służące takim celom jak

Generowanie adresów stron

Adresy stron mogą być tworzone za pomocą 3 rodzajów metod

  1. Metoda url generuje adres strony bez wpływu na bieżącą sesję
  2. Metoda login generuje adres strony po przejściu do której zostanie utworzona sesja
  3. Metoda logout generuje adres strony po przejściu do której zostanie zakończona bieżąca sesja

Każda z powyższych metod posiada kilka wariantów, w tym cztery podstawowe z następującymi argumentami

  1. String code
  2. String code, Object rowID
  3. String code, Object rowID, String additionalParams
  4. String code, String additionalParams

gdzie

code - kod strony
rowID - wartość parametru adresu URL o nazwie _RowID
additionalParams - dodatkowe parametry adresu URL w formie: &parametr1=wartość1&parametr2=wartość2&...

Metoda url dodatkowo posiada warianty z argumentami pozwalająymi określać czy do adresów powinny być dołączane unikalne identyfikatory (umożliwiające jednrazowe wykorzystanie z adresu) oraz czy do adresów powinna być  dołączana informacja o sesji.

Adres strony o kodzie application.UserInfo z parametrem Username o wartości jankowalski można uzyskać w następujący sposób: $url("application.UserInfo", "&Username=jankowalski").

Generowanie adresów multimediów

Do generowania adresów multimediów służy metoda mediaURL. Możliwe jest generowanie adresów multimediów zapisanych w tabeli systemowej jPALIO o nazwie p_media ale także adresów multimediów zapisanych w dowolnej tabeli, która zawiera następujące kolumny: identyfikator rekordu, nazwa pliku, typ MIME pliku, data ostatniej aktualizacji rekordu, rozmiar pliku, binarna zawartość pliku. Nazwy kolumn mogą być dowolne.

Metoda mediaURL pozwala na określanie w jaki sposób ma być traktowany obiekt docelowy (obiekt o adresie wygenerowanym przez tę metodę) - można zdać się na domyślne zachowanie przeglądarki w stosunku do plików danego typu lub wskazać, że obiekt ma być traktowany jako załącznik (wówczas przeglądarka nie będzie próbowała otwierać takiego obiektu ale zaproponuje zapisanie go na dysku).

Ponadto metoda mediaURL daje możliwość tworzenia adresów do automatycznie generowanych miniatur obrazków z określeniem rozmiarów i jakości miniaturki oraz metody interpolacji.

Najbardziej ogólne warianty metody mediaURL to

gdzie

connector - nazwa konektora
tableName - nazwa tabeli w której znajduje się obiekt multimedialny
colID - nazwa kolumny przechowującej identyfikator rekordu w tabeli tableName
colFileName - nazwa kolumny przechowującej nazwę pliku w tabeli tableName
colMimeType - nazwa kolumny przechowującej typ MIME pliku w tabeli tableName
colLastUpdated - nazwa kolumny przechowującej datę ostatniej aktualizacji rekordu w tabeli tableName
colSize - nazwa kolumny przechowującej rozmiar pliku (w bajtach) w tabeli tableName
colContent - nazwa kolumny przechowującej binarną zawartość pliku w tabeli tableName
ID - identyfikator rekordu dla obiektu multimedialnego w tabeli tableName
asAttachment - czy obiekt multimedialny powinien być traktowany jako załącznik
width - szerokość miniaturki (w pikselach)
height - wysokość miniaturki (w pikselach)
quality - jakość miniaturki (od 0 do 100)
interpolationType - metoda interpolacji miniaturki (0 - metoda najbliższego sąsiada, 1- metoda dwuliniowa, 2 - metoda dwusześcienna)

Pominięcie pierwszych 8 argumentów w powyższych metodach oznacza generowanie adresu obiektu multimedialnego w tabeli systemowej p_media.

Obsługa przekierowań

Przekierowania mogą być realizowane z poziomu nagłówka HTTP (w obiekcie jPALIO podpiętym do strony jako obiekt nagłówka) lub z poziomu strony (w obiekcie jPALIO podpiętym do strony jako obiekt treści). Przekierowanie z poziomu nagłówka HTTP realizuje metoda redirectHeader(String URL), zaś przekierowanie z poziomu strony metoda redirectObject(String URL).

Pobieranie treści stron

Niekiedy istneje konieczność pobrania treści strony WWW. Metoda urlContent(String url, String user, String password, String charset) zwraca treść strony WWW spod aresu url. Jeżeli strona wymaga autoryzacji HTTP, wówczas stronę taką można pobrać określając użytkownika i hasło za pomocą parametrów user i password. Do określenia zbioru kodowego pobieranej strony służy parametr charset. Istnieją również warianty metody urlContent bez parametrów user i password czy charset.

Obsługa nagłówków HTTP

Do dodawania wartości nagłówków HTTP służy metoda addHeader(String name, String value) gdzie name to nazwa nagłówka a value to wartość nagłówka.

Z obsługą nagłówków wiąże się także obsługa ciasteczek. Do tworzenia ciasteczka o nazwie name i wartości value na komputerze użytkownika służy metoda addCookie(String name, String value), zaś do pobierania wartości takiego ciasteczka metoda getCookie(String name).

Metody związane z obsługą nagłówków HTTP mogą być wywoływane wyłącznie w obiektach jPALIO podpiętych do stron jako obiekty nagłówka.

Generowanie stron binarnych

Tworzenie stron binarnych składa się z kilku kroków:

  1. Stworzenie nowej strony jPALIO z określeniem jej typu MIME i wskazaniem, że generuje ona binarny strumień wyjściowy
  2. Stworzenie i podpięcie do utworzonej strony obiektu nagłówka strony
  3. Stworzenie podpięcie do utworzonej strony obiektu treści strony

W obiekcie nagłówka strony typowo umieszczane są dwa nagłówki HTTP:

$addHeader("Content-Type", "TU_NAZWA_TYPU_MIME_STRONY")
$addHeader("Content-Disposition", "attachment; filename=TU_NAZWA_PLIKU")
W obiekcie treści strony do wysłania danych binarnych data (w formie tablicy bajtów) na stronę używana jest metoda writeBinary(byte[] data).

Przykłady

Typowym zastosowaniem parametru _RowID jest użycie go do przekazywania w adresie URL identyfikatora rekordu w tabeli bazodanowej. Poniższy przykład demonstruje użycie metody url do prezentacji listy stron jPALIO oraz prezentacji szczegółów dotyczących każdej strony

$ifNull($_RowID, {
  $=(@counter, 1)
  $=(@page, (Object[])null)
  <table border="1">
  <tr>
    <th>No</th>
    <th>Page</th>
  </tr>
  $for(@page, $sql.read("select id, name from p_pages order by name", (Object[])null, [Long, String]), {
    <tr>
      <td align="right">$@counter</td>
      <td align="left"><a href="$url($currentPageCode(), $@page[0])">$toHTML((String)$@page[1])</a></td>
    </tr>
    $++(@counter)
  })
  </table>
}, {
  $=(@page, $sql.readLine("select name, code, is_protected, is_binary, no_checksum, req_unique_id from p_pages where id = ?", [$toLong((String)$_RowID)], [String, String, String, String, String, String]))
  
  <table border="1">
  <tr>
    <td><b>Page name</b></td>
    <td>$toHTML((String)$@page[0])</td>
  </tr>
  <tr>
    <td><b>Page code</b></td>
    <td>$@page[1]</td>
  </tr>
  <tr>
    <td><b>Is protected</b></td>
    <td>$if($==((String)$@page[2],"Y"),{yes},{no})</td>
  </tr>
  <tr>
    <td><b>Is binary</b></td>
    <td>$if($==((String)$@page[3],"Y"),{yes},{no})</td>
  </tr>
  <tr>
    <td><b>Requires checksum</b></td>
    <td>$if($==((String)$@page[4],"Y"),{no},{yes})</td>
  </tr>
  <tr>
    <td><b>Requires unique identifier</b></td>
    <td>$if($==((String)$@page[5],"Y"),{yes},{no})</td>
  </tr>
  </table>
  
  <input type="button" value="Back" onclick="window.location='$url($currentPageCode())';">
})

 

Przykład użycia metod login i logout

$ifNull($user.userID(), {
  $html.createForm("login_form", "login_form", $login($currentPageCode()), (String)null, (String)null, {
    LOGIN: $html.loginField((String)null, 100, "LOGIN")
    PASSWORD: $html.passwordField(100, "PASSWORD")
    $html.submitButton("_UserLogin", "LOG IN")
  }, {})
}, {
  <input type="button" value="LOG OUT" onclick="window.location='$logout($currentPageCode())';">
})

 

Pobieranie aktualnych kursów walut

$=(@exchangeRatesHTML, $urlContent("http://www.nbp.pl/Kursy/KursyA.html"))
$=(@exchancheRatesXMLURL, $findRegex($@exchangeRatesHTML, "href=\"([^\\.]+.xml)\""))

$ifNotNull($@exchancheRatesXMLURL, {
  $=(@exchangeRatesXML, $urlContent($+("http://www.nbp.pl", $@exchancheRatesXMLURL[1])))
  
  $=(@exchangeRatesCodes, $xml.evaluateXPathAsNodesText($@exchangeRatesXML, "//pozycja/kod_waluty"))
  $=(@exchangeRatesMultipilers, $xml.evaluateXPathAsNodesText($@exchangeRatesXML, "//pozycja/przelicznik"))
  $=(@exchangeRatesAverages, $xml.evaluateXPathAsNodesText($@exchangeRatesXML, "//pozycja/kurs_sredni"))
  
  $=(@exchangeRates, $emptyList())
  $=(@exchangeRateCounter, 0)
  $for($length($@exchangeRatesCodes), {
    $util.add($@exchangeRates, [
      $get($@exchangeRatesCodes, $@exchangeRateCounter), 
      $/($toBigDecimal((String)$get($@exchangeRatesAverages, $@exchangeRateCounter), "", ","), $toLong((String)$get($@exchangeRatesMultipilers, $@exchangeRateCounter)), 8)
    ])
    $++(@exchangeRateCounter)
  })
  
  Current exchange rates: $asArray($@exchangeRates)
})

 

API

http://jpalio.torn.com.pl/modules/palio/modules/Page.html