SS3 DataObject在指定的DataObject之后排序

时间:2016-01-20 21:50:04

标签: silverstripe

好的,所以过去几天这让我发疯了...... 我有一个像这样的DataObject:

private static $db = array(
    // other properties
    'active' => 'Boolean',
    'sort' => 'Int' // ID of another DataObject of this type, after which it is to be displayed.
);
private static $has_one = array('Page' => 'CustomPage');

CustomPage只是扩展了Page,并且与这个DataObject有一个has_many关系 对我来说,现在的痛苦是以他们正确排序的方式获取数据。

编辑:排序值实际上是DataObject的ID,然后对此进行排序。

例如,给出以下内容:

ID    sort
1      0
2      3
3      5
4      1
5      1

结果应按如下顺序排列:

ID
1
4
5
3
2

排序可以重复,因为每当我在中间添加一些东西时,我都不想为每个项目更新而烦恼。

2 个答案:

答案 0 :(得分:2)

设置DataObject的排序顺序的一种方法是设置$default_sort变量:

class CustomDataObject extends DataObject {

    private static $db = array(
        'Active' => 'Boolean',
        'SortOrder' => 'Int'
    );

    private static $has_one = array(
        'Page' => 'CustomPage'
    );

    private static $default_sort = 'SortOrder ASC';
}

确保在执行此操作后调用?flush=all以清除网站缓存。

此外,如果通过DataObject维护自定义GridField,我们可以使用模块通过拖放来控制排序顺序。这是一个StackOverflow答案,详细说明了如何使用以下模块之一: Silverstripe DataObject - drag and drop ordering

答案 1 :(得分:0)

正如3dgoo所说,const char* front = "front"; const char* back = "back"; eyeballs(front); eyeballs(back); void eyeballs(const char* frontOrBack){ if (frontOrBack == "front") { digitalWrite(frontEyes, LOW);}//end if else if (frontOrBack == "back") { digitalWrite(backEyes, LOW);}//end else*/ } 是你的朋友。当您的列$default_sort(或sort)不唯一时,您可以随时添加另一列来对重复项进行排序,例如

SortOrder

应该适用于您的情况。