Mod tego forum na
swoim blogu opisał jak odczytywać ładne linki. Wydaje mi się że na początek ci to wystarczy. Oczywiście można przez .htaccess'a go robić ale moim skromnym zdaniem mija się to z celem.
Ewentualnie popatrz na system routingu w innych projektach jak symfony2 (maja dobry aczkolwiek ciężki system routingu).
Jeżeli natomiast chodzi o tworzenie ładnych url w kodzie to sposobów jest wiele i różnie ludzie to robią. Ja na początku projektu zawsze ustalam ładne linki i je bezpośrednio w kodzie sobie wpisuje. Jednak jeżeli chcesz mieć dynamiczne to niestety nie obędzie się bez jakieś klasy która to zrobi.
Prosty przykład oparty o klasy. Poniżej przedstawiam tylko sposób generowania linków abyś mógł to użyć w swojej aplikacji to już musisz dostosować
<?php
namespace YourFrog\NiceUrl\Interfaces;
/**
* Interfejs opisujacy API linków
* @author Paweł Stelmasiak <YourFrog>
*/
{
/**
* Obowiazkowa metoda obsługujaca generowanie linków
* @return string
*/
public function create
(array $arr); }
namespace YourFrog\NiceUrl;
use \YourFrog\NiceUrl\Interfaces\
Link as I_Link
;
/**
* Klasa obsługujaca linki w aplikacji
* @author Paweł Stelmasiak <YourFrog>
*/
class Link implements I_Link
{
/**
* Tworzenie linków
* @return string
*/
public function create
(array $arr) {
foreach($arr as $key => $value)
$url[] = $key . '-' . $value;
}
}
namespace YourFrog\NiceUrl;
/**
* Klasa odpowiedzialna za zwrócenie odpowiedniej klasy do obsługi linków
* @author Paweł Stelamsiak <YourFrog>
*/
class Factory
{
/**
* Instancja klasy obsługujacej linki
* @var ILink
*/
/**
* Zwraca klasę obsługujaca linki
* @return ILink
*/
static public function factory
() {
if( self::$_instance === null )
self::$_instance = new Link();
return self::$_instance;
}
}
namespace YourFrog\Menu;
/**
* Klasa reprezentujaca menu
* @author Paweł Stelmasiak <YourFrog>
*/
class Element
{
/**
* Identyfikator strony
* @var integer
*/
protected $pageID;
/**
* Nazwa elementu
* @var string
*/
protected $name;
/**
* Konstruktor
*/
public function __construct($pageID, $name)
{
$this->pageID = $pageID;
$this->name = $name;
}
/**
* Zwraca nazwę podstrony
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Sprawdza czy podany identyfikator zgadza sie z tym w menu
* @return boolean
*/
public function isPage($pageID)
{
return ($this->pageID === $pageID);
}
/**
* Zwraca link do menu
* @return string
*/
public function getLink()
{
return \YourFrog\NiceUrl\Factory
::factory()->create(array('page' => $this->pageID, 'title' => $this->getTitle())); }
/**
* Zwraca tytul strony potrzebny do url'a
*/
protected function getTitle()
{
array(' ', 'ę', 'ś', 'ć'), //Reszte liter sam sobie dopisz array('_', 'e', 's', 'c'), $str
);
}
}
//Gdzieś w pliku menu.php
$pageID = (isset($_GET['page_id']) ?
$_GET['page_id'] : 1
);
new \YourFrog\Menu\Element(1, 'HOME'),
new \YourFrog\Menu\Element(2, 'O mnie')
);
$html = '';
foreach($menu as $val)
{
$html .= '<li class="' . ($val->isPage($pageID) ? 'active' : 'no-active') . '">
<a href="' . $val->getLink() . '" >' . $val->getName() . '</a>
</li>';
}