Skip to content

Content multimedia

Paquete para facilitar asociar multimedia a contenidos. El modelo al que se quiera asociar multimedia debe tener además un id como contenido (ver paquete bpanel4-content).

Instalación

Hay que añadir las siguientes entradas al array disks de config/filesystems.php de Laravel.

'images' => [
    'driver' => 'local',
    'root' => storage_path('app/public/media/images'),
    'url' => env('APP_URL') . '/storage/media/images'
],
'documents' => [
    'driver' => 'local',
    'root' => storage_path('app/public/media/documents'),
    'url' => env('APP_URL') . '/storage/media/documents'
],
'compressed' => [
    'driver' => 'local',
    'root' => storage_path('app/public/media/compressed'),
    'url' => env('APP_URL') . '/storage/media/compressed'
]

Como guardar multimedia en un modelo:

En el ejemplo, $page es un modelo que además está asociado al módulo de contenidos. En el método update y store del controlador, debe añadirse lo siguiente:

ContentMultimedia::uploadModelMultimedia($page, $file);

$file es el array o archivo individual devuelto por $request->validated() para el campo 'file' correspondiente. Es decir, es el archivo o archivos a subir pero no leido desde $_FILES sino desde el Request de Laravel.

Campo para subir archivos en un template

En la vista desde la que se llame al controlador, deberá incluirse el componente de livewire upload-content-multimedia-widget:

@livewire('content-multimedia::upload-content-multimedia-widget', [
    'fieldName' => 'file',
    'model' => $page,
    'allowedFormats' => 'image/jpeg, image/png',
    'allowedExtensions' => 'jpg,jpeg,png'
])

Mostrar multimedia asociado a un modelo:

También puede incluirse este otro componente, que mostrará las imágenes, archivos, etc asociados al modelo:

@livewire('content-multimedia-images::content-multimedia-images-widget', [
    'contentId' => $page,
    'module' => 'page',
    'permission' => 'page.edit'
])

Obtener imagen destacada de un modelo:

return ContentMultimediaFacade::retrieveFeaturedImage($this->content->id)
    ?->multimedia
    ->media
    ->first()
    ?->getFullUrl()
;

Traits

El trait HasImages añade el método getImages() al modelo, facilitando obtener las imágenes que tiene asociadas como colección de objetos Media de Spatie media library.