SilverStripe 3.1 GridField文件链接重新写有HTML实体(SilverStr

2019-10-21 18:23发布

我很新的Silverstripe(3.1)。 我用它来收集用户的应用程序。 每个用户上传,后来在CMS有人可以下载文件。 这里是被称为文件HAS_ONE关系“的文件。” 我想链接到一个GridField内部的文件。 所以经过一番搜索,我做了以下的解决方案 - 简单,它的作品除了一个问题。

该链接会出现在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;
        },
    ));

Answer 1:

你是八九不离十。

相反addDataFields()的,你尝试setFieldFormatting您gridfield的配置?

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

根据对提交数据对象可用字段,如果“文档”是您要添加的自定义列到你的gridfield的东西,你将需要添加它,以及使用setDisplayFields()。 在这种情况下,将其添加为好

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


Answer 2:

什么实际工作:

我给了正确的答案jfbarrois指着我直的,而是认为我应该张贴与实际工作,因为我花了一段时间来找到这个答案的代码。

它有不可估量的优势在于它的实际工作和链接放置在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 );


文章来源: SilverStripe 3.1 GridField file link is re-written with HTML Entities