W sumie są dwie części
- Panel admina
- Główny system
Głowny system
-
Inicjalizacja
System rozpoczyna pracę od pliku xv.php, który ładuję smarty oraz bibliotekę XVweb -> biblioteka, która jest przekazywana z klasy do klasy (często poprzez konstruktor), czasami przez zmienną globalną. Klasa ta zawiera połączenie PDO (zmodyfikowana), Sesje, obsługę pluginów.
W tym też pliku są wykonywane podstawowe czynności - uzupełnienie smarty, ustawienie linków, wybieranie języka itp - wszystko co potrzebne, by jakoś móc dalej łatwo programować.
-
Plugin odpowiedzialny za prefix
Na końcu pliku, skrypt sprawdza prefix, np jest strona
http://localhost/test/test2/test3
To skrypt sprawdza, czy któryś plugin nie jest odpowiedzialny za prefix "test". Jeśli znaleziono taki plugin, to zostaje wykonany jego kod i działanie pliku xv.php się kończy. Czyli plugin ma swój namespace :)
-
Modyfikacje klas
Prawie wszystkie klasy są wywoływane przez proxy:
xvp()->your_function($class, $arg0, $arg2);
Co to nam daję? Mogę taką funkcję zmodyfikować - zmodyfikować jej dane wejściowe, dane wyjściowe, lub całość tej funkcji na inną, lub mieć tylko trigger jej wykonania. Dla tego celu napisałem odpowiedni system, który znajduje się tutaj:
https://github.com/bordeux/xv_plugins/blob/master/example.php
- W pliku xv.php oraz w pluginach, są powstawiane funkcję:
xv_trigger("<plugin>.<event_name>");
W pliku konfiguracyjnym plugin można zbindować ten event (tak jak w jquery). Dzięki czemu przed wykonaniem jakieś czynności przez skrypt, można coś innego wykonać (np. zmodyfikować zmienną globalną)
Przykład pliku konfiguracyjnego pluginu:
https://github.com/bordeux/XVweb/blob/master/plugins/xvauctions/xvauctions.xml
Prócz tego plugin ma dostęp do api:
xv_append_js($file, $num = null)
xv_append_footer($text, $num = null)
xv_append_css($file, $num = null)
xv_append_header($string, $num = null)
xv_set_title($title)
xv_trigger($event_name)
xv_lang($var, $var2 =null)
xv_perm($perm) //sprawdzanie uprawnien
xv_append_meta($name, $content)
Panel admina:
- Skrypt przeszukuje w katalogach włączonych pluginów folderu admin, a w nim pliku .php
Jeśli ten plik nazywa się test.php, to zajmuje on namespace dla
localhost/Administration/Test/
W tym pliku musi być zdefiniowana klasa
$xv_admin_class_name = "xv_admin_test";
class xv_admin_test{
var $style = "height: 400px; width: 40%;";
var $title = "Tytuł okienka";
var $URL = "Test/"; //url okienka, pokazywany w pasku
var $content = "test"; //zawartosc okienka
var $id = "testWindow"; //id okienka
public function __construct(&$XVweb){
$this->content = "<div class='success'>hello world</div>";
}
}
Po wejściu na powyższy adres, ukaże się okienko z napisem hello world :)
W środku mamy do dyspozycji XVweb - jak wczesniej wspomnialem - baze danych, sesje itp.
-
Widgety - tutaj przykład 2:
https://github.com/bordeux/XVweb/tree/master/admin/data/widgets
-
Ikony - na razie na sztywno wpisane, w przyszłości dorobię api
System ten przechodził wiele zmian. Wiele moich pomysłów tam wdrażałem, które później stały się "stare", lub głupie, lub też mało wydajne. Dlatego jest bajzel w kodzie. Myślę że przepiszę jeszcze to wszystko przed końcem czerwca ;)