2010-07-22 2 views
10

깨끗한 URL을 생성하기 위해 슬러그를 사용하는 사람들에 대해 들어 봤습니다. 나는 그것이 어떻게 작동하는지 전혀 모른다. 현재 내가 URL의이 작업이 어떻게codeigniter에서 슬러그 사용하기

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

같은 URL을 달성하는 것이 가능하다 슬러그 필드를 유지하여 내가 이해에서이

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

처럼 생성하는 CodeIgniter의 사이트가? 특히 codeigniter를 참조 할 때?

답변

42

난 그냥 같이, 다음 슬러그와 함께 게시물을 발견, slug라는 칼럼에서, 내 데이터베이스 테이블의 굼벵이를 저장 :

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

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

이 또한 쉽게 게시물 제목에서 슬러그를 유도하기 위해,

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

약간의 보너스 :이 모호하지 그래서 당신이 각 게시물에 고유 한 슬러그을 가지고 있음을 보장 slug 열에 고유 키 제약 조건을 구현하실 수 있습니다 포스트 CodeIgniter의 슈 단지 URL 헬퍼의 url_title()를 사용 uld가 찾는다. 물론, 처음에는 고유 한 제목을 게시해야하지만 그 자리에 을 넣으면이 적용되어 응용 프로그램이 엉망이되는 것을 방지 할 수 있습니다.

+2

정확히 방법입니다 그렇게 하겠지만 이러한 유형의 URL에 대한 실적에 대해서는 조금 걱정됩니다. Stackoverflow :/questions/{integer}/{slug}에있는 URL과 같은 URL이/questions/{slug}보다 약간 효율적이지는 않습니다. 첫 번째 유형의 URL을 사용하면 빠른 검색을 위해 데이터베이스의 기본 키. 다른 URL을 사용하면 문자열 비교를 수행해야하는데 이는 분명히 느립니다. – EsTeGe

+0

@EsTeGe : 그렇습니다. 성능이 중요하다면 쿼리를 위해 빠른 인덱스/키를 사용해야 할 것입니다. 그러나 중요하지 않거나 데이터베이스로드를 줄이기 위해 적절한 캐싱을 사용하는 경우 슬러그 대신 사용할 수 있습니다. – BoltClock

+0

오, 나는 codeigniter의 내장 된 캐싱 기능에 대해 생각하지 않았습니다. 이는 URL을 기반으로하므로 걱정할 쿼리가 하나 줄어 듭니다. – EsTeGe

0

를 텍스트 도우미에서이 사용 악센트 문자를 제거 :

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