我很新的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;
},
));
你是八九不离十。
相反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"
));
什么实际工作:
我给了正确的答案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 );