2014-05-12 2 views
3

두 모델이 있습니다 : sitesarticles입니다. 각 사이트는 여러 개의 기사를 가질 수 있습니다. 다음과 같은 경로의 기사를보고 싶습니다. /siteName/articleFriendlyTitleUrl. 순간 나는이 같은 친화적 인 URL을 만드는 도우미 방법이 있습니다여러 매개 변수가있는 Iron-router 중첩 경로

getFriendlyUrl = function(urlString){ 
    urlString = urlString.toLowerCase(); 
    urlString = str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-'); 
    return urlString; 
} 

그리고 내 router.js 파일 :

this.route('showArticle', { 
    path: '/article/:title'), 
    layoutTemplate: 'artLayout', 
    data: function(){ 
    viewData = { 
    title: Articles.findOne({title: this.params.title}), 
    site: Sites.findOne({name: this.name}) 
    } 
    return viewData; 
}); 

누구든지 방법이 구현하는 어떤 생각을 가지고? 또한이 경로를 달성하기 위해 노력했습니다.

/:siteName/:articleId 

성공했지만 아무런 제안이 없습니까?

+1

각 기사에서 URL의 일부를 구성 할 수있는 "친숙한 제목"을 저장해야한다고 생각합니다. 그런 다음 라우트 매개 변수에 주어진 이름으로 기사를 찾으십시오. –

답변

5

문서 기사 안에 슬러그를 저장하는 것이 좋습니다. 사용자가 기사를 추가/편집 할 때 Underscore.String.slugify 함수 (https://github.com/epeli/underscore.string)를 사용하여 앱에서 제목에서 슬러그를 생성 할 수 있습니다. 여러 PARAMS와

경로는 유효합니다

this.route('showArticle', { 
    path: '/:siteName/:articleSlug'), 
    ... 
    data: function(){ 

    viewData = { 
     title: Articles.findOne({slug: this.params.articleSlug}).title, 
     site: Sites.findOne({name: this.params.siteName}) 
    } 
    return viewData; 
    } 
}); 
1

마지막으로 나는이 문제를 해결했습니다 나는 (특수 문자 제외) 구문 분석 기사 제목을 포함 Articles 컬렉션 개체에 제안을 따라 friendlyTitle 필드를 추가했습니다 .

그리고 이것은 내 경로입니다 :

this.route('showArticle', { 
    path: '/:site/:friendlyTitle', 
    layoutTemplate: 'artLayout', 
    data: function(){ 
     return Articles.findOne({friendlyTitle: this.params.friendlyTitle}); 
    } 
}); 

:site 필드가 할당이 문서를 가지고 Sites 컬렉션에서 객체의 이름을 포함합니다 (새 문서를 만들 때 나는 특정 사이트에 /에 게시/assing 수 있습니다) .