Question

I have been going through the gridfield class documentation here; http://doc.silverstripe.org/framework/en/reference/grid-field

Here is the code in question. While it does display a grid-field it adds a button on each columns. How would I edit this code to not display the buttons? The buttons are links to a non-existent page. Link to rendered page; http://www.silverstripe.org/assets/Uploads/Capture28.JPG

public function AllPages() {
$gridField = new GridField('pages', 'All pages', SiteTree::get()); 
$dataColumns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns');
$dataColumns->setDisplayFields(array(
    'Title' => 'Title',
    'URLSegment'=> 'URL',
    'LastEdited' => 'Changed'
));
return new Form($this, "AllPages", new FieldList($gridField), new FieldList());
}
Was it helpful?

Solution

The cause:

The SilverStripe GridField is pretty well built.
The Basic GridField has pretty much no features at all. Its just a plain table containing the data you want.
All other functionality is added by so called "Components" which are managed by the GridFieldConfig.

When you create a GridField like you did, without specifying a config, it will Create a config for you (GridFieldConfig_Base).

The class GridFieldConfig_Base is just a normal GridFieldConfig with some components already added.
One of those components that is already added for you is called the GridFieldSortableHeader which allows you to press on fields to sort the table (which is what produces those buttons that you see).
The reason the Links of the Buttons are dead is probably because there is some routing problem (The GridField is not that well tested in FrontEnd yet) or you maybe have forgotten to add the action AllPages to $allowed_actions.


Solutions:

  1. Plain table
    if you don't really need any feature of GridField, and you just want a plain table, the easiest way is to just set an empty config:

    public function AllPages() {
        $config = GridFieldConfig::create(); 
        $dataColumns = GridFieldDataColumns::create();
        $dataColumns->setDisplayFields(array(
            'Title' => 'Title',
            'URLSegment'=> 'URL',
            'LastEdited' => 'Changed'
        ));
        $config->addComponent($dataColumns);
        $gridField = GridField::create('pages', 'All pages', SiteTree::get(), $config); 
        return Form::create($this, __FUNCTION__, FieldList::create($gridField), FieldList::create());
     }
    
  2. Remove just the Sortable Header

    $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader');
    // if you don't have a SortableHeader, you probably also don't want a filter
    $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader');
    
  3. Replace the Sortable Header with a text only header row

    Unfortunately, there is no normal header in SilverStripe at this time, but the great gridfieldextensions module from Andrew Short brings you one. Get the module on GitHub or Packagist

    $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader');
    // if you don't have a SortableHeader, you probably also don't want a filter
    $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader');
    $gridField->getConfig()->addComponent(new GridFieldTitleHeader());
    
  4. fix the Sortable Header
    if you wish to have the sort functionality, you will have to fix the routing.
    It has been a while since I last used the GridField in frontend. I can only tell you that it did work at some time.

    1. perhaps routing does not work because your form action (AllPages) is not accessible as URL, if that's the case, its pretty easy to fix: just add AllPages to your $allowed_actions of your Controller.
    2. if the form is accessible, then its probably a bug in GridField, I would need to debug that to tell you any more. If that is the case, please reply via comment or contact me on IRC and I will take a look at it.

UPDATE: I just answered another frontend GridField question, and went a bit more in depth. perhaps this is also helpful to you: https://stackoverflow.com/a/22433159/1119263 (see Option 2)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top