我们有一个对象,它有两个字段 - 一个是Text
,另一个是HTMLText
:
private static $db = [
'Question' => 'Varchar(255)',
'Answer' => 'HTMLText'
];
我们使用DataColumns
在Gridfield
中引用此对象:
$questionsGrid = GridField::create(
'Questions', 'Questions',
$this->Questions(),
GridFieldConfig_RelationEditor::create()
);
$dataColumns = $questionsGrid->
getConfig()->getComponentByType(GridFieldDataColumns::class);
$dataColumns->setDisplayFields([
'Question' => 'Question',
'Answer' => 'Answer'
]);
$dataColumns->setFieldCasting([
'Question' => 'Text',
'Answer' => 'HTMLText'
]);
然而,Answer
列显示为原始HTML - 带有可见标签且没有格式。
<p>The answer to life the universe & everything is 42.</p><p>A second paragraph for good measure.</p>
我们如何将Answer
列显示为格式化的 HTML?
您可以将'HTMLFragment->RAW'
用于该列
$dataColumns->setFieldCasting([
'Question' => 'Text',
'Answer' => 'HTMLFragment->RAW'
]);
如果要修改在 GridField 中呈现为行的DataObject
子类上的方法以实现相同的操作,只需将其转换为HTMLText
:
/**
* @return HTMLText
*/
public function ImageNice(): HTMLText
{
$image = '<img src="/path/to/foo.png" />';
return DBField::create_field(HTMLText::class, $image);
}