2010-07-22 11 views
10

Ich habe von Leuten gehört, die Slugs zum Erzeugen sauberer URLs verwenden. Ich habe keine Ahnung, wie es funktioniert. Zur Zeit habe ich eine codeigniter Website, die URLs Verwenden von Nacktschnecken in Codezeichen

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

Von dem, was es ist, ich verstehe möglich durch die Aufrechterhaltung einer Schnecke Feld wie dieses

erzeugt wie

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

Wie dies geschehen ist? Vor allem in Bezug auf Codeigniter?

Antwort

42

Ich speichere nur die Schnecken in meiner Datenbank-Tabelle, in einer Spalte slug, dann fand einen Beitrag mit dem schnecken wie folgt aufgerufen:

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

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

auch leicht einen Butzen aus dem Post-Titel abzuleiten, verwenden nur url_title() der URL-Helfer:

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

ein kleiner Bonus: Sie wünschen können einen eindeutigen Schlüssel Hindernis für die slug Spalte zu implementieren, die, dass jeder Pfosten sorgt für einen einzigartigen slug hat, damit es nicht mehrdeutig ist die Post CodeIgniter sho old suchen. Natürlich sollten Sie Ihren Posts in erster Linie eindeutige Titel geben, aber wenn Sie das setzen, erzwingt die Regel und verhindert, dass Ihre Anwendung versaut.

+2

Das ist genau die Art und Weise Ich würde es tun, aber ich bin etwas besorgt über die Leistung mit dieser Art von URLs. Angenommen, Sie haben eine URL wie die von Stackoverflow:/questions/{integer}/{slug}, ist das nicht ein bisschen effizienter als/questions/{slug}, weil Sie mit der ersten Art von URL einfach verwenden können der Primärschlüssel in der Datenbank für schnellere Suche. Mit der anderen URL müssten Sie einen String-Vergleich durchführen, der definitiv langsamer ist. – EsTeGe

+0

@EsTeGe: Das stimmt. Wenn die Leistung ein Problem darstellt, sollten Sie bei der Abfrage nach schnellen Indizes/Schlüsseln suchen. Wenn es jedoch nicht kritisch ist oder Sie über ein vernünftiges Caching verfügen, um die Datenbank zu entlasten, können Sie stattdessen mit Slugs arbeiten. – BoltClock

+0

Oh, ich dachte nicht über die eingebaute Caching-Fähigkeit von codeigniter nach. Das basiert auf der URL, also ist eine Abfrage weniger wichtig. – EsTeGe

0

Zu meiner ES Freunde, entfernen Sie akzentuierte Zeichen diese Verwendung von Text Helper:

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