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

Query for published pages only


Go to End


4 Posts   3380 Views

Avatar
Bagzli

Community Member, 71 Posts

17 August 2014 at 12:12pm

Edited: 17/08/2014 12:12pm

Hello,

I am trying to create a query that will retrieve results only for pages that have been published. Right now when I run the query below, I will get EVERY page, whether I have hit publish on them or not. This is a problem :)

$filter = $this::get()->filter('Filters:PartialMatch', $this->request->getVar('tag'))->First();

Also, How would I check in .ss page whether the page has been published? For example I want to write code such as this:

<% if published %>
  <p>abc</p>
<% else %>
  <p>efg</p>
<% end_if %>

What would be the keyword I use?

Avatar
Willr

Forum Moderator, 5523 Posts

17 August 2014 at 6:55pm

SilverStripe should handle this for you built in. You don't need to explicitly fetch stage / live. Make sure you're not viewing the site in 'stage' module (try your site.com/?stage=Live and see if pages still show up.

If you explicitly want to get content by stage use Versioned (http://api.silverstripe.org/3.1/class-Versioned.html)

Avatar
Bagzli

Community Member, 71 Posts

18 August 2014 at 12:17pm

Where do I set the site between different stages and what are all the stages available?

Avatar
Kirk

Community Member, 67 Posts

18 August 2014 at 2:35pm

Edited: 18/08/2014 2:41pm

To run a query to get pages via the stage you would need some code like below

// Fetching multiple records
$stageRecords = Versioned::get_by_stage('SiteTree', 'Stage');
$liveRecords = Versioned::get_by_stage('SiteTree', 'Live');

The url below has more info on Versioning

http://doc.silverstripe.com/framework/en/topics/versioning

To get pages that have been published via a template try something like this

function getPublishedPages() {
return Versioned::get_by_stage('SiteTree', 'Live');
}

In the template use something like this

<% loop PublishedPages %> 
<p>$Title</p> 
<% end_loop %>