Loading...

Router

Router pozwala nam przypisać do danej ścieżki wywołanej przez użytkownika zachowanie systemu. Na pdostawie ścieżki system wie na jaki kontroller ma skierować ruch a także przy pomocy klasy router.class.php znajdującej się w core pozwala nam na wykonywanie przekieorwań do innych kontrollerów po nazwie routingu.

Struktura pliku router.ini

Każdy plugin ma własny plik "nasz_plugin/config/router.ini" który wygląda następująco:
 
[/image/#ekey/#width/#height/]
name=image
controller=imageController

[/image/#ekey/#width/#height/#transform/]
name=imageTransform
controller=imageController

Dana ścieżka definiowana jest w postaci 3 wierszy.
  1. W pierwszym w nawiasach kwadratowych definiujemy adres który znajdzie się po naszym katalogu głównym systemu, czyli jeżeli nasz system jest pod adresem "www.adres.pl/windu/" to pierwszy routing definiuje ścieżkę "www.adres.pl/windu/image/urtydhe/100/200/". Znaczek kratki # mówi nam, że w tym miejscu będzie parametr ulegający zmianie, czyli zmienna (odpowiednik zmiennej $_GET) natomiast jeżeli wpiszemy zwykły wyraz nie poprzedzony # wtedy system będzie szukał dokładnie takiego wyrazu, na tej podstawie możemy zdefiniować konkrety routing.
  2. W 2 wierszu mamy nazwę routingu która posłużyć może do wywołania danego adresu przy pomocy routera w naszym kontrolerze.
  3. Na końcu defiuniujemy nazwę kontrolera na który ma być kierowany ruch z danej ścieżki.

Zmienna #action

W naszym routerze możemy jeszcze zastosować jedną zmienną specjalną #action
 
[/admin/install/]
name=admin-install
controller=adminInstallController

[/admin/install/#action/]
name=admin-install-action
controller=adminInstallController

[/admin/install/#action/#id/]
name=admin-install-action-id
controller=adminInstallController 

Zmienna #action jest pobierana przez nasz router i odnosi się do metody wewnątrz kontrolera na który kierowany jest ruch. Jeżeli nie okrelimy zmiennej #action to system wywoła domyślną metode index() natomiast jeżeli ustawimy zmienną #action na 'moja_funkcja' to system wywoła metode 'moja_funkcja' z kontrolera.

Nadpisywanie ścieżek

Routery z poszczególnych pluginów są sklejane w jeden a system wyszukuje ścieżki od tyłu tak że ostatni w kolejności plugin w configu może nadpisać daną ściezkę. Jeżeli plugin "front" ma zdefiniowanąścieżkę [/] (czyli proste wpisanie adresu strony bez żadnych zmiennych) to my dodając na końcu w pliku "app/includes/config.php" w stałej plugins nasz plugin i w jego pliku router.ini dodamy zmienną [/] możemy nadpisać zachowanie systemu. W takim wypadku nie plugin front a właśnie nasz plugin będzie kierował zachowaniem systemu w tej ścieżce. Dodając pluginy należy zwarać na to uwagę!

Korzystanie z klasy router do przekierowań

W systemie mamy dostępną klasę router.class.php która posiada liczne funkcje pozwalające na dokonywanie przekieorwań lub zwracanie ścieżek z routingu. Przykłady wykrozsytania routera
 


route($target, $variables = array(), $anchor = null)

Generuje link przekierowania na określony routing i zwraca ścieżkę
  • $target - jest nazwą danego routingu podawaną jako parametr name w router.ini
  • $variables - jest tablicą z parametrami, czyli zmeinnymi jakie powinny być przypisane do ścieżki
  • $anchor - to co ma być na końcu ścieżki po znaku #
Przykład zastosowania dla
[/admin/install/#action/#id/]
name=admin-install-action-id
controller=adminInstallController
route('admin-install-action-id',array('action'=>'actionName','id'=>10))


redirect($target, array $query = array(), $permanent = false, $anchor = null)

Przekierowywuje (robi tak zwany redirect) na określoną na podstawie routingu ścieżkę
  • $target - jest nazwą danego routingu podawaną jako parametr name w router.ini
  • $query - jest tablicą z parametrami, czyli zmeinnymi jakie powinny być przypisane do ścieżki
  • $permanent - ustawia przekierowanie 301
  • $anchor - to co ma być na końcu ścieżki po znaku #
redirect('admin-install-action-id',array('action'=>'actionName','id'=>10),true)


back($request,$anchor = 'mp=admin.message.success')

Wraca na ścieżke z jakiej nastąpiło wywołanie w poprzednim kroku
  • $request - zmienna $this->request otrzymana z poziomu kontrolera
  • $anchor - to co ma być na końcu ścieżki po redirecie w formie zmiennej get lub anchora
back($this->request,'mp=admin.message.success')


reload($message = 'admin.message.success',$messageType = 'mp',$force = false)

Przeładowywuje aktualną stronę
  • $message - zmienna komunikatu pobieranoego z kluczy językowych
  • $messageType - typ wiadomości, mp - pozytywna, mn - negatywna
reload('admin.message.success','mp')

Nieustannie pracujemy nad rozwojem Windu CMS!

Zaglądając na stronę windu dowiesz się o nowościach i planach związanych z CMS’em

2022-12-05 Windu 4.1 - aktualizacja

Właśnie zaktualizowaliśmy Windu do wersji 4.1: Wsparcie dla PHP 8.0 i 8.1 Poprawienie edytora kodu Poprawienie mechanizmy generowania pól dodatkowych Dodanie...

2021-01-27 Windu 4.0 - nowa aktualizacja

Po 6 latach przerwy postanowiliśmy przygotować i dodać nową wersje naszego systemu CMS. Windu 4.0 dostępne do pobierania oraz aktualizowania, wprowadziliśmy w nim między...

2014-05-28 Windu 3.1 - lista zmian

Windu 3.1 dostępne do pobierania oraz aktualizowania, wprwadziliśmy w nim między innymi:   Aktualizacja modułu forum, dokończenie i poprawienie obecnego w wersji 3.1...

Kup licencję PRO!

Już teraz aktywuj mnóstwo dodatków w twoim Windu!

Kup licencję PRO