PHP code example of silverstripe-terraformers / gridfield-rich-filter-header
1. Go to this page and download the library: Download silverstripe-terraformers/gridfield-rich-filter-header library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
silverstripe-terraformers / gridfield-rich-filter-header example snippets
'GridField_column_name' => [
'title' => 'DB_column_name',
'filter' => 'search_filter_type',
],
'Expires.Nice' => [
'title' => 'Expires',
'filter' => 'ExactMatchFilter',
],
'GridField_column_name' => 'DB_column_name',
'GridField_column_name',
$gridFieldConfig->removeComponentsByType(
GridFieldSortableHeader::class,
GridFieldFilterHeader::class,
);
$sort = new RichSortableHeader();
$filter = new RichFilterHeader();
$filter
->setFilterConfig([
'getFancyTitle' => 'Title',
'Expires.Nice' => [
'title' => 'Expires',
'filter' => 'ExactMatchFilter',
],
]);
$gridFieldConfig->addComponent($sort, GridFieldPaginator::class);
$gridFieldConfig->addComponent($filter, GridFieldPaginator::class);
->setFilterFields([
'Expires' => DateField::create('', ''),
])
->setFilterMethods([
'Title' => function (DataList $list, $name, $value) {
// my custom filter logic is implemented here
return $filteredList;
},
])
->setFilterMethods([
'Title' => RichFilterHeader::FILTER_ALL_KEYWORDS,
])
$gridFieldConfig->removeComponentsByType(
GridFieldSortableHeader::class,
GridFieldFilterHeader::class,
);
$sort = new RichSortableHeader();
$filter = new RichFilterHeader();
$filter
->setFilterConfig([
'Label',
'DisplayDateEnd.Nice' => [
'title' => 'DisplayDateEnd',
'filter' => 'StartsWithFilter',
],
])
->setFilterFields([
'Label' => $dealsLookup = AutoCompleteField::create('', ''),
'DisplayDateEnd' => DateField::create('', ''),
])
->setFilterMethods([
'Label' => RichFilterHeader::FILTER_ALL_KEYWORDS,
]);
$dealsLookup
->setSourceClass(SystemDeal::class)
->setSourceFields(['Label'])
->setDisplayField('Label')
->setLabelField('Label')
->setStoredField('Label')
->setSourceSort('Label ASC')
->setRequireSelection(false);
$gridFieldConfig->addComponent($sort, GridFieldPaginator::class);
$gridFieldConfig->addComponent($filter, GridFieldPaginator::class);
$gridFieldConfig->removeComponentsByType(
GridFieldSortableHeader::class,
GridFieldFilterHeader::class,
);
$sort = new RichSortableHeader();
$filter = new RichFilterHeader();
$filter
->setFilterConfig([
'Label' => 'TaxonomyTerms',
])
->setFilterFields([
'TaxonomyTerms' => DropdownField::create(
'',
'',
TaxonomyTerm::get()->sort('Name', 'ASC')->map('ID', 'Name')
),
])
->setFilterMethods([
'TaxonomyTerms' => RichFilterHeader::FILTER_MANY_MANY_RELATION,
]);
$gridFieldConfig->addComponent($sort, GridFieldPaginator::class);
$gridFieldConfig->addComponent($filter, GridFieldPaginator::class);
$gridFieldConfig->removeComponentsByType(
GridFieldSortableHeader::class,
GridFieldFilterHeader::class,
);
$sort = new RichSortableHeader();
$filter = new RichFilterHeader();
$filter
->setFilterConfig([
'Label',
])
->setFilterFields([
'Label' => $label = TextField::create('', ''),
])
->setFilterMethods([
'Label' => function (DataList $list, $name, $value) {
return $list->filterAny([
'Label:PartialMatch' => $value,
'TitleLineOne:PartialMatch' => $value,
'TitleLineTwo:PartialMatch' => $value,
]);
},
]);
$label->setAttribute('placeholder', 'Filter by three different columns');
$gridFieldConfig->addComponent($sort, GridFieldPaginator::class);
$gridFieldConfig->addComponent($filter, GridFieldPaginator::class);
namespace App\Models;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\HasManyList;
/**
* @property string $Title
* @method HasManyList|Player[] Players()
*/
class Team extends DataObject
{
/**
* @var string
*/
private static $table_name = 'Team';
/**
* @var array
*/
private static $db = [
'Title' => 'Varchar',
];
/**
* @var array
*/
private static $has_many = [
'Players' => Player::class,
];
}
namespace App\Models;
use SilverStripe\ORM\DataObject;
/**
* @property string $Title
* @property int $TeamID
* @method Team Team()
*/
class Player extends DataObject
{
/**
* @var string
*/
private static $table_name = 'Player';
/**
* @var array
*/
private static $db = [
'Title' => 'Varchar',
];
/**
* @var array
*/
private static $has_one = [
'Team' => Team::class,
];
/**
* @var array
*/
private static $summary_fields = [
'Title',
'Team.Title' => 'Team',
];
}
namespace App\Admin;
use App\Models\Player;
use App\Models\Team;
use SilverStripe\Admin\ModelAdmin;
use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldFilterHeader;
use SilverStripe\Forms\GridField\GridFieldPaginator;
use Terraformers\RichFilterHeader\Form\GridField\RichFilterHeader;
class PlayersAdmin extends ModelAdmin
{
/**
* @var array
*/
private static $managed_models = [
Player::class => ['title' => 'Players'],
];
/**
* @var string
*/
private static $menu_title = 'Players';
/**
* @var string
*/
private static $url_segment = 'players';
/**
* @param mixed|null $id
* @param FieldList|null $fields
* @return Form
*/
public function getEditForm($id = null, $fields = null): Form
{
$form = parent::getEditForm($id, $fields);
/** @var GridField $gridField */
$gridField = $form->Fields()->fieldByName('App-Models-Player');
if ($gridField) {
// Default sort order
$config = $gridField->getConfig();
// custom filters
$config->removeComponentsByType(
GridFieldSortableHeader::class,
GridFieldFilterHeader::class,
);
$sort = new RichSortableHeader();
$filter = new RichFilterHeader();
$filter
->setFilterConfig([
'Title',
'Team.Title' => [
'title' => 'TeamID',
'filter' => 'ExactMatchFilter',
],
])
->setFilterFields([
'TeamID' => $team = DropdownField::create(
'',
'',
Team::get()->sort('Title', 'ASC')->map('ID', 'Title')
),
]);
$team->setEmptyString('-- select --');
$config->addComponent($sort, GridFieldPaginator::class);
$config->addComponent($filter, GridFieldPaginator::class);
}
return $form;
}
}