2010-07-22 7 views
10

Słyszałem o ludziach używających ślimaków do generowania czystych adresów URL. Nie mam pojęcia, jak to działa. Obecnie mam miejsce CodeIgniter, który generuje url jak tenUżywanie wtyczek w sygnaturze kodowej

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

z tego co rozumiem przez utrzymaniu wyrównanych ślimak jest możliwe, aby osiągnąć jak adresy URL

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

Jak to zrobić? Zwłaszcza w odniesieniu do codeigniter?

Odpowiedz

42

Właśnie przechowywania ślimaki w moim tabeli bazy danych, w kolumnie o nazwie slug, a następnie znaleźć post ze ślimaka, tak:

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

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

Również łatwo wyprowadzić ślimak z tytułu postu, wystarczy użyć url_title() z pomocnika URL:

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

trochę premia: możesz wdrożyć unikalny ograniczenie klucza do kolumny slug, który gwarantuje, że każdy post ma unikatową ślimak więc nie jest niejednoznaczne, które po CodeIgniter sho czego szukacie. Oczywiście prawdopodobnie powinieneś nadawać swoim postom unikalne tytuły w pierwszej kolejności, ale umieszczenie go na miejscu wymusza regułę i zapobiega zepsuciu się aplikacji.

+2

to jest właśnie sposób Zrobiłbym to, ale jestem trochę zaniepokojony wydajnością z tego typu adresami URL. Załóżmy, że masz URL taki jak w Stackoverflow:/questions/{integer}/{slug}, nie jest to trochę bardziej efektywne niż/questions/{slug}, ponieważ przy pierwszym typie URL możesz po prostu użyć klucz podstawowy w bazie danych dla szybszego wyszukiwania. Przy innym adresie URL musiałbyś dokonać porównania łańcuchów, co jest zdecydowanie wolniejsze. – EsTeGe

+0

@EtTeGe: Zgadza się. Jeśli wydajność jest problemem, będziesz musiał trzymać się za pomocą szybkich indeksów/kluczy do wysyłania zapytań. Jeśli jednak nie jest to krytyczne lub masz jakieś rozsądne buforowanie w celu zmniejszenia obciążenia bazy danych, możesz zamiast tego użyć wtyczek. – BoltClock

+0

Och, nie myślałem o wbudowanej funkcji buforowania codeigniter. Jest to oparte na adresie URL, więc nie musisz martwić się o jedno pytanie. – EsTeGe

0

do mojego ES przyjaciół, usunąć znaki akcentowane za pomocą tego, z Helper Tekst:

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