【问题标题】:Silverstripe. Modifying gridfieldconfig in modeladmin to add sortable headers银条。在 modeladmin 中修改 gridfieldconfig 以添加可排序的标题
【发布时间】:2012-11-15 03:18:31
【问题描述】:

我正在使用 modeladmin 来显示一些事件数据对象。

我在汇总字段中添加了一些列,客户希望能够按照这些列进行排序。目前,默认情况下只有标题是可排序的。是否可以在 modeladmin 中修改 gridfieldconfig?特别是向GridFieldSortableHeader中添加字段?

这是我的 Event 数据对象,其中包含我需要能够在 modeladmin 中排序的汇总字段:

......
static $summary_fields = array('Title', 'DescriptionSummary', 'EventStartDate', 'EventEndDate', 'EventVenue');

static $field_labels = array('DescriptionSummary' => 'Description', 'EventStartDate' => 'Start Date', 'EventEndDate' => 'End Date', 'EventVenue' => 'Venue');

private $widget;
//TO GET THE SUMMARY FIELD VALUES
public function getEventVenue(){
    if ($eventVenue = $this->Venue()->Title) return $eventVenue;
    return "No Venue specified";
}

public function getEventStartDate(){
    if ($startDate = DataObject::get_one('CalendarDateTime', 'EventID = '.$this->ID)) return $startDate->StartDate;
    return "No start dates specified";
}

public function getEventEndDate(){
    if ($startDate = DataObject::get_one('CalendarDateTime', 'EventID = '.$this->ID)) return $startDate->EndDate;
    return "No end dates specified";
}
....

和我的活动管理员:

class EventAdmin extends ModelAdmin {

    public static $managed_models = array('CalendarEvent', 'Venue', 'EventCategory');
    static $url_segment = 'events';
    static $menu_title = 'Events';

}

【问题讨论】:

  • 我现在没有时间正确回答这个问题,但要为您指明正确的方向,您需要覆盖 EventAdmin 类中的 getEditForm() 函数。跨度>
  • 太棒了。谢谢你。这让我得到了我需要访问的东西。我尝试了 new GridFieldSortableHeader('DescriptionSummary') 认为这将允许我通过单击标题对描述列进行 alpha 排序,但它只是创建了一个标题行,其中只有 Title 可以再次排序。有任何想法吗?谢谢

标签: silverstripe


【解决方案1】:

我刚刚向 doc.silverstripe.org 添加了一些关于如何覆盖编辑表单和访问其中的 GridField 的信息 (link)。相关位(适用于您的用例):

class EventAdmin extends ModelAdmin {
  // ...

  public function getEditForm($id = null, $fields = null) {
    $form = parent::getEditForm($id, $fields);
    $gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass));
    $gridField->getConfig()->getComponentByType('GridFieldSortableHeader')
      ->setFieldSorting(array(...));
    return $form;
  }

}


如果您尝试按CalendarDate 关系和EventStartDate 字段排序,您通常必须覆盖ModelAdmin 中的结果列表,请参阅docs。 虽然您可以在此处添加必要的连接 (DataQuery->leftJoin),但这是不可能的 在查询中选择其他列。所以这只会让你排序 EventStartDate 默认情况下,但不会通过 UI 重新排序 GridField。 它是一个缺失的功能,我们应该真正支持开箱即用的DataList->sort() 中的“点符号”。

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2023-03-11
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多