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

时间:2019-09-02 02:10:59

标签: silverstripe silverstripe-4

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

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

我们正在使用GridfieldDataColumns中引用该对象:

$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?

2 个答案:

答案 0 :(得分:3)

您可以在该列中使用'HTMLFragment->RAW'

$dataColumns->setFieldCasting([
    'Question' => 'Text',
    'Answer' => 'HTMLFragment->RAW'
]);

答案 1 :(得分:0)

如果您想修改在 GridField 中呈现为一行的 DataObject 子类上的方法以实现相同的目的,只需将其强制转换为 HTMLText

    /**
     * @return HTMLText
     */
    public function ImageNice(): \HTMLText
    {
        $image = '<img src="/path/to/foo.png" />';
        return \DBField::create_field(\HTMLText::class, $image);
    }

相关问题