• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

SilverStripe Gridfield如何删除按钮

php 来源:user3358590 4次浏览

我一直在经历这里的网格类文档; http://doc.silverstripe.org/framework/en/reference/grid-fieldSilverStripe Gridfield如何删除按钮

这里是有问题的代码。虽然它显示了一个网格字段,但它在每个列上都添加了一个按钮。我如何编辑此代码以不显示按钮?这些按钮是指向不存在的页面的链接。 链接到呈现的页面; 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()); 
} 

===========解决方案如下:

原因:

的SilverStripe GridField是很好建成。
Basic GridField几乎没有任何功能。它只是一个包含所需数据的普通表。
所有其他功能都由GridFieldConfig管理的所谓“组件”添加。

当您像创建GridField一样创建GridField时,无需指定配置,它将为您创建一个配置(GridFieldConfig_Base)。

GridFieldConfig_Base只是一个正常的GridFieldConfig与一些组件已经添加。
已为您添加的这些组件之一称为GridFieldSortableHeader,它允许您按字段对表格进行排序(这就是生成您看到的那些按钮的原因)。
按钮链接死的原因可能是因为存在一些路由问题(GridField尚未在FrontEnd中进行过良好测试),或者您可能忘记将动作AllPages添加到$allowed_actions


解决方案:

  1. 平原表
    如果你并不真的需要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()); 
    } 
    
  2. 只删除可排序头

    $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader'); 
    // if you don't have a SortableHeader, you probably also don't want a filter 
    $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader'); 
    
  3. 用纯文本标题行更换可排序头

    不幸的是,在SilverStripe没有正常的头在这个时候,但是从大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()); 
    
  4. 修复可排序头
    如果你想拥有排序功能,你将不得不解决的路由。
    自从我上次在前端使用GridField以来已经有一段时间了。我只能告诉你,它在某个时候确实有用。

    1. 也许路由不起作用,因为你的表单操作(AllPages)并不像URL访问,如果是这样的话,它很容易解决:只需添加AllPages到您的控制器$allowed_actions
    2. 如果表单可以访问,那么它可能是一个GridField中的错误,我需要调试它来告诉你更多。如果是这样,请通过评论回复或联系我IRC,我会看看它。

更新:我刚才已经回答另一个前端GridField问题,就多一点深入。也许这对你也有帮助:https://stackoverflow.com/a/22433159/1119263(见选项2)


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)