2010-10-04 5 views
1

L'utilisation de Quora m'a fait me demander comment ils font leur limace comme: quora.com/topics-slugs, quora.com/questions-slug ou quora.com/usernames-slug.comment faire url limace comme Quora utilise Yii cadre?

En fait, je suis en train de développer une application avec le framework yii et je veux avoir des limaces comme Quora?

Merci les gars

Répondre

1
  1. manipuler tous les caractères spéciaux que vous utilisez voulez (trémas par exemple)
  2. Retirez tous les non-alphanumériques-caractères qui sont laissés
  3. espaces blancs poignée

Quelque chose comme ça par exemple:

function _getSlugFromName($name){ 
    return preg_replace('#[\s]+#','-',preg_replace('#[^\d\w -]*#','',str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),html_entity_decode(mb_strtolower(trim($name),'UTF-8'),ENT_COMPAT,'UTF-8')))); 
} 
+0

Merci, mais peut-être que je n'ai pas expliqué ce que je veux dire très bien. ce que je voulais dire est dans quora.com vous verrez toute la page y compris (sujet, question et nom d'utilisateur) a slug après le domaine et il n'y a aucun paramètre en face du slug pour appeler le contrôleur et des exemples d'action pour le sujet http: // www.quora.com/StackOverflow et pour la question http: //www.quora.com/Pourquoi-ne-Quora-implémenter-un-système-de-réputation-a-la-StackOverflow alors comment se passe la requête? – tayler

2

Vous pouvez également le faire avec des règles de réécriture. Une règle comme ceci dans votre fichier de configuration:

'controller/<slug:[\w\-]+>'=>'controller/view', 

prendra une URL comme ceci:

controller/my-slug 

et il redirigera sur le ActionView() dans votre contrôleur, et passer la limace ("mon -slug ") en tant que variable $ _GET. Avec cette règle de réécriture vous appelez maintenant $ _GET ['slug'] et il retournera "my-slug" de l'url. J'ai une ligne "slug" comme clé primaire, alors je demande juste la DB pour $ _GET ['slug'] dans mon actionView() et j'obtiens l'enregistrement correct basé sur l'URL. Fonctionne comme un charme. Bonne chance! Pour supprimer le préfixe du contrôleur en plus de l'utilisation d'un slug, vous aurez probablement besoin d'une grande table pour garder une trace de tous les slugs (pour éviter les doublons). Si vous avez cela, alors vous pouvez faire plusieurs choses différentes:

1 Remplacez onBeginRequest pour faire une recherche sur la table des limes principales pour savoir quel contrôleur appeler. 2. Utilisez une réécriture principale pour un seul ActionIndex dans SiteController et, dans cette action, recherchez le slug dans la table principale pour savoir vers quel contrôleur/action envoyer l'utilisateur. La règle de réécriture ressemblerait à quelque chose comme ceci:

'<slug:[\w\-]+>'=>'site/index', 
+0

Merci pour votre aide, mais peut-être que je n'ai pas expliqué ce que je veux dire très bien. ce que je voulais dire est dans quora.com vous verrez toute la page y compris (sujet, question et nom d'utilisateur) a slug après le domaine et il n'y a aucun paramètre en face du slug pour appeler le contrôleur et des exemples d'action pour le sujet http: // www.quora.com/StackOverflow et pour la question http://www.quora.com/Why-doesnt-Quora-implement-a-reputation-system-a-la-StackOverflow ainsi comment la demande procède-t-elle? – tayler

+0

J'ai essayé d'ajouter un peu plus d'infos pour vous orienter dans la bonne direction. Bonne chance! – thaddeusmt

1

Cela peut vous aider: dburlmanager

Fournit des règles d'URL à base de bases de données dynamiques. Règles d'URL dynamiques basées sur la base de données (jolies permaliens ou URL conviviales)

Ces règles dynamiques sont comme Wordpress '' jolies permaliens '' ou '' URL conviviales ''. Vous n'avez pas besoin d'avoir le nom (ou l'ID) du contrôleur sur l'URL: cette extension peut gérer l'URI de la requête et l'acheminer vers le contrôleur correct.

Questions connexes