【问题标题】:How to display formatted HTML in GridField DataColumn in Silverstripe 4如何在 Silverstripe 4 的 GridField DataColumn 中显示格式化的 HTML
【发布时间】:2020-01-05 03:01:44
【问题描述】:

我们有一个对象,它有两个字段——一个是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?

【问题讨论】:

    标签: silverstripe silverstripe-4


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        • 2023-02-23
        • 2021-09-10
        • 2015-09-03
        • 2012-11-03
        • 1970-01-01
        相关资源
        最近更新 更多