我是SilverStripe报道的新手,但到目前为止我还没能找到与此特定问题相关的任何内容。
我有一个自定义报告,在网格视图中列出网站上的所有图像和文件,但是,我想这样做,以便人们可以点击文件名并转到图像或文件进行编辑,或者为每个图像和文件都有一个编辑按钮。现在,如果有人想编辑文件或图像,他们必须离开报告,转到文件选项卡,搜索所述文件/图像,然后单击编辑。这很乏味。
我知道有一种方法可以根据cms / code / reports中的现有报告示例在报告中点击页面标题。但我没有看到任何与链接到上传的图像和文件有关的内容。
有没有办法做到这一点?
以下是我的自定义报告的代码:
<?php
class CustomSideReport_ListofImagesAndFiles extends SS_Report {
// the name of the report
public function title() {
return 'All Images and Files';
}
// what we want the report to return
public function sourceRecords($params = null)
{
return File::get()
->sort('Title');
}
// which fields on that object we want to show
public function columns() {
return array(
"Title" => 'Image Title',
'Filename' => array(
"Filename" => "Filename",
"link" => true,
),
);
}
}
使用"link" => true
无效 - 它会尝试创建一个页面链接,这是不对的。我试过&#34;编辑&#34;和&#34; CanEdit。&#34;
答案 0 :(得分:1)
好的,我从参考Broken Links报告的设置中得出了这个:
// which fields on that object we want to show
public function columns()
{
$linkBase = singleton('CMSFileAddController')->Link('EditForm/field/File/item');
$linkBaseEditLink = str_replace("/add","",$linkBase);
$fields = array(
'Title' => 'Title',
'AbsoluteLink' => array(
'title' => _t('CustomSideReport_ListofImagesAndFiles.ColumnFilename', 'Filename'),
'formatting' => function($value, $item) use ($linkBaseEditLink) {
return sprintf('<a href="%s">%s</a>',
Controller::join_links($linkBaseEditLink, $item->ID."/edit"),
strstr($value, '/assets/', false)
);
}
)
);
return $fields;
}
我不知道这是否是有史以来最好的解决方案 - 它有效,我无法找到与SilverStripe的这种报告创建相关的任何其他内容(我发现的一切)处理获取报告的Pages
,而非图片或文件。
我不得不做一些调整,因为没有CMSFileEditController
就像有一个CMSPageEditController,
但是我用我所拥有的东西做了。
如果有人有更好的解决方案,那么请分享!