如何为用户上传的文件添加下载按钮到后端的DataObject?
How to add a download button for a file uploaded by a user to a DataObject in the backend?
我想在 DataObject
.
的后端添加一个下载按钮
我在前端有一个上传表单,用户可以在其中上传文件。例如 .jpg 或 .pdf。
class TeamPage_Controller extends Page_Controller
{
private static $allowed_actions = array(
'ContactForm'
);
$fields = new FieldList(array(
TextField::create('Email'),
FileField::create('MapFile')
));
$actions = new FieldList(
FormAction::create("doSaveSubmission")
);
$required = new RequiredFields('Email');
$form = new Form($this, 'ContactForm', $fields, $actions, $required);
return $form;
}
public function doSaveSubmission($data, $form){
$submission = new ContactSubmission();
$form->saveInto($submission);
$submission->TeamPageID = $this->ID;
$submission->write();
return 'Saved into Dataobject';
}
}
现在在后端,当您从 Gridfield
单击进入各个条目时,我希望能够下载用户上传的文件。是否可以在 "Choose another file" 按钮旁边添加一个按钮,或者自己创建一个位于该按钮部分下方的按钮:
ContactSubmission.php
<?php
class ContactSubmission extends DataObject
{
private static $db = array(
'Email' => 'Varchar(255)',
);
private static $has_one = array(
'TeamPage' => 'TeamPage',
'MapFile' => 'File'
);
private static $summary_fields = array(
'Email'
);
}
您可以在 DataObject 窗体上添加新操作。
为此,请查看更好的按钮模块。 https://github.com/unclecheese/silverstripe-gridfield-betterbuttons
在操作本身中,您需要通过强制下载 header 让 SilverStripe return 文件。你可以在这里看到其他人正在尝试这样做..
http://www.silverstripe.org/community/forums/general-questions/show/15832
我们可以通过创建新模板来自定义 UploadField
按钮,供 UploadField
使用。它使用的默认模板是 UploadField_FileButtons
。我们将复制它来创建我们的新模板。
我们在mysite/templates/includes中创建了一个名为UploadField_FileButtonsWithDownload的模板。在此模板中,我们复制原始 UploadField_FileButtons
并在末尾添加我们的下载 link。
UploadField_FileButtonsWithDownload.ss
<% if $canEdit %>
<button class="ss-uploadfield-item-edit ss-ui-button ui-corner-all" title="<% _t('UploadField.EDITINFO', 'Edit this file') %>" data-icon="pencil">
<% _t('UploadField.EDIT', 'Edit') %>
<span class="toggle-details">
<span class="toggle-details-icon"></span>
</span>
</button>
<% end_if %>
<button class="ss-uploadfield-item-remove ss-ui-button ui-corner-all" title="<% _t('UploadField.REMOVEINFO', 'Remove this file from here, but do not delete it from the file store') %>" data-icon="plug-disconnect-prohibition">
<% _t('UploadField.REMOVE', 'Remove') %></button>
<% if $canDelete %>
<button data-href="$UploadFieldDeleteLink" class="ss-uploadfield-item-delete ss-ui-button ui-corner-all" title="<% _t('UploadField.DELETEINFO', 'Permanently delete this file from the file store') %>" data-icon="minus-circle"><% _t('UploadField.DELETE', 'Delete from files') %></button>
<% end_if %>
<% if $UploadField.canAttachExisting %>
<button class="ss-uploadfield-item-choose-another ss-uploadfield-fromfiles ss-ui-button ui-corner-all" title="<% _t('UploadField.CHOOSEANOTHERINFO', 'Replace this file with another one from the file store') %>" data-icon="network-cloud">
<% _t('UploadField.CHOOSEANOTHERFILE', 'Choose another file') %></button>
<% end_if %>
<a class="ss-ui-button ui-corner-all" title="Download this file" href="$Link" target="_blank" download>Download</a>
然后我们为 MapFile
字段设置 UploadField
模板以使用我们的新模板。
ContactSubmission.php
class ContactSubmission extends DataObject {
private static $db = array(
'Email' => 'Varchar(255)'
);
private static $has_one = array(
'TeamPage' => 'TeamPage',
'MapFile' => 'File'
);
private static $summary_fields = array(
'Email'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
if ($mapFileField = $fields->fieldByName('Root.Main.MapFile')) {
$mapFileField->setTemplateFileButtons('UploadField_FileButtonsWithDownload');
}
return $fields;
}
}
现在,下载按钮 link 应该出现在 CMS 中的 选择另一个文件 按钮之后。
我想在 DataObject
.
我在前端有一个上传表单,用户可以在其中上传文件。例如 .jpg 或 .pdf。
class TeamPage_Controller extends Page_Controller
{
private static $allowed_actions = array(
'ContactForm'
);
$fields = new FieldList(array(
TextField::create('Email'),
FileField::create('MapFile')
));
$actions = new FieldList(
FormAction::create("doSaveSubmission")
);
$required = new RequiredFields('Email');
$form = new Form($this, 'ContactForm', $fields, $actions, $required);
return $form;
}
public function doSaveSubmission($data, $form){
$submission = new ContactSubmission();
$form->saveInto($submission);
$submission->TeamPageID = $this->ID;
$submission->write();
return 'Saved into Dataobject';
}
}
现在在后端,当您从 Gridfield
单击进入各个条目时,我希望能够下载用户上传的文件。是否可以在 "Choose another file" 按钮旁边添加一个按钮,或者自己创建一个位于该按钮部分下方的按钮:
ContactSubmission.php
<?php
class ContactSubmission extends DataObject
{
private static $db = array(
'Email' => 'Varchar(255)',
);
private static $has_one = array(
'TeamPage' => 'TeamPage',
'MapFile' => 'File'
);
private static $summary_fields = array(
'Email'
);
}
您可以在 DataObject 窗体上添加新操作。
为此,请查看更好的按钮模块。 https://github.com/unclecheese/silverstripe-gridfield-betterbuttons
在操作本身中,您需要通过强制下载 header 让 SilverStripe return 文件。你可以在这里看到其他人正在尝试这样做.. http://www.silverstripe.org/community/forums/general-questions/show/15832
我们可以通过创建新模板来自定义 UploadField
按钮,供 UploadField
使用。它使用的默认模板是 UploadField_FileButtons
。我们将复制它来创建我们的新模板。
我们在mysite/templates/includes中创建了一个名为UploadField_FileButtonsWithDownload的模板。在此模板中,我们复制原始 UploadField_FileButtons
并在末尾添加我们的下载 link。
UploadField_FileButtonsWithDownload.ss
<% if $canEdit %>
<button class="ss-uploadfield-item-edit ss-ui-button ui-corner-all" title="<% _t('UploadField.EDITINFO', 'Edit this file') %>" data-icon="pencil">
<% _t('UploadField.EDIT', 'Edit') %>
<span class="toggle-details">
<span class="toggle-details-icon"></span>
</span>
</button>
<% end_if %>
<button class="ss-uploadfield-item-remove ss-ui-button ui-corner-all" title="<% _t('UploadField.REMOVEINFO', 'Remove this file from here, but do not delete it from the file store') %>" data-icon="plug-disconnect-prohibition">
<% _t('UploadField.REMOVE', 'Remove') %></button>
<% if $canDelete %>
<button data-href="$UploadFieldDeleteLink" class="ss-uploadfield-item-delete ss-ui-button ui-corner-all" title="<% _t('UploadField.DELETEINFO', 'Permanently delete this file from the file store') %>" data-icon="minus-circle"><% _t('UploadField.DELETE', 'Delete from files') %></button>
<% end_if %>
<% if $UploadField.canAttachExisting %>
<button class="ss-uploadfield-item-choose-another ss-uploadfield-fromfiles ss-ui-button ui-corner-all" title="<% _t('UploadField.CHOOSEANOTHERINFO', 'Replace this file with another one from the file store') %>" data-icon="network-cloud">
<% _t('UploadField.CHOOSEANOTHERFILE', 'Choose another file') %></button>
<% end_if %>
<a class="ss-ui-button ui-corner-all" title="Download this file" href="$Link" target="_blank" download>Download</a>
然后我们为 MapFile
字段设置 UploadField
模板以使用我们的新模板。
ContactSubmission.php
class ContactSubmission extends DataObject {
private static $db = array(
'Email' => 'Varchar(255)'
);
private static $has_one = array(
'TeamPage' => 'TeamPage',
'MapFile' => 'File'
);
private static $summary_fields = array(
'Email'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
if ($mapFileField = $fields->fieldByName('Root.Main.MapFile')) {
$mapFileField->setTemplateFileButtons('UploadField_FileButtonsWithDownload');
}
return $fields;
}
}
现在,下载按钮 link 应该出现在 CMS 中的 选择另一个文件 按钮之后。