Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: NiceUrl Nospor-a - problemik
Forum PHP.pl > Forum > Przedszkole
lukaszk
Witam mam problem z "niceurl" produkcji nospor-a .
Lokalnie ( na serwerze lokalnym) działa ok ale jak wrzucam to na serwer to mam problem bo po kliknięciu kontakt następnie praca wygląda to tak
kontakt.htmlpraca.html czyli nic się nie uruchamia
Jestem noga a potrzebne mi niceurl jak można przerobić ten skryt tylko do wyświetlania podstron (bez bajerów)

  1. <?php
  2. /**
  3.  * Przykładowa klasa do obsługi ładnych urli
  4.  *
  5.  * @author Robert (nospor) Nodzewski (email: nospor at gmail dot com)
  6.  **/
  7. class NUrl {
  8.  
  9. /**
  10. *
  11. * Bazowy url
  12. * @var string
  13. */
  14. private $baseUrl;
  15.  
  16. public function __construct($baseUrl = ''){
  17. $this->baseUrl = $baseUrl;
  18. }
  19.  
  20. /**
  21. * Dekoduje adres na zmienne GET
  22. */
  23. public function Decode(){
  24. $_pi = '';
  25. //w zależności od serwera nasza scieżka może się znajdować pod innym indeksem
  26. if (!empty($_SERVER['PATH_INFO']))
  27. $_pi = $_SERVER['PATH_INFO'];
  28. if (empty($_pi) && !empty($_SERVER['ORIG_PATH_INFO']))
  29. $_pi = $_SERVER['ORIG_PATH_INFO'];
  30.  
  31. $pathInfo = trim($_pi, '/'); //usuwamy znak / z końca
  32. if (empty($pathInfo)) { //pusta ścieżka
  33. return true;
  34. }
  35. $arr = explode('/',$pathInfo); //rozbijamy naszą ścieżkę na podstawie /
  36. $count = count($arr);
  37.  
  38. if ($count == 1 && substr($pathInfo, -5) == '.html'){//mamy moduł news. pathinfo jest więc postaci nazwa-newsa,id.html
  39. $_GET['module'] = 'news';
  40. $_GET['action'] = 'show';
  41.  
  42. //pobieramy nazwę oraz id czyli pobieramy nazwa-newsa,id
  43. $nname = substr($pathInfo,0, strlen($pathInfo)-5);
  44. //dzielimy na nazwę i id
  45. $na = explode(',', $nname);
  46. $_GET['name'] = $na[0];
  47. $_GET['id'] = $na[1];
  48. return true;
  49. }
  50.  
  51.  
  52.  
  53. //pierwsze dwa elementy to moduł i akcja
  54. $_GET['module'] = $arr[0];
  55. $_GET['action'] = isset($arr[1]) ? $arr[1] : ''; //tu małe zabezpieczenie, gdyby ktoś zapomniał podać akcji
  56.  
  57. //następne elementy to nazwy parametru i parametr i tak co dwa
  58. for ($i=2; $i < $count;$i+=2){
  59. $_n = $arr[$i]; //nazwa parametru
  60. $_v = isset($arr[$i+1]) ? $arr[$i+1] : ''; //wartość parametru
  61. $_GET[$_n] = $_v;
  62. }
  63. return true;
  64. }
  65.  
  66. /**
  67. *
  68. * Ścieżka w postaci module=moduł&action=akcja&par1=war1&par2=war2....
  69. * @param string $path
  70. */
  71. public function Url($path = null){
  72. if (empty($path)) //pusta ścieżka
  73. $pars = array();
  74. else
  75. $pars = explode('&', $path);
  76. $params = array();
  77. foreach ($pars as $_param){
  78. $_arP = explode('=',$_param,2); //par=war dzielimy na par i war
  79. $params[$_arP[0]] = isset($_arP[1]) ? $_arP[1] : '';
  80. }
  81. $strRet = '';
  82. if (!empty($params)){
  83. if ($params['module'] == 'news' && $params['action'] == 'show'){ //moduł news akcja show zamienimy na link .html
  84. return $this->baseUrl.$params['name'].','.$params['id'].'.html';
  85. } else { //każdy inny moduł leci standardowo modul/akcja/parametr/wartosc
  86. foreach ($params as $_key => $_val){
  87. if ($_key == 'module' || $_key == 'action')
  88. $_key = '';
  89. else
  90. $_key.='/';
  91. $strRet.="$_key$_val/";
  92. }
  93. }
  94. }
  95. return $this->baseUrl.htmlspecialchars($strRet);
  96. }
  97. }
  98.  
  99.  
  100. ?>


