PHP code example of dewsign / nova-repeater-blocks
1. Go to this page and download the library: Download dewsign/nova-repeater-blocks library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
dewsign / nova-repeater-blocks example snippets
php artisan migrate
// app/Post.php
use Dewsign\NovaRepeaterBlocks\Traits\HasRepeaterBlocks;
class Post extends Model {
use HasRepeaterBlocks;
...
}
// app/Nova/PostRepeater.php
use App\Nova\RbText;
use Illuminate\Http\Request;
use Dewsign\NovaRepeaterBlocks\Fields\Repeater;
class PostRepeater extends Repeater
{
// One or more Nova Resources which use this Repeater
public static $morphTo = 'App\Nova\Post';
// What type of repeater blocks should be made available
public function types(Request $request)
{
return [
RbText::class,
RbImage::class,
];
}
}
// app/RbText.php
use Illuminate\Database\Eloquent\Model;
use Dewsign\NovaRepeaterBlocks\Traits\IsRepeaterBlock;
class RbText extends Model
{
use IsRepeaterBlock;
// Optional: To use a special template outside of the standard naming contention to render a block, define it here.
public static $repeaterBlockViewTemplate = 'any.blade.view';
}
// app/Nova/RbText.php
use Dewsign\NovaRepeaterBlocks\Traits\IsRepeaterBlockResource;
class RbText extends Resource
{
use IsRepeaterBlockResource;
public function fields(Request $request)
{
return [
Select::make('Format')->options([
'p' => 'Paragraph',
'h2' => 'Heading',
]),
Text::make('Text'),
];
}
...
}
// app/Nova/Post.php
class Post extends Resource
{
public function fields(Request $request)
{
return [
...
MorphMany::make(__('Repeaters'), 'repeaters', PostRepeater::class),
];
}
}
@repeaterblocks($model)
// Optionally wrap each repeater with before and after code.
@repeaterblocks($model, '<div>', '</div>')
// app/Nova/PostRepeater.php
public function fields(Request $request)
{
return array_merge([
Text::make('Format', function () {
return $this->type->format;
})->onlyOnIndex(),
], parent::fields($request))
}
// app/Repeaters/Common/Blocks/SampleRepeaterBlock.php
public function getExtraInfo()
{
return $this->template;
}
namespace App\Processors;
use Illuminate\Support\Facades\Storage;
use Dewsign\NovaRepeaterBlocks\Processors\ImageProcessor;
class DefaultImageProcessor extends ImageProcessor
{
public static function get(string $image, array $params = [])
{
// Process the image and perform any special tasks before returning the final Image URL.
return $myImageURL;
}
public static function delete(string $image)
{
// Handle the deletion of the image (e.g. from a remote filesystem)
}
}
class GridBlock extends Model
{
use IsRepeaterBlock;
use HasRepeaterBlocks;
public static $repeaterBlockViewTemplate = 'repeaters.grid';
public static function types()
{
return [
\App\Nova\GridBlockItem::class,
];
}
}
class GridBlockItem extends Model
{
use IsRepeaterBlock;
public static $repeaterBlockViewTemplate = 'repeaters.gridItem';
public static function sourceTypes()
{
return GridBlock::types();
}
}