【问题标题】:SilverStripe Gridfield how to remove buttonsSilverStripe Gridfield 如何删除按钮
【发布时间】:2014-02-27 03:41:38
【问题描述】:

我在这里浏览了 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());
}

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    原因:

    SilverStripe GridField 构建得非常好。
    Basic GridField 几乎没有任何特性。它只是一个包含您想要的数据的普通表。
    所有其他功能均由 GridFieldConfig 管理的所谓“组件”添加。

    当您像以前一样创建 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 中没有正常的标题,但是来自 Andrew Short 的出色的 gridfieldextensions 模块为您带来了一个。 在GitHubPackagist 上获取模块

      $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)

    【讨论】:

    • 这可以帮助您让 Gridfield 在前端工作:addons.silverstripe.org/add-ons/webbuilders-group/…
    • 确实非常有用的链接,如果您想要前端的详细视图等 GridField 功能,它将有很大帮助。但是,它并不能解决 SortableHeader 问题。
    • 感谢您的好评。看起来像 SilverStripe,
    • 感谢您的好评。看起来像 SilverStripe,不喜欢这条线。 '代码' $dataColumns = GridFieldDataColumns()::create();但是,如果我像这样创建 dataColumns,则您的示例有效。 $dataColumns = new GridFieldDataColumns();当我有更多时间时,我将尝试使用选项 4。该 URL 不可访问。我想我不确定您为什么需要访问该页面来对列进行排序。
    • 啊,我的错,应该是GridFieldDataColumns::create(); 而不是GridFieldDataColumns()::create();。在答案中修复它。 GridFieldDataColumns::create();new GridFieldDataColumns(); 类似,不同之处在于它在创建新对象(Injector)的过程中运行了一些 SilverStripe 魔法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    相关资源
    最近更新 更多