Jump to:

794 Posts in 409 Topics by 304 members


SilverStripe Forums » Widgets » Form Widget doesn't work on Blog Pages

Discuss SilverStripe Widgets.

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

Page: 1
Go to End
Author Topic: 1329 Views
  • socks
    Community Member
    190 Posts

    Form Widget doesn't work on Blog Pages Link to this post

    I made some custom widgets. All is well except that my Form Widget doesn't work on Blog pages (it does work on all other pages).

    popCurrent called on ModelAsController controller, but it wasn't at the top of the stack
    POST /websitename/blog/widget/24/FormWidget

    Widget Form Code

    class FormWidget_Controller extends Widget_Controller {

       function FormWidget() {
          return new Form(
             new FieldSet(
                new EmailField('EmailFormWidget')
             new FieldSet(
                new FormAction('doFormWidget', 'Submit')
             new RequiredFields('EmailFormWidget')

    function doFormWidget($data, $form) {

          //Set data
          $from = $data['EmailFormWidget'];
          $to = 'example@example.com';
          $subject = "this is the subject";
          $body = '<h1>Email Signup List</h1><p><b>Email Address</b> - '.$data['EmailFormWidget'].'</p>';
          $email = new Email($from, $to, $subject, $body);
          Director::redirect(Director::get_current_page()->Link() . "?success=1");
       // Allows us to show different content in template "if Success"
       public function SuccessFormWidget() {
          return isset($_REQUEST['success']) && $_REQUEST['success'] == "1";

    Thank you

  • Matze0681
    Community Member
    25 Posts

    Re: Form Widget doesn't work on Blog Pages Link to this post

    I have the same issue. I know it is an old post, but did you find a solution for this?

    Thanks in advance

  • Bambii7
    Community Member
    254 Posts

    Re: Form Widget doesn't work on Blog Pages Link to this post

    I know this is old but recently built a blog search widget in SS 2.4, which turned into a real nightmare. So if anyone else has to work with an old ss install heres what I did. With some search specific code removed, it was ripped & modified code from MySQLDatabase->searchEngine()

    • Create a custom widget which returns a from from a custom controller
    • Create custom controller which has a form function and a results view or action
    • Create a form with its action set to the custom controller
    • Pretty print, pipe the nice url to the custom controller to avoid controller names appearing in the url

    class BlogSearchWidget extends Widget {
       static $cmsTitle = "Blog Search";
       static $description = "Limits search results to Blog pages only.";
       public function Title() {
          return "Search Blog";
       public function SearchForm() {
    // return the from from a custom controller
          $formController = new BlogSearch_Controller();
          return $formController->search();


    class BlogSearch_Controller extends ContentController {

       static $allowed_actions = array(

       public function index() {
    // render search results
       function search() {
          return new BlogSearchForm($this, 'blogsearch');


    class BlogSearchForm extends Form {

    function __construct($controller, $name) {
          $fields = new FieldSet(
             new TextField('query', 'Search')

          $actions = new FieldSet(
             new FormAction('submit', '>> Start Search ')
          parent::__construct($controller, $name, $fields, $actions);

    function forTemplate() {
          return $this->renderWith(array(

    Director::addRules(50, array(
       'blogsearch' => 'BlogSearch_Controller'

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.