Computed values in Statamic entries
Statamic now officially support computed values so you don't need this.
Statamic allows you to alter entry values through the use of modifiers in your templates. However, if you’re applying the same modifications in multiple places or need a modified value outside of a template it can be useful to define this logic in the entry class itself.
You can add computed values to entries by creating a custom entry class and then binding it to Statamic’s entry contract, in a service providers boot method:
# app/Entries/CustomEntry.phpnamespace App\Entries;use Statamic\Statamic;use Statamic\Entries\Entry;class CustomEntry extends Entry{public function extract() // should be camelCase{return Statamic::modify($this->content)->strip_tags()->safe_truncate([300, '…']);}}
# app/Entries/CustomEntry.phpnamespace App\Entries;use Statamic\Statamic;use Statamic\Entries\Entry;class CustomEntry extends Entry{public function extract() // should be camelCase{return Statamic::modify($this->content)->strip_tags()->safe_truncate([300, '…']);}}
# app/Providers/AppServiceProvider.phpuse App\Entries\CustomEntry;$this->app->bind(\Statamic\Contracts\Entries\Entry::class,CustomEntry::class);
# app/Providers/AppServiceProvider.phpuse App\Entries\CustomEntry;$this->app->bind(\Statamic\Contracts\Entries\Entry::class,CustomEntry::class);
Once your custom entry class is set up you'll need to add a hidden field matching the method name to all the blueprints where you want the computed value to be available:
-handle: extract # should be snake_casefield:display: Extracttype: hidden
-handle: extract # should be snake_casefield:display: Extracttype: hidden
You’ll then be able to use {{ extract }}
or {{ entry:extract }}
in your templates to output the value returned by the method. In Blade you can use {{ $entry->extract }}
.