w pliku index.php mam coś takiego

  1.  
  2. require_once('NUrl.class.php');
  3. //bazowy url. Może to być np. <a href="http://mojastrona.pl/" target="_blank">http://mojastrona.pl/</a>
  4. //tutaj dla testów będę brał ścieżkę, którą określacie w linku
  5. $baseUrl = $_SERVER['REQUEST_URI'];
  6. if (!empty($_SERVER['PATH_INFO'])) //jeszcze trzeba z tego automatycznego $baseUrl wyciąć path_info. Gdy sami określać będziecie $baseUrl to ta wycinka będzie zbędna
  7. $baseUrl = substr($baseUrl,0, strpos($baseUrl,$_SERVER['PATH_INFO'])).'/';
  8. //i jeszcze wywalę index.php jeśli się nam tu wstawił
  9. if (substr($baseUrl,-9) == 'index.php')
  10. $baseUrl = substr($baseUrl,0,-9);
  11.  
  12. //stworzenie obiektu do generacji linków
  13. $nurl = new NUrl($baseUrl);
  14.  
  15.  
  16. //linki
  17. <li><? echo '<a href="'.$nurl->Url('module=news&action=show&name=kontakt').'">Kontakt</a>'; ?></li>
  18. <li><? echo '<a href="'.$nurl->Url('module=news&action=show&name=praca').'">Praca</a>'; ?></li>
  19. <li><? echo '<a href="'.$nurl->Url('module=news&action=show&name=serwis').'">Serwis</a>'; ?></li>
  20.  
  21. function controller(){
  22. $module = $_GET['module'];
  23. $co=$_GET['name'];
  24. switch ($module){
  25. case 'news':
  26. if ($_GET['action'] == 'show'){
  27. if ($co== 'portfilio'){
  28. include "includes/portfilio.php";
  29. }
  30. if ($co== 'kontakt'){
  31. include "includes/kontakt.php";
  32. }
  33.  
  34. if ($co== 'praca'){
  35. include "includes/praca.php";
  36. }
  37.  
  38. if ($co== 'serwis'){
  39. include "includes/serwis.php";
  40. }
  41. if ($co== 'slayder'){
  42. include "includes/slayder.php";
  43. }
  44. if ($co== 'bannery'){
  45. include "includes/mod_bannery.php";
  46. }
  47. if ($co== 'filmy'){
  48. include "includes/mod_filmy.php";
  49. }
  50. }
  51. break;
  52. default:
  53. include "includes/slayder.php";
  54. }
  55. }
nospor
a co zawiera $baseUrl gdy jesteś w kontakt.html ?
lukaszk
Lokalnie na początku jest nazwa katalogu czyli /test/ po kliknięciu kontakt nic się nie zmienia.
na serwerze jest / a potem po kliknięciu kontakt mamy kontakt.html a po kliknięciu praca mamy /kontakt.htmlpraca.html

Może problem to katalog serwer zerowy a lokalnie jest w podkatalogu?

Skrypt jest bardzo dobry ale nie wiem jak się do niego zabrać.
Zależy mi tylko na wyświetlaniu podstron które przekazują maksymalnie jedną wartość w linku (nazwę podstrony)
nospor
Ustaw ręcznie base url na swoj adres serwerowy, np:
$baseUrl = 'http://mojastrona.pl/';
i już. Wszystki inne wyliczenia $baseUrl wywal
lukaszk
Super jesteś wielki smile.gif działa

Rzuć proszę okiem jak można przerobić klasę aby wysłać tylko jeden parametr i jego wartość a także samo wyświetlanie podstron w swich-u czy dobre założenie obrałem.
Pozdrawiam
nospor
Cytat
Rzuć proszę okiem jak można przerobić klasę aby wysłać tylko jeden parametr i jego wartość
Nie za bardzo rozumiem co masz na myśli
lukaszk
Obecnie wygląda to tak
  1. <li><? echo '<a href="'.$nurl->Url('module=news&action=show&name=serwis').'">Serwis (UK)</a>'; ?></li>


jak odchudzić linki i klasę - module=news, action=show gdyż potrzebuję tylko wyświetlania podstron znajdujących się na serwerze (bez przekazywania wielu niepotrzebnych warunków)

Aby klasa tylko i wyłącznie działała na jeden parametr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.