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_manymany_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 安装此模块才能使上述示例正常工作: