where('is_active', true)->get(); foreach ($allSettings as $setting) { $settings->{$setting->key} = $setting->value; } $search = trim((string) request('q', '')); $productionsQuery = MusicProduction::active()->ordered(); if ($search !== '') { $locale = app()->getLocale(); $productionsQuery->where(function ($query) use ($search, $locale) { $query->where('title', 'like', "%{$search}%") ->orWhere('client_name', 'like', "%{$search}%") ->orWhere('slug', 'like', "%{$search}%") ->orWhereHas('translations', function ($translationQuery) use ($search, $locale) { $translationQuery ->where('status', 'published') ->whereIn('field_name', ['title', 'client_name', 'content']) ->where('field_value', 'like', "%{$search}%") ->where('language_code', $locale); }); }); } $productions = $productionsQuery->paginate(9)->withQueryString(); // --- Footer Logic --- $renderedFooter = null; $defaultFooterId = $settings->default_footer ?? null; if ($defaultFooterId) { $footerTemplate = FooterTemplate::query()->find($defaultFooterId); if ($footerTemplate) { $templateDefaults = $footerTemplate->default_data ?? []; $mergedFooterData = array_merge($templateDefaults, []); $renderedFooter = TemplateService::replacePlaceholders( $footerTemplate->html_content, $mergedFooterData, null ); } } $meta = [ 'title' => __('music_productions.nav-music-productions'), 'description' => __('music_productions.meta-index-description'), 'image' => asset('assets/music-production.png'), ]; return view('front.music-productions.index', [ 'productions' => $productions, 'search' => $search, 'settings' => $settings, 'header' => 'partials.header-center-nav', 'renderedFooter' => $renderedFooter, 'meta' => $meta, ]); } public function show($slug) { $production = MusicProduction::active() ->where('slug', $slug) ->firstOrFail(); // Get Settings $settings = new \stdClass(); $allSettings = Setting::query()->where('is_active', true)->get(); foreach ($allSettings as $setting) { $settings->{$setting->key} = $setting->value; } // Fetch adjacent posts (Prev and Next) $prev = MusicProduction::active() ->where(function($q) use ($production) { $q->where('sort_order', '<', $production->sort_order) ->orWhere(function($sub) use ($production) { $sub->where('sort_order', $production->sort_order) ->where('id', '<', $production->id); }); }) ->orderBy('sort_order', 'desc') ->orderBy('id', 'desc') ->first(); $next = MusicProduction::active() ->where(function($q) use ($production) { $q->where('sort_order', '>', $production->sort_order) ->orWhere(function($sub) use ($production) { $sub->where('sort_order', $production->sort_order) ->where('id', '>', $production->id); }); }) ->orderBy('sort_order', 'asc') ->orderBy('id', 'asc') ->first(); // --- Footer Logic --- $renderedFooter = null; $defaultFooterId = $settings->default_footer ?? null; if ($defaultFooterId) { $footerTemplate = FooterTemplate::query()->find($defaultFooterId); if ($footerTemplate) { $templateDefaults = $footerTemplate->default_data ?? []; $mergedFooterData = array_merge($templateDefaults, []); $renderedFooter = TemplateService::replacePlaceholders( $footerTemplate->html_content, $mergedFooterData, $production ); } } $meta = [ 'title' => $production->translate('title'), 'description' => Str::limit(strip_tags($production->translate('content')), 160), 'image' => $production->cover_image_url, ]; return view('front.music-productions.show', [ 'production' => $production, 'prev' => $prev, 'next' => $next, 'settings' => $settings, 'header' => 'partials.header-center-nav', 'renderedFooter' => $renderedFooter, 'meta' => $meta, ]); } }