SilverStripe gridfield multi class 编辑器有无效的 sort() 列
SilverStripe gridfield multi class editor has invalid sort() column
我在设置嵌套 has_many 关系的 SortOrder 时遇到问题,其中子项目可以通过 Orderable Rows module of Gridfield Extensions. I am also using the Multi Class Editor
拖放重新排序
我有一个 Page
有很多 ComplexStrips
。这些 ComplexStrip
个对象有很多 'LinkedObjects'.
问题:
当我尝试通过 GridField 添加 ComplexStrip
时出现以下错误:Uncaught InvalidArgumentException: Invalid sort() column
我的设置:
第Class页:
class 在 CMS 中浏览编辑它时工作正常。
<?php
class Page extends SiteTree {
private static $has_many = array(
'ComplexStrips' => 'ComplexStrip'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$dataColumns = new GridFieldDataColumns();
$dataColumns->setDisplayFields(
array(
'Title' => 'Title',
'ClassName' => 'Class Name'
)
);
$multiClassConfig = new GridFieldAddNewMultiClass();
$multiClassConfig->setClasses(
array(
'ComplexStrip'
)
);
$stripsGridField = GridField::create('ComplexStrips', 'Complex strips', $this->Strips(),
GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldDetailForm(),
new GridFieldEditButton(),
new GridFieldDeleteAction('unlinkrelation'),
new GridFieldDeleteAction(),
new GridFieldOrderableRows('SortOrder'), // This line causes the issue
new GridFieldTitleHeader(),
$multiClassConfig,
$dataColumns
)
);
$fields->addFieldsToTab(
'Root.Strips',
array(
$stripsGridField
)
);
return $fields;
}
}
TextBlocksStrip Class:
一旦我尝试通过 Page
上的网格字段添加其中之一,我就会收到错误消息:Uncaught InvalidArgumentException: Invalid sort() column
<?php
class ComplexStrip extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $has_many = array(
'TextBlocks' => 'TextBlock'
);
//-------------------------------------------- CMS Fields
public function getCMSFields() {
$fields = parent::getCMSFields();
//---------------------- Main Tab
$textBlocks = GridField::create('TextBlocks', 'Text blocks', $this->TextBlocks(),
GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldAddNewButton('toolbar-header-right'),
new GridFieldDetailForm(),
new GridFieldDataColumns(),
new GridFieldEditButton(),
new GridFieldDeleteAction('unlinkrelation'),
new GridFieldDeleteAction(),
new GridFieldOrderableRows('SortOrder'),
new GridFieldTitleHeader(),
new GridFieldAddExistingAutocompleter('before', array('Title'))
)
);
$fields->addFieldsToTab('Root.Main',
array(
$textBlocks
)
);
return $fields;
}
}
文本块Class:
<?php
class TextBlock extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $default_sort = 'Sort';
private static $has_one = array(
'TextBlocksStrip' => 'TextBlocksStrip'
);
}
如果我删除行 new GridFieldOrderableRows('SortOrder')
一切正常,但显然不能重新排序。
我正在为这个而烦恼。我不明白为什么这不起作用。
我做了一个相当优雅的解决方法。
无法查询 SortOrder,因为父对象 ComplexStrip
在尝试加入已排序的 table 时不存在。因此,将 GridFieldOrderableRows 包装在 if 中以检查父对象是否已分配 ID。
// Need to wait until parent object is created before trying to set sort order
if($this->ID) {
$textBlocks->addComponents(
new GridFieldOrderableRows('Sort')
);
}
之后,CMS 中的一切都与以前一样。我现在将在模块上打开一个问题,看看是否有更永久的解决方案。
我在使用 $many_many
而不是 $has_many
时遇到了同样的错误。我可以看到您使用了 $has_many,所以不会解决您的问题,但可能会帮助其他人遇到与我相同的错误消息。
我在设置嵌套 has_many 关系的 SortOrder 时遇到问题,其中子项目可以通过 Orderable Rows module of Gridfield Extensions. I am also using the Multi Class Editor
拖放重新排序我有一个 Page
有很多 ComplexStrips
。这些 ComplexStrip
个对象有很多 'LinkedObjects'.
问题:
当我尝试通过 GridField 添加 ComplexStrip
时出现以下错误:Uncaught InvalidArgumentException: Invalid sort() column
我的设置:
第Class页: class 在 CMS 中浏览编辑它时工作正常。
<?php
class Page extends SiteTree {
private static $has_many = array(
'ComplexStrips' => 'ComplexStrip'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$dataColumns = new GridFieldDataColumns();
$dataColumns->setDisplayFields(
array(
'Title' => 'Title',
'ClassName' => 'Class Name'
)
);
$multiClassConfig = new GridFieldAddNewMultiClass();
$multiClassConfig->setClasses(
array(
'ComplexStrip'
)
);
$stripsGridField = GridField::create('ComplexStrips', 'Complex strips', $this->Strips(),
GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldDetailForm(),
new GridFieldEditButton(),
new GridFieldDeleteAction('unlinkrelation'),
new GridFieldDeleteAction(),
new GridFieldOrderableRows('SortOrder'), // This line causes the issue
new GridFieldTitleHeader(),
$multiClassConfig,
$dataColumns
)
);
$fields->addFieldsToTab(
'Root.Strips',
array(
$stripsGridField
)
);
return $fields;
}
}
TextBlocksStrip Class:
一旦我尝试通过 Page
上的网格字段添加其中之一,我就会收到错误消息:Uncaught InvalidArgumentException: Invalid sort() column
<?php
class ComplexStrip extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $has_many = array(
'TextBlocks' => 'TextBlock'
);
//-------------------------------------------- CMS Fields
public function getCMSFields() {
$fields = parent::getCMSFields();
//---------------------- Main Tab
$textBlocks = GridField::create('TextBlocks', 'Text blocks', $this->TextBlocks(),
GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldAddNewButton('toolbar-header-right'),
new GridFieldDetailForm(),
new GridFieldDataColumns(),
new GridFieldEditButton(),
new GridFieldDeleteAction('unlinkrelation'),
new GridFieldDeleteAction(),
new GridFieldOrderableRows('SortOrder'),
new GridFieldTitleHeader(),
new GridFieldAddExistingAutocompleter('before', array('Title'))
)
);
$fields->addFieldsToTab('Root.Main',
array(
$textBlocks
)
);
return $fields;
}
}
文本块Class:
<?php
class TextBlock extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $default_sort = 'Sort';
private static $has_one = array(
'TextBlocksStrip' => 'TextBlocksStrip'
);
}
如果我删除行 new GridFieldOrderableRows('SortOrder')
一切正常,但显然不能重新排序。
我正在为这个而烦恼。我不明白为什么这不起作用。
我做了一个相当优雅的解决方法。
无法查询 SortOrder,因为父对象 ComplexStrip
在尝试加入已排序的 table 时不存在。因此,将 GridFieldOrderableRows 包装在 if 中以检查父对象是否已分配 ID。
// Need to wait until parent object is created before trying to set sort order
if($this->ID) {
$textBlocks->addComponents(
new GridFieldOrderableRows('Sort')
);
}
之后,CMS 中的一切都与以前一样。我现在将在模块上打开一个问题,看看是否有更永久的解决方案。
我在使用 $many_many
而不是 $has_many
时遇到了同样的错误。我可以看到您使用了 $has_many,所以不会解决您的问题,但可能会帮助其他人遇到与我相同的错误消息。