Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php5] Wychodząc na przeciw friendly url
Forum PHP.pl > Forum > PHP > Object-oriented programming
wwwhisky
Witam serdecznie wszystkich,

Na tym forum jestem nowy, wiec w razie w prosze o wyrozumialosc winksmiley.jpg

Przechodzac do meritum... . Zaprojektowalem klase(prototyp), ktora ma byc alternatywnym rozwiazaniem do friendly url i mod_rewrite.
Moje pytanie, jak Wy to widzicie od storny praktycznej? moze ktos juz stosowal podobne rozwiazania?
Mile widziane wszelkie uwagi i porady winksmiley.jpg

Htaccess
CODE

DirectoryIndex page page.php

<Files page> 
ForceType application/x-httpd-php 
Options +MultiViews 
</Files>


Klasa PageUrl:
CODE

<?php
class PageUrl{
 /**
  * Instancja klasy
  */
 private $instance = null;
 
 /**
  * Nazwa subdomeny
  *
  * Jesli nie ma subdomeny to 0
  * 
  * @var string
  */
 static public $subDomain = false;
 
 /**
  * Nazwa aktualnej podstrony
  *
  * @var string
  */
 static public $page = null;
 
 /**
  * Lista parametry z urla
  *
  * @var array
  */
 static public $allParamArray = array();
 
 /**
  * Liczba parametrow w url
  *
  * @var integer
  */
 static public $countAllParam = null;
 
 function __construct()
 {
  $this->instance = true;
  
  // Ustawianie subdomeny
  self::$subDomain = explode(\".\", $_SERVER[\'HTTP_HOST\']); 
  if(count(self::$subDomain) >= 3)
  {
  self::$subDomain = self::$subDomain[0];
  }
  else
  {
  self::$subDomain = false;
  }

  // Ustawianie listy parametrow z urla 
  self::$allParamArray = explode( \'/\', substr( $_SERVER[\'PATH_INFO\'], 1) );
  // Jesli ostani parametr jest pusty usun go
  if(end(self::$allParamArray) == \'\')
  {
  array_pop(self::$allParamArray);
  }
  // Zliczanie parametrow
  self::$countAllParam = count(self::$allParamArray);

  foreach (self::$allParamArray as $key => $value)
  {
  if(!Validator::GETValid($value))
  {
  self::$allParamArray[$key] = \'NotValid\';
  }
  }
  
  // Ustawianie nazwy podstorny
  self::$page = self::$allParamArray[0];
 }

 /**
  * Pobiera pojedynczy parametr
  *
  * @param string $number
  * @return Array
  */
 static public function GetParamValue($number)
 {
  return self::$allParamArray[$number];
 }
 
 /**
  * Pobiera pary parametor Name => Value
  *
  * @param string $which
  * @return array
  * @return false
  */
 static public function GetParamNameValue($which = null)
 {
  if(empty($which))
  {
  for($i = 0; $i <= self::$countAllParam-1; $i++)
  {
  if($i == 0)
  {
  $ParamNameAsValueArray[\'page\'] = self::$allParamArray[$i];
  }
  else
  {
  if(!empty(self::$allParamArray[$i]) && !empty(self::$allParamArray[$i+1]))
  {
  $ParamNameAsValueArray[self::$allParamArray[$i]] = self::$allParamArray[$i+1]; $i++;
  }
  }
  }
  return $ParamNameAsValueArray;
  }
  else
  {
  for($i = 1; $i <= self::$countAllParam; $i+=2)
  {
  if(self::$allParamArray[$i] == $which && !empty(self::$allParamArray[$i+1]))
  {
  $ParamValue = self::$allParamArray[$i+1];
  }
  }
  if(!empty($ParamValue))
  {
  return $ParamValue;
  }
  else
  {
  print \'Nie istnieje wartosc dla parametru \'.$which;
  return false;
  }
  }
 }
 
 /**
  * Tworzenie linkow
  *
  * @param string $pagename
  * @param string/array $parameters
  * @return string
  */
 static public function CreateUrl($pagename, $parameters = null)
 {
  $url .= \'/oop/page/\'.$pagename.\'/\';
  if(is_array($parameters))
  {
  foreach ($parameters as $key => $value)
  {
  if(!empty($key) && !empty($value))
  {
  $url .= $key.\'/\'.$value.\'/\';
  }
  }
  }
  else
  {
  print \'Link zdupiony\';
  // Dopisac dla stringa
  }
  return $url;
 }
}
?>



I przykladowe wykorzystanie:

CODE


<?php

new PageUrl();
print \"Tablica wszystkich parametrow:<br>\";
print_r(PageUrl::$allParamArray);

print \"<br>Tablica wszystkich parametrow uporzadkowanych key => value<br>\";
print_r(PageUrl::GetParamNameValue());

print \"<br>Aktualna strona:<br>\";
print PageUrl::$page;

print \"<br>Pobieranie Value dla podanego Key:<br>\";
print(PageUrl::GetParamNameValue(\'jakisparametr\'));

print \"<br>Pobranie drugiego elementu z tablicy parametrow:<br>\";
print_r(PageUrl::GetParamValue(1));

print \"<br>Tworzenie linka:<br>\";
$tab = array(\'Pokaz\' => \'Najnowsze\', \'Od\' => \'10\', \'Do\' => \'20\');
print PageUrl::CreateUrl(\'Artyklu\', $tab);

?>
c3zi
Nic nowego smile.gif Każdy framework oferuje routing..

np. http://3paste.com/s/68r
wwwhisky
Cytat(c3zi @ 27.02.2009, 20:14:21 ) *
Nic nowego smile.gif Każdy framework oferuje routing..

np. http://3paste.com/s/68r

Zdaje sobie sprawe, ze nie odkrylem Ameryki na nowo winksmiley.jpg
Jednak pisze to rozwizanie z glowy, nie wzorujac sie na framewrok'ach itd. Dlatego pytam doswiadczonych w tego typu rozwiazaniach.
c3zi
Ok, tak tylko wkleiłem żebyś popatrzył jak inni to robią [;
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.