Configuration Reference
All settings live in config/xgpagebuilder.php after publishing.
See DOCUMENTATION.md for the full setup guide.
Routes
'route_prefix' => env('PAGE_BUILDER_ROUTE_PREFIX', 'page-builder'),
'route_middleware' => ['web', 'auth:admin'],
'routes' => [
// Route names (used with route())
'preview' => env('PAGE_BUILDER_PREVIEW_ROUTE', 'page.show'), // "Preview" button
'back_to_pages' => env('PAGE_BUILDER_BACK_ROUTE', 'admin.pages.index'), // "Back" button (route name)
// Literal URL fallback — used when the route name above doesn't exist
'back_to_pages_url'=> '/admin/dynamic-page/all',
],
previewandback_to_pagesare Laravel route names (passed toroute()).back_to_pages_urlis a literal URL path used as a fallback if the named route doesn’t exist in your app.
Editor opens at: /{route_prefix}/edit/{pageId}
Models
'models' => [
'page' => \App\Models\Backend\Page::class,
'admin' => \App\Models\Backend\Admin::class,
],
Host App CSS & JS
// CSS loaded in editor canvas (scoped — won't affect editor UI)
'editor_frontend_css' => [
'assets/frontend/css/bootstrap.css',
'assets/frontend/css/theme.css',
],
// JS loaded in editor + needed on frontend for widget interactivity
'editor_frontend_js' => [
'assets/frontend/website/js/plugin.js',
],
// Optional: blade partial for CSS custom properties (--primary-color etc.)
'editor_css_variables_view' => null,
Media Upload
'media' => [
'upload_route' => 'admin.upload.media.file',
'library_route' => 'admin.upload.media.file.all',
'delete_route' => 'admin.upload.media.file.delete',
'base_path' => 'assets/uploads',
'allowed_types' => ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],
'max_size' => 5120, // KB
],
Custom Widgets
'custom_widgets' => [
\Plugins\PageBuilder\Widgets\MyWidget::class,
],
// Or auto-discover from a folder:
'widget_paths' => [
[
'path' => base_path('plugins/PageBuilder/Widgets'),
'namespace' => 'Plugins\\PageBuilder\\Widgets',
],
],
Database Tables
'tables' => [
'content' => 'page_builder_content',
'widgets' => 'page_builder_widgets',
'editing_sessions' => 'page_editing_sessions',
],
CSS Output
'css' => [
'minify' => env('PAGE_BUILDER_MINIFY_CSS', true),
'cache' => env('PAGE_BUILDER_CACHE_CSS', true),
'cache_ttl' => 3600,
],
Concurrent Editing
'editing_sessions' => [
'enabled' => true,
'timeout' => 300, // seconds until session auto-expires
'heartbeat_interval' => 30,
],
Demo Mode
'demo_mode' => env('PAGE_BUILDER_DEMO_MODE', false),
Set PAGE_BUILDER_DEMO_MODE=true in .env to block saves and show a read-only ribbon.
Legacy Addons
'enable_legacy_addons' => env('PAGE_BUILDER_LEGACY_ADDONS', false),
'legacy_addon_paths' => [base_path('plugins/PageBuilder/Addons')],
ExtractsFieldValues Trait
Use this trait in widgets to safely extract values from IMAGE and URL fields, which can return either a plain value (legacy) or a structured array (new format).
use Xgenious\PageBuilder\Core\Traits\ExtractsFieldValues;
class MyWidget extends BaseWidget
{
use ExtractsFieldValues;
public function render(array $settings = []): string
{
$data = $settings['general']['content'] ?? [];
$imageId = $this->extractImageId($data['image']); // numeric ID
$imageUrl = $this->extractImageUrl($data['image']); // URL string
$buttonUrl = $this->extractUrl($data['button_link']); // URL string
$target = $this->extractUrlTarget($data['button_link']); // '_blank' etc.
}
}
| Method | Returns |
|---|---|
extractImageId($value) | Numeric attachment ID |
extractImageUrl($value) | URL string |
extractImageAlt($value, $fallback) | Alt text string |
extractUrl($value) | URL string |
extractUrlTarget($value) | Link target (_blank, _self, …) |
extractRepeaterImageIds($items, $fieldName) | Array of IDs from a repeater |
.env Reference
PAGE_BUILDER_ROUTE_PREFIX=page-builder
PAGE_BUILDER_MINIFY_CSS=true
PAGE_BUILDER_CACHE_CSS=true
PAGE_BUILDER_LEGACY_ADDONS=false
PAGE_BUILDER_DEMO_MODE=false
PAGE_BUILDER_PREVIEW_ROUTE=page.show
PAGE_BUILDER_BACK_ROUTE=admin.pages.index