Silverstripe UploadField 上传多张图片但不是同时上传
Silverstripe UploadField upload multiple image but not all at same time
我想知道是否有 UploadField 的扩展允许同时上传 120 张图片?这会导致 I/O 服务器出现无法响应过度使用的问题。那么如何一次将一张图片排队呢?我不想一张一张上传图片。某个地方的模块或一段代码?
在我的项目中添加了 GridFieldBulkEditingTools :
private static $many_many = array(
'Images' => 'Image',
);
...
$gridFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));
$gridFieldConfig->getComponentByType('GridFieldBulkUpload')
->setUfSetup('setFolderName', 'Uploads/Images/Rubriques/Galerie')
->setUfConfig('sequentialUploads', true);
$gridfield = new GridFieldBulkUpload("Images", "Images", $this->Images()->sort("SortOrder"), $gridFieldConfig);
结果...空白页。
我建议使用此模块,因为它可以很好地处理多个上传...我承认我没有尝试过 120 个项目,但我相信它是最好的选择。
https://github.com/unclecheese/silverstripe-dropzone
"The Dropzone module provides FileAttachmentField, a robust HTML5 uploading interfaces for SilverStripe, allowing forms to save file uploads to DataObject instances."
您可以使用 GridField 管理 has_many
或 many_many
并借助 BulkEditingTools
一次上传大量图像。
我通常制作一个额外的 DataObject 来保存图像与其他信息(翻译的标题、版权信息等...)的关系,例如:
<?php
class GalleryPic extends DataObject
{
private static $db = array(
'Title' => 'Text',
'Description' => 'Text',
'Copyright' => 'Text',
'SortOrder' => 'Int'
);
private static $has_one = array(
'Attachment' => 'Image',
'ResourcePage' => 'Page'
);
public function getCMSFields()
{
$fields = new FieldList(
TextField::create('Title', 'Title'),
TextareaField::create('Description', 'Desc.'),
TextField::create('Copyright', 'Copyright / Source'),
$imageField = UploadField::create('Attachment')
);
$imageField->setAllowedFileCategories('image');
$imageField->setAllowedMaxFileNumber(1);
return $fields;
}
}
然后我有一个 DataExtension,可以将 has_many
插入任何页面类型或数据对象:
<?php
class PageGallery extends DataExtension
{
private static $has_many = array(
'Gallery' => 'GalleryPic'
);
function updateCMSFields(FieldList $fields)
{
$conf = GridFieldConfig_RecordEditor::create(10);
$conf->addComponent(new GridFieldSortableRows('SortOrder'));
$conf->addComponent(new GridFieldGalleryTheme('Attachment'));
$conf->addComponent(new GridFieldBulkUpload());
//set upload folder if folderperroot extension is installed...
if ($this->owner->hasMethod('getRootFolderName')) {
$conf->getComponentByType('GridFieldBulkUpload')->setUfSetup('setFolderName', $this->owner->getRootFolderName());
}
$fields->addFieldToTab("Root.Bilder", Gridfield::create('Gallery', 'Gallery', $this->owner->Gallery(), $conf));
return $fields;
}
使用配置 yml api 将此添加到您的页面(例如添加到名为 MyPage 的 class):
MyPage:
extensions:
- 'PageGallery'
并且您在 CMS 的单独选项卡中拥有图库上传网格字段。
我想你知道如何循环模板中的 $Gallery
关系。
需要使用 composer 安装此模块才能使上述示例正常工作:
我想知道是否有 UploadField 的扩展允许同时上传 120 张图片?这会导致 I/O 服务器出现无法响应过度使用的问题。那么如何一次将一张图片排队呢?我不想一张一张上传图片。某个地方的模块或一段代码?
在我的项目中添加了 GridFieldBulkEditingTools :
private static $many_many = array(
'Images' => 'Image',
);
...
$gridFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));
$gridFieldConfig->getComponentByType('GridFieldBulkUpload')
->setUfSetup('setFolderName', 'Uploads/Images/Rubriques/Galerie')
->setUfConfig('sequentialUploads', true);
$gridfield = new GridFieldBulkUpload("Images", "Images", $this->Images()->sort("SortOrder"), $gridFieldConfig);
结果...空白页。
我建议使用此模块,因为它可以很好地处理多个上传...我承认我没有尝试过 120 个项目,但我相信它是最好的选择。
https://github.com/unclecheese/silverstripe-dropzone
"The Dropzone module provides FileAttachmentField, a robust HTML5 uploading interfaces for SilverStripe, allowing forms to save file uploads to DataObject instances."
您可以使用 GridField 管理 has_many
或 many_many
并借助 BulkEditingTools
一次上传大量图像。
我通常制作一个额外的 DataObject 来保存图像与其他信息(翻译的标题、版权信息等...)的关系,例如:
<?php
class GalleryPic extends DataObject
{
private static $db = array(
'Title' => 'Text',
'Description' => 'Text',
'Copyright' => 'Text',
'SortOrder' => 'Int'
);
private static $has_one = array(
'Attachment' => 'Image',
'ResourcePage' => 'Page'
);
public function getCMSFields()
{
$fields = new FieldList(
TextField::create('Title', 'Title'),
TextareaField::create('Description', 'Desc.'),
TextField::create('Copyright', 'Copyright / Source'),
$imageField = UploadField::create('Attachment')
);
$imageField->setAllowedFileCategories('image');
$imageField->setAllowedMaxFileNumber(1);
return $fields;
}
}
然后我有一个 DataExtension,可以将 has_many
插入任何页面类型或数据对象:
<?php
class PageGallery extends DataExtension
{
private static $has_many = array(
'Gallery' => 'GalleryPic'
);
function updateCMSFields(FieldList $fields)
{
$conf = GridFieldConfig_RecordEditor::create(10);
$conf->addComponent(new GridFieldSortableRows('SortOrder'));
$conf->addComponent(new GridFieldGalleryTheme('Attachment'));
$conf->addComponent(new GridFieldBulkUpload());
//set upload folder if folderperroot extension is installed...
if ($this->owner->hasMethod('getRootFolderName')) {
$conf->getComponentByType('GridFieldBulkUpload')->setUfSetup('setFolderName', $this->owner->getRootFolderName());
}
$fields->addFieldToTab("Root.Bilder", Gridfield::create('Gallery', 'Gallery', $this->owner->Gallery(), $conf));
return $fields;
}
使用配置 yml api 将此添加到您的页面(例如添加到名为 MyPage 的 class):
MyPage:
extensions:
- 'PageGallery'
并且您在 CMS 的单独选项卡中拥有图库上传网格字段。
我想你知道如何循环模板中的 $Gallery
关系。
需要使用 composer 安装此模块才能使上述示例正常工作: