我一直在浏览gridfield类文档; http://doc.silverstripe.org/framework/en/reference/grid-field
以下是相关代码。虽然它确实显示了一个网格字段,但它在每列上添加了一个按钮。如何编辑此代码以不显示按钮?按钮是指向不存在的页面的链接。 链接到渲染页面; 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());
}
答案 0 :(得分:7)
原因:
SilverStripe GridField构建得非常好 Basic GridField几乎没有任何功能。它只是一个包含您想要的数据的普通表 所有其他功能都由所谓的“组件”添加,这些组件由GridFieldConfig管理。
当您创建GridField时,如果没有指定配置,它将为您创建一个配置(GridFieldConfig_Base
)。
班级GridFieldConfig_Base
只是一个普通的GridFieldConfig
,其中已添加了一些组件
已经为您添加的其中一个组件称为GridFieldSortableHeader
,它允许您按字段对表格进行排序(这是产生您看到的那些按钮的原因)。
按钮链接死亡的原因可能是因为存在一些路由问题(GridField尚未在FrontEnd中经过良好测试)或者您可能忘记将操作AllPages
添加到$allowed_actions
。
<强>解决方案:强>
普通表
如果你真的不需要GridField的任何功能,而你只想要一个普通表,最简单的方法就是设置一个空配置:
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());
}
只删除可排序标题
$gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader');
// if you don't have a SortableHeader, you probably also don't want a filter
$gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader');
将可排序标题替换为仅文本标题行
不幸的是,目前SilverStripe中没有正常的标题,但是Andrew Short的伟大gridfieldextensions模块为您带来了一个。 在GitHub或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());
修复可排序标题
如果您希望具有排序功能,则必须修复路由
自从我上次在前端使用GridField以来已经有一段时间了。我只能告诉你它在某个时候确实有效。
AllPages
)无法作为网址访问,如果是这种情况,则很容易修复:只需将AllPages
添加到您的$allowed_actions
您的控制器。 更新:我刚刚回答了另一个前端GridField问题,并且深入了解了一下。也许这对你也有帮助:https://stackoverflow.com/a/22433159/1119263(见选项2)