mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
add docs for new file extension process
This commit is contained in:
parent
77a45c0dbc
commit
23bf8d2b3c
@ -141,6 +141,64 @@ if ($file) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Adding custom fields to files and images
|
||||||
|
|
||||||
|
As with any customisation of a core class, adding fields to the `File` and `Image` classes
|
||||||
|
is a two-phased approach. First, you have to update the model (i.e. the `$db` array) to include
|
||||||
|
your new custom field. Second, you need to update the editform to provide a way of editing
|
||||||
|
that field in the CMS. For most core classes, this can be done in a single extension, with an
|
||||||
|
update to the `$db` array and definition of an `updateCMSFields` function, but for files
|
||||||
|
and images, it works a bit differently. The edit form is generated by another class --
|
||||||
|
`FileFormFactory`. You will therefore need two separate extensions.
|
||||||
|
|
||||||
|
In this example, we'll add a `description` field to the `File` object and give it an editable
|
||||||
|
field in the CMS.
|
||||||
|
|
||||||
|
*app/_config/app.yml*
|
||||||
|
```yml
|
||||||
|
SilverStripe\Assets\File:
|
||||||
|
extensions:
|
||||||
|
- MyProject\MyFileExtension
|
||||||
|
SilverStripe\AssetAdmin\Forms\FileFormFactory:
|
||||||
|
extensions:
|
||||||
|
- MyProject\MyFormFactoryExtension
|
||||||
|
```
|
||||||
|
|
||||||
|
*app/src/MyFileExtension.php*
|
||||||
|
```php
|
||||||
|
namespace MyProject;
|
||||||
|
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
class MyFileExtension extends DataExtension
|
||||||
|
{
|
||||||
|
private static $db = [
|
||||||
|
'Description' => 'Text',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
*app/src/MyFormFactoryExtension.php*
|
||||||
|
```php
|
||||||
|
namespace MyProject;
|
||||||
|
|
||||||
|
use SilverStripe\Core\Extension;
|
||||||
|
use SilverStripe\Forms\FieldList;
|
||||||
|
use SilverStripe\Forms\TextareaField;
|
||||||
|
|
||||||
|
class MyFormFactoryExtension extends Extension
|
||||||
|
{
|
||||||
|
public function updateFormFields(FieldList $fields)
|
||||||
|
{
|
||||||
|
$fields->insertAfter(
|
||||||
|
'Title',
|
||||||
|
TextareaField::create('Description', 'Description')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## File versioning
|
## File versioning
|
||||||
|
|
||||||
File versioning is extended with the [silverstripe/versioned](https://github.com/silverstripe/silverstripe-versioned/)
|
File versioning is extended with the [silverstripe/versioned](https://github.com/silverstripe/silverstripe-versioned/)
|
||||||
|
@ -1095,6 +1095,60 @@ There are a few differences in this new API:
|
|||||||
A generic `manipulate` method may be used, although the callback for this method both is given, and should return,
|
A generic `manipulate` method may be used, although the callback for this method both is given, and should return,
|
||||||
an `AssetStore` instance and file tuple (Filename, Hash, and Variant) rather than an Image_Backend.
|
an `AssetStore` instance and file tuple (Filename, Hash, and Variant) rather than an Image_Backend.
|
||||||
|
|
||||||
|
### Customising file edit form fields {#customising-file-editform}
|
||||||
|
|
||||||
|
In 3.x, customisation of the edit form for files and images could be done using the conventional
|
||||||
|
`updateCMSFields(FieldList $fields)` hook. In 4.x, this method no longer has any influence
|
||||||
|
on the file edit form that gets rendered in asset-admin. Instead, create an extension for
|
||||||
|
`FileFormFactory` and use the `updateFormFields(FieldList $fields)` hook.
|
||||||
|
|
||||||
|
In this example, we'll add a `description` field to the `File` object and give it an editable
|
||||||
|
field in the CMS.
|
||||||
|
|
||||||
|
*app/_config/app.yml*
|
||||||
|
```yml
|
||||||
|
SilverStripe\Assets\File:
|
||||||
|
extensions:
|
||||||
|
- MyProject\MyFileExtension
|
||||||
|
SilverStripe\AssetAdmin\Forms\FileFormFactory:
|
||||||
|
extensions:
|
||||||
|
- MyProject\MyFormFactoryExtension
|
||||||
|
```
|
||||||
|
|
||||||
|
*app/src/MyFileExtension.php*
|
||||||
|
```php
|
||||||
|
namespace MyProject;
|
||||||
|
|
||||||
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
|
||||||
|
class MyFileExtension extends DataExtension
|
||||||
|
{
|
||||||
|
private static $db = [
|
||||||
|
'Description' => 'Text',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
*app/src/MyFormFactoryExtension.php*
|
||||||
|
```php
|
||||||
|
namespace MyProject;
|
||||||
|
|
||||||
|
use SilverStripe\Core\Extension;
|
||||||
|
use SilverStripe\Forms\FieldList;
|
||||||
|
use SilverStripe\Forms\TextareaField;
|
||||||
|
|
||||||
|
class MyFormFactoryExtension extends Extension
|
||||||
|
{
|
||||||
|
public function updateFormFields(FieldList $fields)
|
||||||
|
{
|
||||||
|
$fields->insertAfter(
|
||||||
|
'Title',
|
||||||
|
TextareaField::create('Description', 'Description')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### File or Image shortcode handler {#file-shortcode}
|
### File or Image shortcode handler {#file-shortcode}
|
||||||
|
|
||||||
The `handle_shortcode` methods have been removed from the core File and Image classes
|
The `handle_shortcode` methods have been removed from the core File and Image classes
|
||||||
|
Loading…
Reference in New Issue
Block a user