2016-08-06 4 views
2

Как мы получаем связанное сообщение в блоге SilverStripe, которое связано по категориям или тегам?Related Blog Post в SilverStripe

Или есть какое-либо решение, чтобы изменить этот фрагмент код для вызова всех меток (в зависимости от тегов этого сообщения в блоге), а не на (% новости%) ?:

function LatestNews($num = 5) { 
    return DataObject::get("ArticlePage", "Tags LIKE '%news%' ", "Date DESC", "", $num); 
} 

ответ

4

Вот BlogPostExtension добавить RelatedCategoryPosts функция и RelatedTagPosts функция:

class BlogPostExtension extends DataExtension { 

    public function RelatedCategoryPosts() { 
     $relatedPosts = ArrayList::create(); 

     foreach ($this->owner->Categories() as $category) { 
      $relatedPosts->merge($category->BlogPosts()); 
     } 

     $relatedPosts->removeDuplicates(); 
     $relatedPosts->remove($relatedPosts->byID($this->owner->ID)); 

     return $relatedPosts; 
    } 

    public function RelatedTagPosts() { 
     $relatedPosts = ArrayList::create(); 

     foreach ($this->owner->Tags() as $tag) { 
      $relatedPosts->merge($tag->BlogPosts()); 
     } 

     $relatedPosts->removeDuplicates(); 
     $relatedPosts->remove($relatedPosts->byID($this->owner->ID)); 

     return $relatedPosts; 
    } 
} 

для включения этого добавить расширение к нашему config.yml

BlogPost: 
    extensions: 
    - BlogPostExtension 

Сейчас в нашем пользовательском BlogPost шаблоне мы можем назвать эти функции, чтобы получить соответствующие сообщения:

<% if $RelatedCategoryPosts %> 
    <h2>Related posts</h2> 
    <ul> 
     <% loop $RelatedCategoryPosts %> 
      <li><a href="$Link">$Title</a></li> 
     <% end_loop %> 
    <ul> 
<% end_if %> 
Смежные вопросы