2010-06-23 5 views
0

Alors, voici un exemple sur Forrst, un site CodeIgniter:Meilleure méthode pour URI Routage dans CodeIgniter?

http://forrst.com/posts/PHP_Nano_Framework_WIP_Just_throwing_some_ideas_o-mU8

Regardez cette belle URL. Vous avez le site racine, puis posts, puis le titre du poste et un court extrait. C'est plutôt cool pour l'expérience utilisateur.

Cependant, mes URL du site CodeIgniter tout simplement sucent. PAR EXEMPLE.

http://mysite.com/code/view/120

Il accède au contrôleur code, la fonction view, le 20 à l'extrémité est l'ID Post (et il fait les requêtes de base de données sur la base que). J'ai réalisé que je pouvais faire un peu de routage. Donc, dans mon fichier routes.php, j'ai mis ce qui suit dans:

$route['posts/(:num)'] = "code/view/$1"; - donc cela fera http://mysite.com/posts/120 être le même que http://mysite.com/code/view/120. Un peu plus sympa, je pense que vous serez d'accord.

Ma question est - comment puis-je utiliser une technique similaire à Forrst, où un extrait de la publication est ajouté à l'URL? Je ne peux pas vraiment voir comment cela serait possible. Comment le script PHP peut-il déterminer ce qu'il doit rechercher dans la base de données, surtout s'il y a plusieurs choses avec le même titre?

Merci!

Jack

Répondre

2

Pour obtenir une URL comme dans votre exemple, vous devez ajouter une règle de routage, comme vous l'avez déjà fait $route['posts/(:num)'] = "code/view/$1";. L'url de Forrst semble être "mappée" (ou quelque chose comme ça), je pense que la dernière partie de l'uri est l'identifiant (o-mU8 ressemble à un hachage, mais je préfère un identifiant int) qui est stocké dans le db, donc s'il requêtes, il divise les uri par les ndashes (_), et récupère la dernière partie, comme cela dans votre action de contrôleur:

$elements = explode('_',$this-uri-segment(2)); 
$identifier = $elements[count($elements)-1]; 

$results = $this->myModel->myQuery($identifier); 

Fondamentalement, la chaîne entre le contrôleur/et l'identifiant est totalement inutile, mais pas si votre objectif est un meilleur référencement.

J'espère que cette aide

0

Voir la official dicussions. Le terme qui est souvent lié à ceci est "slug". Je n'ai pas testé l'approche des forums CI moi-même, mais les suggestions et les exemples semblent plutôt bons.

0

L'assistant d'URL dans CodeIgniter a un appel de fonction url_title(). Je ne l'ai pas utilisé moi-même mais je pense que c'est ce que vous cherchez.