如何在 Silverstripe 4 中的 GridField DataColumn 中显示格式化的 HTML



我们有一个对象,它有两个字段 - 一个是Text,另一个是HTMLText

private static $db = [
'Question' => 'Varchar(255)',
'Answer' => 'HTMLText'
];

我们使用DataColumnsGridfield中引用此对象:

$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);
}

最新更新