$this->app->cc_setListener("router/defineRoutes", "bMyRouter/bDefineRoutes");
function bDefineRoutes(iBroadcastEvent $e)
{
# Existujúce cesty (routy) sú zadefinované v $e->getRefData();
$routes = &$e->getRefData();
# Môja nová routa
$routes["my_route1"] = array(
# CoolName
"coolName" => "cesta1",
# callback - funkcia, ktorá sa zavolá, keď zavoláme vygenerovanú cestu
"callback" => array(&$this, "myRouteCallback"),
# arguments - parametre
"arguments" => array(
# "1" - verzia parametrov
"1" => array(
"meno",
"vek",
),
),
);
}
function myRouteCallback($settings = array(), $argumentsVersion = NULL)
{
echo "Callback, argumentsVersion=$argumentsVersion\n";
var_export($settings);
}
Použitie v reálnom kóde:
$router = $this->app->initCoreModule("router");
echo $router->getRoute("my_route1", array(
"meno" => "Jozef",
"vek" => 24,
));
Použitie v Smarty šablóne:
{getRoute routeIdf="my_route1" meno="Jozef" vek=24}
Výstup v obidvoch prípadoch bude:
http://studio2.local/r/cesta1/1/Jozef/24
Po zavolaní tejto URL adresy dostaneme v prehliadači výsledok:
Callback, argumentsVersion=1
array (
'meno' => 'Jozef',
'vek' => '24',
)
-----
==== coolName ====
Parameter ''coolName'' určuje, čo bude zobrazené vo výslednej URI adrese.
Môže byť ''string'' alebo ''array''.
Ak bude ''array'', potom môže obsahovať informáciu o kóde jazyka, pre ktorý je dané coolName určené.
$routes["my_route1"] = array(
"coolName" => "cesta1",
# ...
Skript bude reagovať na URL adresu
\\ ''http://studio2.local/r/cesta1/1/Jozef/24''
-----
$routes["my_route1"] = array(
"coolName" => array(
"cesta1",
"moja-cesta1",
"my-path1",
),
# ...
Skript bude reagovať na URL adresy:
\\ ''http://studio2.local/r/cesta1/1/Jozef/24''
\\ ''http://studio2.local/r/moja-cesta1/1/Jozef/24''
\\ ''http://studio2.local/r/my-path1/1/Jozef/24''
-----
$routes["my_route1"] = array(
"coolName" => array(
"cesta1" => "sk",
"moja-cesta1" => "sk",
"my-path1" => "en",
),
# ...
Skript bude reagovať na adresy ako v predchádzajúcom prípade.
\\ Pri generovaní cesty pomocou ''getRoute()'' máme možnosť zvoliť, ktorý **coolName** sa použije na základe parametra ''langId''.
Ak nebude parameter ''langId'' nastavený, SystemOmega sa bude snažiť použiť jazyk podľa aktuálne prihláseného užívateľa.
Príklad, v ktorom budeme preferovať anglický jazyk:
$router = $this->app->initCoreModule("router");
echo $router->getRoute("my_route1", array(
"meno" => "Jozef",
"vek" => 24,
),
array(
"langId" => "en",
));
{getRoute routeIdf="my_route1" routeLangId="en" meno="Jozef" vek=24}
Výstup v obidvoch prípadoch bude:
http://studio2.local/r/my-path1/1/Jozef/24
-----
==== arguments====
Parameter ''arguments'' určuje, aké parametre sa zakódujú do výslednej URL adresy.
Musí byť ''array'', ktorý bude obsahovať ďalší ''array''.
Prvý ''array'' musí obsahovať číselný kľúč, ktorý určuje verziu parametrov.
Verzia parametrov je nástroj, pomocou ktorého zaručujeme spätnú kompatibilita.
Ak dnes používame verziu parametrov **1**, ktorá obsahuje 2 parametre a o pol roka zavedieme verziu **2** s 3 parametrami, musíme zaručiť, aby odkazy vygenerované vo verzii **1** boli stále platné a funkčné.
$routes["my_route1"] = array(
"arguments" => array(
"1" => array(
"meno",
"vek",
),
),
# ...
$router = $this->app->initCoreModule("router");
echo $router->getRoute("my_route1", array(
"meno" => "Jozef",
"vek" => 24,
));
Výsledok:
http://studio2.local/r/cesta1/2/Jozef/24
-----
Funkcia ''getRoute'' použije najvyššiu verziu parametrov.
$routes["my_route1"] = array(
"arguments" => array(
"1" => array(
"meno",
"vek",
),
"2" => array(
"meno",
"vek",
"vyska",
),
),
# ...
$router = $this->app->initCoreModule("router");
echo $router->getRoute("my_route1", array(
"meno" => "Jozef",
"vek" => 24,
"vyska" => 180,
));
Výsledok:
http://studio2.local/r/cesta1/2/Jozef/24/180
-----
Ak by sme nezadali parameter ''vyska'', aj tak by sa vygenerovala verzia **2** (násl. príklad).
$router = $this->app->initCoreModule("router");
echo $router->getRoute("my_route1", array(
"meno" => "Jozef",
"vek" => 24,
));
Výsledok:
http://studio2.local/r/cesta1/2/Jozef/24/
-----
===== getRoute =====
/**
*
* @param string $routeIdf
* Identifikátor routy
*
* @param array $arguments
* Parametre do routy
*
* @param array $settings
* @param string $settings["coolName"]=NULL
* @param string $settings["langId"]=NULL
* @param string $settings["separator"]="&"
* @param string $settings["anchor"]=NULL
* @param string $settings["disableCoolUri"]=FALSE
*
* @return string
*/
function getRoute($routeIdf, $routeArguments = array(), $settings = array());