Jump to:

791 Posts in 369 Topics by 303 members

Widgets

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: 1123 Views
  • socks
    Avatar
    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).

    Error:
    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(
             $this,
             'FormWidget',
             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);
          $email->send();
          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
    Avatar
    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
    Matze

  • Bambii7
    Avatar
    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(
          'search',
       );

       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 ')
          );
          
          $this->setFormMethod('get');
          $this->disableSecurityToken();
          $this->setFormAction('blogsearch');
          parent::__construct($controller, $name, $fields, $actions);
          
       }

    function forTemplate() {
          return $this->renderWith(array(
                   $this->class,
                   'Form'
          ));
       }
       
    }

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

    1123 Views
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.