Silverstripe UploadField上传多个图像但不是全部同时上传

时间:2016-07-07 19:54:19

标签: php upload silverstripe

我想知道是否有一个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);

结果......空白页。

2 个答案:

答案 0 :(得分:2)

您可以使用GridField在has_many的帮助下管理many_manyBulkEditingTools,以便一次上传大量图片。

我通常会创建一个额外的DataObject,它与其他信息(翻译的字幕,版权信息等)保持Image关系,如:

<?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;
    }

使用config yml api将其添加到您的页面(例如,添加到名为MyPage的类):

MyPage:
  extensions:
    - 'PageGallery'

您可以在CMS中的单独标签中上传图库上传网格。

我想你知道如何循环模板中的$Gallery关系。

需要使用composer安装此模块才能使上述示例正常工作:

答案 1 :(得分:1)

我建议使用这个模块,因为它可以很好地处理多个上传...我会承认我没有试过120个项目,但我确信它是最好的选择。

https://github.com/unclecheese/silverstripe-dropzone

&#34; Dropzone模块提供FileAttachmentField,这是SilverStripe强大的HTML5上传界面,允许表单将文件上传保存到DataObject实例。&#34;