'notice', 'type' => 'placeholder', 'label' => 'Use this extension to customize your product pages with custom sections.', ], ]; } public function enabled() { Artisan::call('migrate', [ '--path' => 'extensions/Others/ProductPageBuilder/database/migrations', '--force' => true, ]); } public function boot() { // Add category_id column if it doesn't exist if (!$this->columnExists('ext_product_page_builder', 'category_id')) { DB::statement('ALTER TABLE ext_product_page_builder ADD COLUMN category_id bigint unsigned NULL'); DB::statement('ALTER TABLE ext_product_page_builder ADD CONSTRAINT product_page_builder_category_id_foreign FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL'); } // Register views View::addNamespace('product_page_builder', __DIR__ . '/resources/views'); // Register routes Route::middleware('web')->group(__DIR__ . '/routes/web.php'); // Register Filament resources if (class_exists('\Filament\Facades\Filament')) { Filament::registerResources([ Admin\Resources\ProductPageResource::class, ]); } Event::listen('product.page', function ($product) { $settings = ProductPageSettings::first(); if (!$settings) { return []; } return [ 'view' => view('product_page_builder::product', [ 'settings' => $settings, 'product' => $product, ]), ]; }); Event::listen('navigation', function () { if (ProductPageSettings::count() == 0) { return; } return [ 'name' => 'Games', 'route' => 'product-page.index', // 'icon' => '', 'separator' => true, 'children' => [], ]; }); } private function columnExists($table, $column) { return DB::getSchemaBuilder()->hasColumn($table, $column); } }