Is there a way to display the first 25 chars of a Laravel\Nova\Fields\Textarea on the index of a Resource?
Asked
Active
Viewed 8,279 times
5 Answers
13
Just to expand on the answers above, here's the function I'm using that only uses the ellipsis when it cuts something off:
Text::make('Description')->rules('max:255')->displayUsing(function ($text) {
if (strlen($text) > 30) {
return substr($text, 0, 30) . '...';
}
return $text;
})

Citizen
- 12,430
- 26
- 76
- 117
-
8I would suggest using **return Str::limit($text, 30);** instead of the **if**. – ndee Aug 28 '19 at 13:15
-
The comment from @ndee about using the Laravel `Str` helper is correct, it saves using that entire if block. – Eugene van der Merwe Aug 01 '22 at 05:56
12
We had the same problem and we solved it like this
Text::make('Text *', 'text')
->rules('required')
->hideFromIndex(),
Text::make('Text','text')
->displayUsing(function($id) {
$part = strip_tags(substr($id, 0, 25));
return $part . " ...";
})->onlyOnIndex(),
hope this helps.

Macolson
- 121
- 2
2
Yes, it is possible.
Starting from Nova v2, you can add ->showOnIndex(true)
to the Textarea
field, and then use the ->displayUsing()
to extract a part of your text.
Textarea::make('Description')
->showOnIndex(true)
->displayUsing(function($description) {
return strip_tags(substr($description, 0, 50));
})

Kirill Timofejev
- 86
- 1
- 4
1
I have created a nova package called ellipsis-textarea for fun, which you can use.
Install - composer require saumini/ellipsis-textarea
Usage -
use Saumini\EllipsisTextarea\EllipsisTextarea;
public function fields(Request $request)
{
return [
EllipsisTextarea::make('Copy')
->displayLength(25),
];
}

Saumini Navaratnam
- 8,439
- 3
- 42
- 70
0
Here are two different ways I ended up accomplishing this without adding additional composer requirements using Macolson and ndee's answers:
use Illuminate\Support\Str;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\BelongsTo;
public function fields(Request $request)
{
return [
ID::make(__('ID'), 'id')->sortable(),
Text::make('Label')
->sortable()
->rules('required', 'max:255')
->displayUsing(function($text) {
return Str::limit($text, 30);}),
BelongsTo::make('Survey Field', 'field', \App\Nova\SurveyField::class)
// ->hideFromIndex()
->rules('required')
->displayUsing(function($object) {
$text = $object->title;
return Str::limit($text, 30);}),
];
}

Ryan M
- 139
- 3
- 10