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.

Template Questions /

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

A way to add a filter to rendered page just before sending to browser


Go to End


2 Posts   2540 Views

Avatar
micschk

Community Member, 22 Posts

13 October 2012 at 3:01am

Edited: 13/10/2012 3:32am

Is there a way to add/hook into an [onbeforeOutputToBrowser] kind of filter in Silverstripe, like the onafter filters for writing to the database?

I'm trying to rewrite all references to youtube.com into youtube-nocookie.com to prevent 3rd party cookies from being set. Most of these are oembeds, which are rendered from the SSViewer (I think), at least after the init() or index() functions are called. So I cannot do a str_replace in there. Maybe I could hook into the SSviewer in some way just before output?

Maybe some way to hook into RequestProcessor->setFilters() ?

[Got this filter idea from WP; see for example http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content ]

Avatar
MarcusDalgren

Community Member, 288 Posts

13 October 2012 at 11:39am

I'm assuming here that you're trying to filter the "same part" of the page that you would be filtering with WordPress the_content filter.

So one way of doing this is simply writing a custom filter function and calling that in your template instead of $Content.
So

function FilteredContent() {
  $content = $this->Content;
  //Do your filtering here...
  return $content;
}

That goes into your page class or whatever other page type you want to do the filtering in.
Then in your template you simply write $FilteredContent instad of $Content and you should be good to go.