pageSettings($page); $revisions = Revision::where('page_id', $page->id)->latest()->get(); $templates = Template::whereNotNull('title')->orderBy('created_at', 'desc')->get(); $blocks = []; return view('larabuilder::pagebuilder', compact('grid_templates', 'components', 'blocks', 'page', 'componentTabs', 'revisions', 'templates')); } /** * @return array[] */ public function pageSettings($page): array { if (! $page) { abort(404); } $grid_templates = []; foreach (getGrids() as $grid) { $columns = getColumnInfo($grid); $grid_templates[$grid] = view('larabuilder::components.add-grid-placeholder', compact('columns', 'grid'))->render(); } $components = $componentDirectories = $templates = $componentTabs = []; if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets'))) { $componentDirectories = array_diff(scandir(module_path('LaraBuilder', 'Resources/views/widgets')), ['..', '.']); } foreach ($componentDirectories as $directory) { if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'))) { $currentSettings = include module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'); if (! empty($currentSettings['id']) && $directory == $currentSettings['id']) { setCurrentDirectory($currentSettings['id']); $components[$currentSettings['id']] = [ 'directory' => $directory, 'settings' => $currentSettings, 'template' => view()->exists('larabuilder::widgets.'.$directory.'.view') ? view('larabuilder::widgets.'.$directory.'.view')->render() : view('larabuilder::components.no-view')->render(), ]; $componentTabs[$currentSettings['tab']][$currentSettings['id']] = $currentSettings['id']; } } } setCurrentPageId($page->id); return [$grid_templates, $componentTabs, $components]; } public function iframe($pageId, Request $request) { $page = PageSettings::getPage($pageId); $edit = true; [$grid_templates, $componentTabs, $components] = $this->pageSettings($page); return view('larabuilder::pagebuilder-iframe', compact('grid_templates', 'components', 'page', 'componentTabs', 'edit')); } public function renderPage($pageSlug) { $page = Page::select('id', 'name', 'title', 'description', 'slug', 'settings', 'status') ->whereSlug(str_replace('larabuilder/', '', $pageSlug)) ->when(empty(request()->get('preview')), function ($q) { return $q->whereStatus('published'); }) ->firstOrFail(); $pageSections = view('larabuilder::components.page-components', compact('page')); setCurrentPageId($page->id); return view('larabuilder::page', compact('page', 'pageSections')); } public function getSettings(Request $request) { $pageId = $request->input('page_id'); $directory = $request->input('directory'); $sectionId = $request->input('id'); $gridId = $request->input('grid_id'); if (file_exists(module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'))) { $settings = include module_path('LaraBuilder', 'Resources/views/widgets/'.$directory.'/settings.php'); } if (! empty($settings['fields'])) { $settingsHtml = $this->getPageSectionSettings($pageId, $sectionId, $settings['fields']); } $styles = $this->getSectionStyles($pageId, $gridId); $json = ['type' => 'success', 'section_data' => PageSettings::getPageSettings($pageId) ?? [], 'settings' => $settingsHtml ?? '', 'styles' => $styles]; return response(json_encode($json), 200); } public function getPageSectionSettings($pageId, $sectionId, $fields) { $html = $db_value = ''; if (is_array($fields) && ! empty($fields)) { $tab_key = ! empty($params['tab_key']) ? $params['tab_key'] : ''; $html = '