witam
Korzystam z gotowej klasy do generowania ładnych url. Chciałbym ją rozbudować o moduł przekierowujący na inna podstronę. I tu własnie mam problem z rozbudową funkcji Decode.
Chciałbym żeby jeden link przekierowywał mnie na strone a.php , a drugi na stronkę b.php. Niestety oba linki przekierowuje na stronke a.php. Pomimo wielu prób przebudowy funkcji decode nic mi z tego nie wyszło. Więc tu prośba o pomoc w dodaniu kolejnego modułu.
Mam takie oto linki.
//linki do podstron
echo '<a href="'.str_replace(' ', '-', $nurl->Url('module=news&action=show&name='.$og['nazwa'].'&id='.$og['id'].'')).'">'.$og['nazwa'].'</a>';//1 link
echo '<a href="'.str_replace(' ', '-', $nurl->Url('module=news2&action=show2&name='.$og['nazwa'].'&id='.$og['id'].'&id_k='.$og['id_k'].'')).'">'.$og['nazwa'].'</a>';//2 link
a tutaj kontroler przekierowujący do modułów:
function controller(){
$module = isset($_GET['module']) ? $_GET['module'] : '';
switch ($module){
case 'news':
if ($_GET['action'] == 'show'){// do 1 linka
include ('og/a.php');
}
break;
case 'news2':
if ($_GET['action'] == 'show2'){//do 2 linka
include ('po/b.php');
}
break;
case '':
include('pie.php');
break;
}
}
i wreszcie sama klasa, która zreszta powinna być na początku:)
w public function Url($path = null) dodałem
if ($params['module'] == 'news2' && $params['action2'] == 'show2'){ //moduł news akcja show zamienimy na link .html
return $this->baseUrl.$params['name'].','.$params['id'].','.$params['id_kategoria'].'.html';
}
dzięki czemu generuje mi inny link z id_k
Cała klasa:
class NUrl {
private $baseUrl;
public function __construct($baseUrl = ''){
$this->baseUrl = $baseUrl;
}
/**
* Dekoduje adres na zmienne GET
*/
public function Decode(){
$_pi = '';
//w zależności od serwera nasza scieżka może się znajdować pod innym indeksem
if (!empty($_GET['pathinfo']))
$_pi = $_GET['pathinfo'];
if (empty($_pi) && !empty($_SERVER['ORIG_PATH_INFO']))
$_pi = $_SERVER['ORIG_PATH_INFO'];
$pathInfo = trim($_pi, '/'); //usuwamy znak / z końca
if (empty($pathInfo)) { //pusta ścieżka
return true;
}
$arr = explode('/',$pathInfo); //rozbijamy naszą ścieżkę na podstawie /
$count = count($arr);
if ($count == 1 && substr($pathInfo, -5) == '.html'){//mamy moduł news. pathinfo jest więc postaci nazwa-newsa,id.html
$_GET['module'] = 'news';
$_GET['action'] = 'show';
//pobieramy nazwę oraz id czyli pobieramy nazwa-newsa,id
$nname = substr($pathInfo,0, strlen($pathInfo)-5);
//dzielimy na nazwę i id
$na = explode(',', $nname);
$_GET['name'] = $na[0];
$_GET['id'] = $na[1];
return true;
}
//pierwsze dwa elementy to moduł i akcja
$_GET['module'] = $arr[0];
$_GET['action'] = isset($arr[1]) ? $arr[1] : ''; //tu małe zabezpieczenie, gdyby ktoś zapomniał podać akcji
//następne elementy to nazwy parametru i parametr i tak co dwa
for ($i=2; $i < $count;$i+=2){
$_n = $arr[$i]; //nazwa parametru
$_v = isset($arr[$i+1]) ? $arr[$i+1] : ''; //wartość parametru
$_GET[$_n] = $_v;
}
return true;
}
/**
*
* Ścieżka w postaci module=moduł&action=akcja&par1=war1&par2=war2....
* @param string $path
*/
public function Url($path = null){
if (empty($path)) //pusta ścieżka
$pars = array();
else
$pars = explode('&', $path);
$params = array();
foreach ($pars as $_param){
$_arP = explode('=',$_param,2); //par=war dzielimy na par i war
$params[$_arP[0]] = isset($_arP[1]) ? $_arP[1] : '';
}
$strRet = '';
if (!empty($params)){
if ($params['module'] == 'news' && $params['action'] == 'show'){ //moduł news akcja show zamienimy na link .html
return $this->baseUrl.$params['name'].','.$params['id'].'.html';
}
if ($params['module'] == 'news2' && $params['action2'] == 'show2'){ //moduł news akcja show zamienimy na link .html
return $this->baseUrl.$params['name'].','.$params['id'].','.$params['id_kategoria'].'.html';
}
else { //każdy inny moduł leci standardowo modul/akcja/parametr/wartosc
foreach ($params as $_key => $_val){
if ($_key == 'module' || $_key == 'action')
$_key = '';
else
$_key.='/';
$strRet.="$_key$_val/";
}
}
}
return $this->baseUrl.htmlspecialchars($strRet);
}
}
chodzi mi o to co trzeba zmianić lub dodać w public function Decode() żeby linki przekierowywały na różne podstrony .
Tzn klikne w link aaa,1.html przekierowuje mnie na a.php
klikne link aaa,2,3.html przekierowuje mnie na b.php