SilverStripe 3.1 GridField 文件 link 用 HTML 实体重写

SilverStripe 3.1 GridField file link is re-written with HTML Entities

我是 Silverstripe (3.1) 的新手。我正在使用它来收集用户的应用程序。每个用户上传一个文件,稍后在 CMS 中有人可以下载该文件。 名为 'Document.' 的文件存在 has_one 关系 我想 link 到 GridField 中的那个文件。因此,经过一番搜索后,我做了下面的解决方案 - 很简单,除了一个问题外它有效。

link 确实出现在 GridField 的正确列中,但它已通过 HTMLSpecialChars() 之类的东西转换,我可以看到所有 HTML。对于我的生活,我不知道如何阻止它。 我想知道这种转换发生在哪里? 我该如何规避它?

$submissionGrid = new GridField('submissions', 'Submissions', $submission, $config );

$submissionGrid->addDataFields(array(
        "Document" => function($row) {
            $link = '<a href="' . $row->Document()->getAbsoluteURL() . '">Download Document</a>';
            return $link;
        },
    ));

你很接近。

您是否尝试过对网格字段的配置使用 setFieldFormatting 而不是 addDataFields()?

$submissionGrid = new GridField('submissions', 'Submissions', $submission, $config );
$config = $submissionGrid->getConfig();
$config->getComponentByType('GridFieldDataColumns')->setFieldFormatting(array(
    "Document" => function($value, $item) {
        $link = '<a href="' . $item->Document()->getAbsoluteURL() . '">Download Document</a>';
        return $link;
    },
));

根据提交数据对象上可用的字段,如果 "Document" 是您要作为自定义列添加到网格字段的内容,您还需要使用 setDisplayFields() 添加它。在这种情况下,也添加这个

$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
    "Document" => "Link to document"
));

实际有效的方法:

我给了 jfbarrois 正确的答案,因为他直接指出了我,但我认为我应该 post 提高实际工作的代码,因为我花了一段时间才找到这个答案。

它确实具有不可估量的优势,它确实有效,并且 link 被放置在 GridField 中的自定义格式的列中。

$config = GridFieldConfig_Base::create();

$config->getComponentByType('GridFieldDataColumns')->setDisplayFields($displayFields);
// Adding the custom named 'Download' column to the previously defined $displayFields
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(
    array_merge($displayFields, array(
            "Download" => "Link to document"
        )
    ));

// Set the field formatting on the custom column inserting the real data from the 'Document' File Object
$config->getComponentByType('GridFieldDataColumns')->setFieldFormatting(array(
        "Download" => function($value, $item) {
            $link = '<a href="' . $item->Document()->getAbsoluteURL() . '">Download Document</a>';
            return $link;
        },
    ));

// Create the GridField
$submissionGrid = new GridField('submissions', 'Submissions', $submission, $config );