Jump to:

5537 Posts in 1737 Topics by 1223 members

Customising the CMS

SilverStripe Forums » Customising the CMS » Class TableListField.ss.Form not found

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

Page: 1
Go to End
Author Topic: 1591 Views
  • Searly
    Avatar
    Community Member
    11 Posts

    Class TableListField.ss.Form not found Link to this post

    Hi there,

    I have been wrecking my brains ofr ages now and can't seem to work out what i am doing wrong. I have created a new page type with a custom form and want to show the entries in a new tab in the page within the admin site of silverstripe in order to delete and export entries, using TableListField.

    However i get this error:

    FATAL ERROR: i18n::include_by_class: Class TableListField.ss.Form not found

    Here the code to expose the database fields in a new tab in the CMS:

    function getCMSFields()
       {
          $fields = parent::getCMSFields();
          
          $petitionTable = new TableListField(
             'Petitions',
             'PetitionSubmission',
             array(
                'ID' => 'ID',
                'FirstName' => 'First Name',
                'SirName' => 'Last Name',
                'Email' => 'Email',
                'Street' => 'Street',
                'City' => 'City',
                'Postcode' => 'Postcode',
                'Country' => 'Country',
                'Comment' => 'Comment',
                ),
          null, // sourceFilter
           'ID' // sourceSort
             );
             
             $petitionTable->setShowPagination(true);
             if(isset($_REQUEST['printable'])) {
                $petitionTable->setPageSize(false);
             } else {
                $petitionTable->setPageSize(20);
             }
          
             $petitionTable->setPermissions(array(
                'export',
                'delete',
                'print'
             ));
             
          $fields->addFieldtoTab('Root.Petitions', $petitionTable);
       
          return $fields;
       }   

    And here the code of the entire page type to show how it hangs together. the frontend works fine, that is the form submissions get correctly displayed on the site and also in the database.

    <?php
    /**
    * Defines the PetitionPage page type
    */

    class PetitionPage extends Page
    {
       static $db = array (
          'PetitionSummary' => 'HTMLText'

       );
       
       static $has_one = array (
          
       );
       
       function getCMSFields()
       {
          $fields = parent::getCMSFields();
          
          $petitionTable = new TableListField(
             'Petitions',
             'PetitionSubmission',
             array(
                'ID' => 'ID',
                'FirstName' => 'First Name',
                'SirName' => 'Last Name',
                'Email' => 'Email',
                'Street' => 'Street',
                'City' => 'City',
                'Postcode' => 'Postcode',
                'Country' => 'Country',
                'Comment' => 'Comment',
                ),
          null, // sourceFilter
           'ID' // sourceSort
             );
             
             $petitionTable->setShowPagination(true);
             if(isset($_REQUEST['printable'])) {
                $petitionTable->setPageSize(false);
             } else {
                $petitionTable->setPageSize(20);
             }
          
             $petitionTable->setPermissions(array(
                'export',
                'delete',
                'print'
             ));
             
          $fields->addFieldtoTab('Root.Petitions', $petitionTable);
       
          return $fields;
       }   
       
       static $icon = "mysite/images/icons/petition";
       
    }

    class PetitionPage_Controller extends Page_Controller
    {
       
       
        function PetitionForm()
        {
           
           if(Session::get('PetitionSubmitted'))

          {
       return false;
           }

        // Create fields
    $fields = new FieldSet(
    new TextField('FirstName', 'First Name'),
           new TextField('SirName', 'Last Name'),
           new EmailField('Email', 'E-Mail'),
           new TextField('Street'),
           new TextField('City'),
           new TextField('Postcode'),
    new CountryDropdownField('Country', 'Your Country'),
           new TextareaField('Comment','Comment','8')
    );

    // Create actions
    $actions = new FieldSet(
    new FormAction('SubmitPetition', 'Submit')
    );
       
        // Create validator
        $validator = new RequiredFields('SirName','Email','Postcode','Country');

    return new Form($this, 'PetitionForm', $fields, $actions,$validator);
        }
       
        function SubmitPetition($data, $form) {
       $submission = new PetitionSubmission();
       $form->saveInto($submission);
       $submission->write();
          
          // Make sure only one Petition for each Browser Session
          Session::set('PetitionSubmitted', true);

       
       Director::redirectBack();
        }

          
          
          function PetitionSubmission() {

           if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1) $_GET['start'] = 0;
           $SQL_start = (int)$_GET['start'];

           $doSet = DataObject::get(
             
             $callerClass = "PetitionSubmission",
           $filter = "",
           $sort = "",
           $join = "",
          $limit = "{$SQL_start},2"
             
             );
             
              return $doSet ? $doSet : false;
             
          }      

    }

    ?>

    1591 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.