如何在 Silverstripe 4 的 GridField DataColumn 中显示格式化的 HTML
How to display formatted HTML in GridField DataColumn in Silverstripe 4
我们有一个对象有两个字段 - 一个是 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>
我们如何按 HTML 格式显示 Answer
列?
您可以为该列使用 'HTMLFragment->RAW'
$dataColumns->setFieldCasting([
'Question' => 'Text',
'Answer' => 'HTMLFragment->RAW'
]);
如果要修改 DataObject
子类上的方法,将其呈现为 GridField 中的一行以实现相同的目的,只需将其转换为 HTMLText
:
/**
* @return HTMLText
*/
public function ImageNice(): \HTMLText
{
$image = '<img src="/path/to/foo.png" />';
return \DBField::create_field(\HTMLText::class, $image);
}
我们有一个对象有两个字段 - 一个是 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>
我们如何按 HTML 格式显示 Answer
列?
您可以为该列使用 'HTMLFragment->RAW'
$dataColumns->setFieldCasting([
'Question' => 'Text',
'Answer' => 'HTMLFragment->RAW'
]);
如果要修改 DataObject
子类上的方法,将其呈现为 GridField 中的一行以实现相同的目的,只需将其转换为 HTMLText
:
/**
* @return HTMLText
*/
public function ImageNice(): \HTMLText
{
$image = '<img src="/path/to/foo.png" />';
return \DBField::create_field(\HTMLText::class, $image);
}