2011-08-10 2 views
1

을 사용하여 친화적 인 URL을 내가 CakePHP의를 사용하여 간단한 포트폴리오를 구축하고 같은 URL이 있습니다 domain.com/portfolio/82/This_is_an_itemCakePHP의 : 인플없이 ID

는 내가 뭘 원하는 URL에서 ID를 제거입니다. 어떻게하면 좋을까요? 여기

뷰에 대한 내 컨트롤러 코드 :

function view ($id, $slug) 
{ 
    $post = $this->Portfolio->read(null, $id)); 

    $this->set(compact('post')); 
} 

여기 링크 생성기입니다 :

<?php echo $this->Html->link($post['Portfolio']['title'], 
     array('admin' => false, 'controller' => 'portfolio', 'action' => 'view', $post['Portfolio']['id'], Inflector::slug($post['Portfolio']['title'])), 
     array('title' => $post['Portfolio']['title'])); ?> 

내가 어떤 종류의 작업을 수행 할 수 제어 방식을 변경해야 같은데요 제목을 찾으세요?

도움을 주시면 감사하겠습니다. 감사합니다

답변

1

ID를 완전히 제거 할 수 있지만 슬러그가 고유해야합니다 (inUnique 유효성 검사 규칙을 지정하는 옵션이 있음).

$this->data['Portfolio']['slug'] = Inflector::slug($this->data['Portfolio']['title'])

function view ($slug){ 
    $post = $this->Portfolio->find('first', array('conditions'=>array('Portfolio.slug'=>$slug)))); 
    $this->set(compact('post')); 
} 
: 포스트를 저장하면, '제목'필드에 Inflector::slug()을 사용 (당신은 당신이 그대로 제목을 유지하려는 경우에는 '슬러그'필드에 저장 할 수 있습니다

과 링크 :

<?php echo $this->Html->link($post['Portfolio']['title'], 
    array('admin' => false, 'controller' => 'portfolio', 'action' => 'view', $post['Portfolio']['slug']), 
    array('title' => $post['Portfolio']['title'])); 
+0

좋아 보인다. 그래도 내가 어떻게 슬러그를 구할 수 있는지 보여 주실 수 있겠습니까? 이 작업을 제대로 수행하기 위해 데이터베이스에 제목 필드와 슬러그 필드가 생깁니 까? 환호 – Cameron

+0

나는 대답을 편집했다. 그리고 두 번째 질문에 그렇습니다. 왜냐하면 당신은 그것을 장구 한 후에 타이틀을 되 찾을 수 없기 때문입니다. –

2

나는 슬러그를 제목과 함께 데이터베이스에 저장합니다. 그렇게하면 단 한 번만 만들어야합니다. 또한 슬러그에서 타이틀까지 고유 한 링크를 얻을 수도 그렇지 않을 수도 있으므로 시도하지 않는 것이 가장 좋습니다.

간편한 처리를 위해 Sluggable 동작을 사용할 수 있습니다 (https://gist.github.com/338096 또는 Google 참조).

업데이트

당신이 https://gist.github.com/338096에서 sluggable 동작을 사용하는 경우, 당신은 단지 몇 가지 단계를 수행해야합니다 (응용 프로그램/모델/행동에 sluggable.php로 저장) : 프로필에서

을 모델 클래스 추가하려면 설정을 무시하려면 var $actsAs = array('Sluggable'); 또는

var $actsAs = array(
    'Sluggable' => array(
     'fields' => 'title', 
     'scope' => false, 
     'conditions' => false, 
     'slugfield' => 'slug', 
     'separator' => '-', 
     'overwrite' => false, 
     'length' => 256, 
     'lower' => true 
    ) 
); 

데이터베이스에서 profiles 테이블에 slug 열을 추가하십시오.

프로필을 저장하면 슬러그 필드에 자동으로 채우기가 추가되므로 특별한 조치를 취할 필요가 없습니다.

+0

어떻게 등 슬러그를 만들 것 제목, DB에 저장 한 다음 URL로 사용 하시겠습니까? 코드 예제는 최고 일 것입니다 :) Thanks – Cameron

+0

더 많은 정보와 일부 코드를 사용하여 답변을 업데이트했습니다. – Arjan

+0

굴절 된 제목을 '슬러그'라는 새 열에 저장 한 다음 URL로 사용할 수 있습니까? 그렇다면, 어수선한 행동을 사용하지 않고 어떻게 이것을 할 수 있습니까? – Cameron