SilverStripe gridfield多类编辑器的sort()列无效
我在设置嵌套关系的排序顺序时遇到问题,其中子项可以通过的模块拖放重新排序。我也在使用 我有一个SilverStripe gridfield多类编辑器的sort()列无效,silverstripe,Silverstripe,我在设置嵌套关系的排序顺序时遇到问题,其中子项可以通过的模块拖放重新排序。我也在使用 我有一个页面,其中有许多复杂的行程。这些ComplexStrip对象有许多“LinkedObjects” 问题: <?php class TextBlock extends DataObject { private static $db = array( 'SortOrder' => 'Int' ); private static $default_sor
页面
,其中有许多复杂的行程
。这些ComplexStrip
对象有许多“LinkedObjects”
问题:
<?php
class TextBlock extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $default_sort = 'Sort';
private static $has_one = array(
'TextBlocksStrip' => 'TextBlocksStrip'
);
}
当我试图通过GridField添加一个ComplexStrip
时,我得到以下错误:Uncaught InvalidArgumentException:Invalid sort()列
我的设置:
<?php
class TextBlock extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $default_sort = 'Sort';
private static $has_one = array(
'TextBlocksStrip' => 'TextBlocksStrip'
);
}
页面类别:
当我在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;
}
}
TextBlock类:
<?php
class TextBlock extends DataObject {
private static $db = array(
'SortOrder' => 'Int'
);
private static $default_sort = 'Sort';
private static $has_one = array(
'TextBlocksStrip' => 'TextBlocksStrip'
);
}
我做了一个相当优雅的变通方法
无法查询排序器,因为父对象ComplexStrip
在尝试加入排序表时不存在。因此,将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\u many
而不是$has\u many
时相同的错误。我可以看到您使用了$has\u many,因此无法解决您的问题,但可能会帮助其他人遇到与我相同的错误消息。这也可能与此问题有关:您可以在报告的问题中找到我提出的解决方法。因此,在我的情况下,这将在ComplexStrip
类中进行?我还应该提到,这是在CMS中发生的,而不是在模板中。