2010-07-22 25 views
10

Ho sentito parlare di persone che usano le lumache per generare URL puliti. Non ho idea di come funzioni. Attualmente ho un sito CodeIgniter che genera URL come questoUso di slug nel codeigniter

www.site.com/index.php/blog/view/7 

Da quello che ho capito, mantenendo un campo slug è possibile ottenere gli URL come

www.site.com/index.php/blog/view/once-upon-a-time 

Come è questo fatto? Soprattutto in riferimento al codeigniter?

risposta

42

Ho appena memorizzare i proiettili nella mia tabella di database, in una colonna denominata slug, quindi trovare un post con la lumaca, in questo modo:

public function view($slug) 
{ 
    $query = $this->db->get_where('posts', array('slug' => $slug), 1); 

    // Fetch the post row, display the post view, etc... 
} 

Inoltre, per derivare facilmente una lumaca dal titolo del post, basta usare url_title() del helper URL:

// Use dashes to separate words; 
// third param is true to change all letters to lowercase 
$slug = url_title($title, 'dash', true); 

un piccolo bonus: si potrebbe desiderare di implementare un vincolo di chiave unica per la colonna slug, che assicura che ogni post ha una lumaca unica quindi non è ambiguo, che dopo CodeIgniter sho uld cercare. Ovviamente, dovresti probabilmente assegnare ai tuoi post titoli univoci, ma metterlo in atto applica la regola e impedisce che l'applicazione si rovini.

+2

Questo è esattamente il modo in cui Lo farei, ma sono un po 'preoccupato per le prestazioni con questo tipo di URL. Supponiamo che tu abbia un URL come quelli di Stackoverflow:/questions/{intero}/{slug}, non è un po 'più efficiente di/questions/{slug}, perché con il primo tipo di URL, potresti semplicemente usare la chiave primaria nel database per una ricerca più rapida. Con l'altro URL, dovresti fare una comparazione delle stringhe, che è sicuramente più lenta. – EsTeGe

+0

@EsTeGe: Esatto. Se le prestazioni sono un problema, ti consigliamo di utilizzare indici/chiavi veloci per le query. Tuttavia, se non è critico o se hai qualche ragionevole memorizzazione nella cache per alleggerire il carico sul database, puoi usare invece slugs. – BoltClock

+0

Oh, non ho pensato alla funzionalità di caching del codeigniter integrata. Questo è basato sull'URL, quindi c'è una query in meno di cui preoccuparsi. – EsTeGe

0

Ai miei amici ES, rimuovere i caratteri accentati che utilizzano questo, da Helper Testo:

$string = 'áéíóú ÁÉÍÓÚ';  
    $slug = url_title(convert_accented_characters($string), 'dash', true)); 
    echo $slug; //aeiou-AEIOU