90 lines
2.7 KiB
PHP
90 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace Paymenter\Extensions\Others\ProductPageBuilder;
|
|
|
|
use App\Classes\Extension\Extension;
|
|
use Filament\Facades\Filament;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\Facades\View;
|
|
use Paymenter\Extensions\Others\ProductPageBuilder\Models\ProductPageSettings;
|
|
|
|
class ProductPageBuilder extends Extension
|
|
{
|
|
public function getConfig($values = [])
|
|
{
|
|
return [
|
|
[
|
|
'name' => '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);
|
|
}
|
|
}
|