@weart

Laraberg + ServerSideRender как вывести view на фронте?

Привет всем) Продолжаю пытаться довести до ума работу с редактором Laraberg

Возможно, кто-то уже сталкивался с этой проблемой и решил ее.

Вчера запилил кастомный блок

const ServerSideRender = Laraberg.wordpress.serverSideRender;
import {blockDefault} from '@wordpress/icons';
import {Fragment} from "react";

const testBlock = {
    title: 'Test',
    icon: blockDefault,
    category: 'common',

    edit() {
        return (
            <Fragment>
                <ServerSideRender block='ay/test'/>
            </Fragment>
        )
    },

    save() {
        return null;
    }
}

Laraberg.registerBlockType('ay/test', testBlock)


Собственно, провайдер для этого дела

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use VanOns\Laraberg\Laraberg;

class BlockServiceProvider extends ServiceProvider
{

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        Laraberg::registerBlockType(
            'ay/test',
            [],
            function ($attributes, $content) {
                return view('blocks.test', compact('attributes', 'content'));
            }
        );
    }
}


В самом редакторе все отлично отображается:

203424318-1192a3b5-82c3-425e-9ca5-24b26e6cb2f2.png

А вот на фронте рендера view не происходит. Там обычный стандартный php без js. Я не совсем догоняю, куда копать

203424393-6bce975a-8c59-43f2-9645-f1fda12fe098.png
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@weart Автор вопроса
Короче, я покопался в лараберге. Решение:

namespace App\Http\Controllers;

use App\Models\Page;
use VanOns\Laraberg\Blocks\BlockParser;

class HomeController extends Controller
{
    //
    public function index(BlockParser $parser)
    {
        $page = Page::where('slug', 'home')->firstOrFail();
        $blocks = $parser->parse($page->content);
        $output = '';
        foreach ($blocks as $block) {
            $output .= $block->render();
        }
        $page->content = $output;
        return view('home', ['page' => $page]);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы