Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

fetching news from multiple pagetypes


Go to End


3 Posts   1136 Views

Avatar
kirillis

Community Member, 2 Posts

10 December 2010 at 1:01pm

hi,

I just finished the tutorials and now I´m stuck with my news page. I want to have multiple pages from which the main homepage-news should get the newest articles. at the moment, it only gets the 5 newest articles from the articleHolder and ArticlePage pages. I think, I have to modify the homepage.php, at the moment it looks like this:

<?php
/**
 * Defines the HomePage page type
 */
 
class HomePage extends Page {
   static $db = array(
   );
   static $has_one = array(
   );
   static $icon = "themes/tutorial/images/treeicons/home";
 
}
 
class HomePage_Controller extends Page_Controller {
    function LatestNews($num=5) {
  $news = DataObject::get_one("ArticleHolder");
  return ($news) ? DataObject::get("ArticlePage", "ParentID = $news->ID", "Date DESC", "", $num) : false;
}

}
?>

I was thinking to just add another function but I don´t know if that would work. Also, it always should get the 5 newest from all categories/pages, not from each page.. could someone help me with this?

Avatar
Willr

Forum Moderator, 5523 Posts

10 December 2010 at 9:13pm

Also, it always should get the 5 newest from all categories/pages

Any pages? usually you don't want every single page included (i.e homepages) but if you wanted then you just get the root 'Page' objects.

function LatestNews($num=5) { 
return DataObject::get("Page", "", "Date DESC", "", $num); 
}

That also implies you have added a Date field to your Page.php file.

If you want to join multiple types in 1 LatestNews function then you can use multiple DataObject::get() calls then use merge() and getRange() to ensure you only get 5 (when you merged 5 + 5 = 10)

(http://api.silverstripe.org/2.4/sapphire/model/DataObjectSet.html)

function LatestNews($num=5) { 
$articles = DataObject::get("Article", "", "Date DESC", "", $num); 
$blogs = DataObject::get("BlogEntries", "", "Date DESC", "", $num); 

$articles->merge($blogs);
return $articles->getRange(0, $num)
}

Avatar
kirillis

Community Member, 2 Posts

10 December 2010 at 11:11pm

hi willr,

yes, i wanted to only get news from certain page types, not all pages.

so, to get news from 3 sources i could use this?

function LatestNews($num=5) {
$articles = DataObject::get("Article", "", "Date DESC", "", $num);
$blogs = DataObject::get("BlogEntries", "", "Date DESC", "", $num);
$source3 = DataObject::get("PageTypesource3", "", "Date DESC", "", $num);

$articles->merge($blogs);
$articles->merge($source3);
return $articles->getRange(0, $num)
}

thanks, will try :D