Jump to:

1851 Posts in 1606 Topics by 561 members

Blog Module

SilverStripe Forums » Blog Module » How to return multiple related tags?

Discuss the Blog Module.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 879 Views
  • prawnstar
    Community Member
    116 Posts

    How to return multiple related tags? Link to this post

    Unlike the tag could widget which creates links based on a single tag, I'm trying to return entries based on all/each tags of a post.

    If I use a function like this, I only get entries that match the entire tag string.

    function GetTags(){
       return DataObject::get('BlogEntry',"Tags = '$this->Tags'",'','','');

    What I want to return is all entries that share each of {$this->Tags}.

    So if my entry is tagged (Chicken, BBQ, Summer) I want to return not just entries tagged 'Chicken, BBQ, Summer', but all entries tagged with Chicken and/or BBQ and/or Summer.

    I assume my syntax Tags = {$this->Tags} is the issue. I probably need to bust apart $this->Tags into individual tags and return those, but I do not know the SQL syntax to say 'where one tag is x and one tag is y and one tag is z...'

    Any guidance is greatly appreciated.


  • prawnstar
    Community Member
    116 Posts

    Re: How to return multiple related tags? Link to this post

    This is as close as I can get. I'm using $relatedLink = "Tags ='000'"; to start off the SQL since my foreach() is returning "OR Tags LIKE..."

    "000" should return nothing. I can't believe that's a great way to do this, but I can live with it.

    The only thing I can't figure out is how to remove the current entry page from the results.

    class ExtendedEntry_Controller extends BlogEntry_Controller {
    function GetAllRelTags(){
       $theseTags = "$this->Tags";
       $eachTag = explode(',',$theseTags);
       $relatedLink = "Tags ='000'";
       foreach($eachTag as $relatedTag) {
          $relatedLink.= " OR Tags LIKE '%".$relatedTag."%' ";
       return DataObject::get('BlogEntry',$relatedLink,'','','');

Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.