2016-08-06 2 views
2

Wie erhalten wir verwandte Blogpost in SilverStripe, die durch Kategorien oder Tags verwandt sind?In Verbindung stehender Blogbeitrag in SilverStripe

Oder gibt es eine Lösung, um diese Schnipsel zu ändern alle Schlüsselpaare nennen (abhängig von Tags von dieser Blog-Post), nicht auf (% Nachrichten%) ?:

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

Antwort

4

Hier ist ein BlogPostExtension hinzufügen eine RelatedCategoryPosts Funktion und eine RelatedTagPosts Funktion:

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; 
    } 
} 

diese fügen wir diese Erweiterung unserer config.yml aktivieren

BlogPost: 
    extensions: 
    - BlogPostExtension 

Jetzt in unsere eigene BlogPost Vorlage können wir diese Funktionen aufrufen, die entsprechenden Beiträge abzurufen:

<% if $RelatedCategoryPosts %> 
    <h2>Related posts</h2> 
    <ul> 
     <% loop $RelatedCategoryPosts %> 
      <li><a href="$Link">$Title</a></li> 
     <% end_loop %> 
    <ul> 
<% end_if %> 
Verwandte Themen