Columna de imagen
Introducción
Las tablas pueden renderizar imágenes, basadas en la ruta en el estado de la columna:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('avatar')
En este caso, el estado header_image
podría contener posts/header-images/4281246003439.jpg
, que es relativo al directorio raíz del disco de almacenamiento. El disco de almacenamiento se define en el archivo de configuración, local
por defecto. También puedes establecer la variable de entorno FILESYSTEM_DISK
para cambiarlo.
Alternativamente, el estado podría contener una URL absoluta a una imagen, como https://example.com/images/header.jpg
.
Administrar el disco de imágenes
El disco de almacenamiento por defecto se define en el archivo de configuración, local
por defecto. También puedes establecer la variable de entorno FILESYSTEM_DISK
para cambiarlo. Si quieres usar un disco diferente, puedes pasar un nombre de disco personalizado al método disk()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('header_image')
->disk('s3')
💡 Utility Injection
Además de permitir un valor estático, el método disk()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Imágenes públicas
Por defecto, Filament generará URLs temporales a las imágenes en el sistema de archivos, a menos que el disco esté configurado como public
. Si tus imágenes están almacenadas en un disco público, puedes establecer la visibility()
a public
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('header_image')
->visibility('public')
💡 Utility Injection
Además de permitir un valor estático, el método visibility()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Personalizar el tamaño
Puedes personalizar el tamaño de la imagen pasando imageWidth()
y imageHeight()
, o ambos con imageSize()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('header_image')
->imageWidth(200)
ImageColumn::make('header_image')
->imageHeight(50)
ImageColumn::make('avatar')
->imageSize(40)
💡 Utility Injection
Además de permitir valores estáticos, los métodos imageWidth()
, imageHeight()
y imageSize()
también aceptan funciones para calcularlos dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Imágenes cuadradas
Puedes mostrar la imagen usando una relación de aspecto 1:1:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('avatar')
->imageHeight(40)
->square()
Opcionalmente, puedes pasar un valor booleano para controlar si la imagen debe ser cuadrada o no:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('avatar')
->imageHeight(40)
->square(FeatureFlag::active())
💡 Utility Injection
Además de permitir un valor estático, el método square()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Imágenes circulares
Puedes hacer que la imagen sea completamente redonda, lo cual es útil para renderizar avatares:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('avatar')
->imageHeight(40)
->circular()
Opcionalmente, puedes pasar un valor booleano para controlar si la imagen debe ser circular o no:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('avatar')
->imageHeight(40)
->circular(FeatureFlag::active())
💡 Utility Injection
Además de permitir un valor estático, el método circular()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Añadir una URL de imagen por defecto
Puedes mostrar una imagen placeholder si aún no existe, pasando una URL al método defaultImageUrl()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('header_image')
->defaultImageUrl(url('storage/posts/header-images/default.jpg'))
💡 Utility Injection
Además de permitir un valor estático, el método defaultImageUrl()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Apilar imágenes
Puedes mostrar varias imágenes como un grupo superpuesto usando stacked()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
Opcionalmente, puedes pasar un valor booleano para controlar si las imágenes deben apilarse o no:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked(FeatureFlag::active())
💡 Utility Injection
Además de permitir un valor estático, el método stacked()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Personalizar el ancho del borde de apilado
El ancho de borde por defecto es 3
, pero puedes personalizarlo de 0
a 8
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->ring(5)
💡 Utility Injection
Además de permitir un valor estático, el método ring()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Personalizar el solapamiento de apilado
El solapamiento por defecto es 4
, pero puedes personalizarlo de 0
a 8
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->overlap(2)
💡 Utility Injection
Además de permitir un valor estático, el método overlap()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Establecer un límite
Puedes limitar el número máximo de imágenes a mostrar pasando limit()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->limit(3)
💡 Utility Injection
Además de permitir un valor estático, el método limit()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Mostrar el conteo de imágenes restantes
Cuando estableces un límite, puedes mostrar el número de imágenes restantes usando limitedRemainingText()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->limit(3)
->limitedRemainingText()
Opcionalmente, puedes pasar un valor booleano para controlar si el texto de imágenes restantes debe mostrarse o no:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->limit(3)
->limitedRemainingText(FeatureFlag::active())
💡 Utility Injection
Además de permitir un valor estático, el método limitedRemainingText()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Personalizar el tamaño del texto de imágenes restantes
Por defecto, el tamaño del texto restante es TextSize::Small
. Puedes personalizarlo con TextSize::ExtraSmall
, TextSize::Medium
o TextSize::Large
usando el parámetro size
:
use Filament\Tables\Columns\ImageColumn;
use Filament\Support\Enums\TextSize;
ImageColumn::make('colleagues.avatar')
->imageHeight(40)
->circular()
->stacked()
->limit(3)
->limitedRemainingText(size: TextSize::Large)
💡 Utility Injection
Además de permitir un valor estático, el método limitedRemainingText()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Evitar la verificación de existencia de archivos
Cuando se carga el esquema, se detecta automáticamente si las imágenes existen para evitar errores de archivos faltantes. Esto se hace en el backend. Cuando uses almacenamiento remoto con muchas imágenes, esto puede ser lento. Puedes usar el método checkFileExistence(false)
para desactivar esta verificación:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('attachment')
->checkFileExistence(false)
💡 Utility Injection
Además de permitir un valor estático, el método checkFileExistence()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Ajustar múltiples imágenes
Las imágenes pueden configurarse para ajustarse a la línea si no caben, usando wrap()
:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('colleagues.avatar')
->circular()
->stacked()
->wrap()
El "ancho" para que se haga el ajuste depende de la etiqueta de la columna, así que puede que necesites usar una etiqueta más corta u oculta para que se ajuste más estrechamente.
Añadir atributos HTML extra a la imagen
Puedes pasar atributos adicionales al elemento <img>
mediante extraImgAttributes()
. Los atributos deben representarse como un array, donde la clave es el nombre del atributo y el valor es su valor:
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('logo')
->extraImgAttributes([
'alt' => 'Logo',
'loading' => 'lazy',
])
💡 Utility Injection
Además de permitir un valor estático, el método extraImgAttributes()
también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.
Por defecto, llamar varias veces a extraImgAttributes()
sobrescribirá los atributos anteriores. Si deseas fusionar los atributos, puedes pasar merge: true
al método.