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

Hyperlink SilverStripe 3.1 GridField文件链接使用HTML实体重新编写,hyperlink,silverstripe,Hyperlink,Silverstripe,我对Silverstripe(3.1)非常陌生。我用它来收集用户的应用程序。每个用户上传一个文件,稍后在CMS中有人可以下载。 名为“Document”的文件有一个has_one关系 我想链接到GridField中的那个文件。因此,经过一些搜索,我做了下面的解决方案-简单,它的工作,除了一个问题 该链接确实出现在GridField的正确列中,但它已通过类似于HTMLSpecialChars()的内容进行转换,我可以看到所有HTML。我一生都想不出如何阻止它。 我想知道这个转换在哪里进行? 我怎样

我对Silverstripe(3.1)非常陌生。我用它来收集用户的应用程序。每个用户上传一个文件,稍后在CMS中有人可以下载。 名为“Document”的文件有一个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;
        },
    ));
$submissionGrid=new-GridField('submissions','submissions',$submission,$config);
$submissionGrid->addDataFields(数组(
“文档”=>函数($row){
$link='';
返回$link;
},
));
你已经很接近了

您是否尝试过在gridfield的配置上设置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;
    },
));
你很接近

您是否尝试过在gridfield的配置上设置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;
    },
));
实际起作用的是:

我给了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 );
$config=GridFieldConfig_Base::create();
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields($displayFields);
//将自定义名为“下载”列添加到先前定义的$displayFields
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(
数组\合并($displayFields,数组(
“下载”=>“指向文档的链接”
)
));
//在插入“文档”文件对象中的真实数据的自定义列上设置字段格式
$config->getComponentByType('GridFieldDataColumns')->setFieldFormatting(数组(
“下载”=>函数($value$item){
$link='';
返回$link;
},
));
//创建GridField
$submissionGrid=new GridField('submissions','submissions',$submission,$config);
实际有效的方法:

我给了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 );
$config=GridFieldConfig_Base::create();
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields($displayFields);
//将自定义名为“下载”列添加到先前定义的$displayFields
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(
数组\合并($displayFields,数组(
“下载”=>“指向文档的链接”
)
));
//在插入“文档”文件对象中的真实数据的自定义列上设置字段格式
$config->getComponentByType('GridFieldDataColumns')->setFieldFormatting(数组(
“下载”=>函数($value$item){
$link='';
返回$link;
},
));
//创建GridField
$submissionGrid=new GridField('submissions','submissions',$submission,$config);

谢谢你的回答。两件事。我确实尝试过setFieldFormatting,但我发现,任何将文档字段添加到DiplayFields数组的尝试都会导致“方法'fortemplate'在'File'上不存在”。也就是说,您的代码看起来比我今天看到的任何其他代码都有更高的工作概率,因为它具有参数$value和$item。我以前没见过这些。但它仍然崩溃。也许我需要做的是添加自定义字段,然后格式化它???听起来像是疯狂的谈话!不管怎样,我会试试的。谢谢你的回答。两件事。我确实尝试过setFieldFormatting,但我发现,任何将文档字段添加到DiplayFields数组的尝试都会导致“方法'fortemplate'在'File'上不存在”。也就是说,您的代码看起来比我今天看到的任何其他代码都有更高的工作概率,因为它具有参数$value和$item。我以前没见过这些。但它仍然崩溃。也许我需要做的是添加自定义字段,然后格式化它???听起来像是疯狂的谈话!不管怎样,我要试试。