How to automaticaly publish files uploaded to a dataobject in Silverstripe model admin

北慕城南 提交于 2019-12-23 09:27:51

问题


In Silverstripe 4 a file that is uploaded must be published before it is visible to the public side of the site.

If I create a $Page with a $has_one Image::Class and then also assign that image to $owns[] the uploaded image will be published when I publish the page.

However If I create the following data object structure it will not.

Class Item extends DataObject{
    $has_one[
        'ItemImage'=>Image::Class,
        'Catalog'=>'Catalog'
    ];

    $owns[
        'ItemImage'
    ]
}

Class Catalog extend DataObject{
    $has_many[
        'Items'=>'Item'
    ]
    $owns[
        'Items'
    ]

    public function getCMSFields(){
        $fields = parent::getCMSFields();

        $fields->addFieldToTab('Root.Items', GridField::create('Items', 'Items', $this->Items(), GridFieldConfig_RecordEditor::create()));

        return $fields;

    }
}

If I create a catalog and within it create items with images and then save it, it will not publish the images that were uploaded. I will have to manually: 1. Select the image 2. Edit Original 3. Publish

There has to be an easier way for the user.


回答1:


This is currently discussed on GitHub on multiple repositories.

The solution at the moment, is either publish the images manually in onAfterWrite, or version your DataObject, preferably via YML:

My\Data\Object
  extensions:
    - Versioned



回答2:


Your dataobject needs to extend the Versioned extension. Pages already have this in the SiteTree object.

Class Item extends DataObject
{
    private static $has_one = [
        'ItemImage' => Image::Class,
        'Catalog' => 'Catalog'
    ];

    private static $owns = [
        'ItemImage'
    ];

    private static $extensions = [
        Versioned::class . '.versioned'
    ];
}

Edit

The above doesn't actually work for a ModelAdmin, only for objects related to an object that already is 'Versioned' (like SiteTree).
If you want to this from a ModelAdmin you could add the following:

private static $versioned_gridfield_extensions = true;

Which will create a few buttons in your ModelAdmin. After you click publish, the File will publish too.



来源:https://stackoverflow.com/questions/48144600/how-to-automaticaly-publish-files-uploaded-to-a-dataobject-in-silverstripe-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!