xbase - Przeglądarka bazy
Podstawowy moduł obiektowy do obsługi baz definiowanych w systemie - pobiera porcję lub konkretny rekord ze zdefiniowanej bazy i przekazuje do szablonu.Moduł reaguje na zewnętrzne zmienne przekazywane w adresie URL, dzięki czemu może działać jako wyszukiwarka, filtrować dane wg wybranych pól, sklejać tabele, sortować.
Moduł posiada wbudowany mechanizm schowka, który pozwala zalogowanym użytkownikom zapamiętywać na stronie wybrane rekordy.
Dzięki specjalnym zmienny zawartym w polu "warunek SQL" ten sam moduł może zachowywać sie różnie w zależności od kategorii, wyników działania innego modułu, rodzaju zalogowanego użytkownika, wersji, itp
Pola w bazie oznaczone jako pola dostępne do przeszukiwania można filtrować wg zmiennych GET w adresie URL:
zmienna tablicowa GET | przykład URL z wirtualnymi katalogami | przykład URL bez wirtualnych katalogów | oprator działanie |
---|---|---|---|
eq | /dzial/eq-pole,wartosc.html | page.php?cat=5&eq[pole]=wartosc | pole = 'wartosc' |
lt | /dzial/lt-pole,20.html | page.php?cat=5<[pole]=20 | pole < 20 |
gt | /dzial/gt-pole,10.html | page.php?cat=5>[pole]=10 | pole > 10 |
lteq | /dzial/lteq-pole,10.html | page.php?cat=5<eq[pole]=10 | pole <= 10 |
gteq | /dzial/gteq-pole,10.html | page.php?cat=5>eq[pole]=10 | pole >= 10 |
band | /dzial/band-pole,8.html | page.php?cat=5&band[pole]=8 | pole & 8 |
query | /dzial/query-pole,ciag.html | page.php?cat=5&query[pole]=ciag | pole LIKE '%ciag%' |
eq, eqin | /dzial/eqin,1,eq-pole,wartosc1:wartosc2.html | page.php?cat=5eqin=1,&eq[pole]=wartosc1:wartosc2 | pole IN ('wartosc1', 'wartosc2') |
ll | /dzial/ll-pole,abcd.html | page.php?cat=5&ll[pole]=abcd | pole like 'abcd%' |
lr | /dzial/lr-pole,abcd.html | page.php?cat=5&lr[pole]=abcd | pole like '%abcd' |
ym | /dzial/ym-pole,200910.html | page.php?cat=5&ym[pole]=200910 | DATE_FORMAT(pole, '%Y%m') = '200910' |
Zmienna query może odwoływać sie do wszystkich pól oznaczonych jako pola do przeszukiwania lub do wybranych jak w powyższej tabeli.
Lista może być sortowana wg domyślnych ustawień lub zgodnie z parametrem zdefiniowanym w URL - zmienne order oraz desc. W zmiennej order należy podać nr pola - zawarty w kluczu __index, np dla pola "nazwa" : {$mod.xbase.fields.nazwa.__index}
zmienna GET | przykład URL z wirtualnymi katalogami | przykład URL bez wirtualnych katalogów | działanie |
---|---|---|---|
order | /dzial/order,4.html | page.php?cat=5&order=4 | sortowanie rosnące dla pola oznaczonego numerem 4 |
order, desc | /dzial/order,4,desc,1.html | page.php?cat=5&order=4&desc=1 | pole < 20 |
Moduł obsługuje również system opisów parametrycznych włącznie z filtrowaniem.
Konfiguracja (zakładka "dodatkowe opcje" w ustawieniach modułu)
wybierz bazę | baza z której moduł ma pobierać rekordy |
dodatkowe zmienne | dodatkowe zmienne dopisane do zapytanie SQL typu SELECT, wymienione po przecinku, mogą to być funkcje zgodne ze składnią SQL, przykład: (wartosc + vat_kwota ) as suma CONCAT(A.imie, ' ', A.nazwisko) as osoba IF ({perms} & 8, 'tak', 'nie') as uprawnienie |
warunek sql | dodatkowy warunek SQL Warunek może zawierać zmienne specjalne które zostaną zastąpione przez moduł wartościami wg schematu:
|
grupuj wg pola | pole wg którego będą grupowane pobrane rekordy (GROUP BY w MySQL) |
dodatkowy join | dodatkowy ciąg typu LEFT JOIN ____ ON ____ doklejany do zapytania SQL |
pokazuj ze wszystkich kategorii | Domyślnie moduł xBase pokazuje tylko rekordy przypisane do danej kategorii, zaznaczenie tej opcji powoduje że ten warunek nie będzie stosowany |
pokazuj również z podkategorii | Domyślnie moduł xBase pokazuje tylko rekordy przypisane do danej kategorii, zaznaczenie tej opcji spowoduje że będą również pobierane rekordy przypisane do podkategorii bieżącej kategorii (cała gałąź) |
pokazuj tylko własne rekordy | Rekordy w bazach zdefiniowanych w systemie posiadają pole "user_id" które zarezerwowane jest na przypisanie rekordu do użytkownika strony. Zaznaczenie tej opcji spowoduje że zalogowany użyykownik zobaczy tylko rekordy przypisane do swojego loginu (a ściślej do ID) |
ignoruj status rekordów | Domyślnie moduł xBase pokazuje tylko rekordy posiadające wartość pola status = 1, zaznaczenie tej opcji spowoduje że będą również pobierane rekordy z polem status = 0 |
pokaż zawartosc schowka | Zaznaczenie tej opcji spowoduje że będzie pobierana tylko lista rekordów które zalogowany użytkownik dodał do schowka |
sprawdzaj schowek | Zaznaczenie tej opcji spowoduje że moduł będzie sprawdzał czy rekord znajduje się w schowku zalogowanego użytkownika - do listy wyników zostanie dodane pole "in_clipboard" - niezerowa wartość oznacza że rekord jest w schowku |
sortuj wg pola (puste - domyślnie) | definuje pola wg których ma nasąpiś sortowanie listy. Jeśli pole to nie zostało zdefiniowane oraz flaga "bez ORDER BY" nie jest zaznaczona moduł wykona dodtkowe zapytanie sprawdzające domyślne ustwienia sorotwania we właściwościch bazy. Przkładowe wartości pola: A.nazwa, A.date_start DESC imie, nazwisko W polu można używać zmiennej {lang} która zostanie zastąpiona wartością liczbową określającą ID bieżącej wersji językowej |
pobieraj listę kategorii do tablicy | Zaznaczenie tej opcji powoduje że dla każdego rekordu moduł wygeneruje pole o nazwie "catlist" które będzie zawierało tablicę z ID kategorii do których został przypisany rekord |
szukaj w polach z tabeli złączonej: | Zaznaczenie tej opcji powoduje że przy wyszukiwaniu przy użyciu parametru GET w adresie url o nazwie "query" sprawdzane będą również pola z tabel dołączanych |
połącz tebelę wg pola | Domyślnie moduł xbase nie dokonuje złączeń wg pola typu typu "relTable" czyli relacji przypisania jednego lub wiecej rekodów z zewnętrznej tabeli do rekordu. Wpisując w tej opcji nazwę takiego pola można wymusić sklejenie tego typu |
pobierz dane o autorze rekordu (pola po przecinku) | Jeśli to pole zostało wypełnione, następuje sklejenie z tabelą użytkowników wg właściciela rekordu (pole user_id) i pobranie wartości pól wyszczególnionych w tej opcji. Wratości pól zostaną przekazane do wynikó z prefiksem "U_" czyli np "U_imie", "U_login" |
porcja | Porcjowanie wyników - limit rekordów, wartość w tym polu ma priorytet przed ustawieniami limitu w kategorii |
nazwa zmiennej okreslajacej id rekordu (rid) | Domyślnie parametrem GET w adresie url, określającym wskazanie na konkretny rekord jest zmienna "rid", w tym polu możemy zmienić nazwę tej zmiennej |
nazwa zmiennej offset przy stronicowaniu (offset) | Domyślnie parametrem GET w adresie url, określającym przesunięcie pobieranie rekordów (offset) przy porcjowwaniu jest zmienna "offset", w tym polu możemy zmienić nazwę tej zmiennej |
dodatkowy skrypt | Nazwa dodatkowego skryptu dołączanego do modułu umieszczonego w katalogu /modules/ o nazwie [nazwa].inc.php |
period field | określenie które pole typu data, będzie uwzględniane przy filtrowaniu wg okresu - przekazywanego w URL w zmiennej GET 'period' określającej liczbę dni która jest odejmowana od daty bieżacej i porównywana operatorem "<=" od daty w polu. Przydatne do pokazwyanie rekordów "nie starszych" niż X dni |
przy wskazaniu na rekord sortuj listę wg pola | Określenie parametru ORDER BY dla listy przy wskazaniu na rekord |
przy wskazaniu na rekord warunek sql dla listy | Określenie dodatkowego warunku SQL dla listy przy wskazaniu na rekord |
nie pobieraj listy przy wskazaniu na rekord | Domyślnie moduł przy wskazaniu na rekord, oprócz zapytania pobrania rekordu wykonuje również pobieranie zawartosci listy - zaznaczenie tej opcji powoduje że lista nie będzie pobierana przy wskazaniu na rekord (bardzo często nie ma takiej potrzeby) |
bez ORDER BY | zanaczenie tej opcji spoowoduje że do zapytania nie będzie dołączone parametr ORDER BY - czyli tabela będzie nieposortowana wg pola a wg ułożenia rekordów w tabeli SQL - (ALTER TABLE ____ ORDER BY ___) opcja może przyspeszyć działanie zapytania |
bez SQL_CALC_FOUND_ROWS | zanaczenie tej opcji spoowoduje że do zapytania nie będzie dołączone parametr SQL_CALC_FOUND_ROWS który umożliwia wykonania kolejnego zapytania obliczającego ilosć rekordów - opcja może przyspieszyć działanie zapytania |
Zmienne przekazywane do szablonu
Lista rekordów:- $mod.xbase.fields - lista pól w bazie
- $mod.xbase.list - porcja rekordów z bazy
- $mod.xbase.allrows - całkowita liczba znalezionych rekordów
- $mod.xbase.query - zapytanie SQL
- $mod.xbase.error - opis błędu w zapytaniu SQL
- $mod.xbase.basename - nazwa bazy
- $mod.xbase.orderdef - domyślne sortowanie wg pola
- $mod.xbase.descdef - domyślne kolejność sortowania (1 - odwrotne)
- $mod.xbase.order_params - lista parametrów przekazywanych przez URL - dołączane do linków sortujących
- $mod.xbase.next - wartość offsetu dla kolejnej porcji
- $mod.xbase.prev - wartość offsetu dla poprzedniej porcji
- $mod.xbase.pages - liczba stron - porcji
- $mod.xbase.thispage - numer bieżącej strony
- $mod.xbase.offset - przesunięcie
- $mod.xbase.limit - maksymalna liczba pozycji dla porcji
- $mod.xbase.navipages - kod HTML - nawigacja między stronami - porcjami
- $mod.xbase.details - przykład: {$mod.xbase.details.nazwa_pola.value} - wartość pola
Ddatkowe wartości dla ilustracji - $mod.xbase.details.nazwa_pola__width.value = szerokość
- $mod.xbase.details.nazwa_pola__height.value = szerokość
- $mod.xbase.details.nazwa_pola__type.value = szerokość
- $mod.xbase.details.nazwa_pola__attr.value = szerokość
- $mod.xbase.rquery - zapytanie SQL
- $mod.xbase.error - opis błędu w zapytaniu SQL
- $mod.xbase.basename - nazwa bazy
- $mod.xbase.fields - lista pól w bazie
- $mod.xbase.user - dane właściciela rekordu
Przeglądarka bazy na stronie
- W opcji Administracja -> Ustawienia modułów klikamy na guzik "Dodaj nowy moduł"
Pierwszą zakładkę formularza wypełniamy tak:
nazwa zmiennej może być inne - w tym przykładzie używamy zmiennej moja_baza - oznacza to że wyniki działania modułu będą przekazane do szablonu w tablicy $mod.moja_baza - Klikamy na "Zapisz zmiany" - panel przeładuje się i otworzy się okno "Dodatkowe opcje"
Wybieramy bazę oraz dla uproszczenia w tym przykładzie - zaznaczamy znacznik "pokazuj ze wszystkich kategorii" - oznacza to że zawartość baza będzie pokazana bez względu na przyporządkowanie kategorii.
Zapisujemy zmiany - W opcji "Menu" klikamy na guzik "Dodaj nową pozycję w menu"
w opcji "moduł aktywny w tej kategorii" uaktywniamy nowo utworzony moduł "Moja baza":
W zakłądce dodatkowe opcje ustawiamy szablon:
Klikamy na "utwórz kategorię" - Klikamy na "Zatwierdź zmiany" i zatwierdzamy dodanie nowej kategorii
- W opcji Wygląd -> Szablony -> towrzy nowy szablon
- klikamy na nowo utworzony szablon i wprowadzamy kod szablonu:<table class="data">
<thead>
<tr>
<th>ID</th>
<th>Nazwa</th>
</tr>
</thead>
<tbody>
{foreach key=lp item=item from=$mod.moja_baza.list}
<tr>
<td>{$item.id}</td>
<td>{$item.nazwa}</td>
</tr>
{/foreach}
</tbody>
</table>
{$mod.moja_baza.navipages}
W powyższym szablonie założono że jedno z pól w bazie nosi nazwę: "nazwa" - pod adresem /moja_baza powinna powinna pojawić się strona z wynikiem, np:
Jeśli nie pojawił się żaden rekord z bazy należy sprawdzić:
- status rekordów w bazie
- prawa dostępu dla rekordu
- przypisanie do wersji językowej
- okres publikacji - W powyższym przykładzie nie zostały dołączone nagłówki i menu strony - można je skopiować z pliku "page.tpl" - a powyższy kod wstawić w miejscu wstawiania treści, np plik page.tpl wygląda tak:{include file=header.tpl}
<div id="page">
{include file=left_menu.tpl}
<div id="content" {if $menu[1]|@count > 0}class="menu"{/if}>
{include file=content.tpl}
</div>
</div>
{include file=footer.tpl}
kopiujemy obszary zaznaczone na czerwono, i wstawiamy do naszego szablonu:{include file=header.tpl}
<div id="page">
{include file=left_menu.tpl}
<div id="content" {if $menu[1]|@count > 0}class="menu"{/if}>
<table class="data">
<thead>
<tr>
<th>ID</th>
<th>Nazwa</th>
</tr>
</thead>
<tbody>
{foreach key=lp item=item from=$mod.moja_baza.list}
<tr>
<td>{$item.id}</td>
<td>{$item.nazwa}</td>
</tr>
{/foreach}
</tbody>
</table>
{$mod.moja_baza.navipages}
</div>
</div>
{include file=footer.tpl}
Oczywiście w każdej instalacji kod zaznaczony na czerwono będzie inny.
po zapisaniu strona wynikowa będzie zawierć nagłówki