SilverStripe 3.1 GridField文件链接使用HTML实体重写

时间:2015-02-04 19:41:10

标签: hyperlink silverstripe

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

2 个答案:

答案 0 :(得分:2)

你非常接近。

您是否在网格域的配置上尝试了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;
    },
));

取决于提交数据对象上可用的字段,如果&#34;文档&#34;是您要添加为gridfield的自定义列的东西,您还需要使用setDisplayFields()添加它。在这种情况下,也要添加它

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

答案 1 :(得分:1)

实际工作的内容:

我给了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 );