get(); foreach ($allSettings as $setting) { $settings->{$setting->key} = $setting->value; } // Get active music productions $productions = MusicProduction::active() ->ordered() ->paginate(9); // Using 9 for nice grid layout (3 per row) // --- Header Logic --- $renderedHeader = null; $defaultHeaderId = $settings->default_header ?? null; if ($defaultHeaderId) { $headerTemplate = HeaderTemplate::find($defaultHeaderId); if ($headerTemplate) { $templateDefaults = $headerTemplate->default_data ?? []; $mergedHeaderData = array_merge($templateDefaults, []); $renderedHeader = TemplateService::replacePlaceholders( $headerTemplate->html_content, $mergedHeaderData, null ); } } // --- Footer Logic --- $renderedFooter = null; $defaultFooterId = $settings->default_footer ?? null; if ($defaultFooterId) { $footerTemplate = FooterTemplate::find($defaultFooterId); if ($footerTemplate) { $templateDefaults = $footerTemplate->default_data ?? []; $mergedFooterData = array_merge($templateDefaults, []); $renderedFooter = TemplateService::replacePlaceholders( $footerTemplate->html_content, $mergedFooterData, null ); } } $meta = [ 'title' => __('music_productions.meta-index-title'), 'description' => __('music_productions.meta-index-description'), 'image' => null, ]; return view('front.music-productions.index', compact('productions', 'settings', 'renderedHeader', 'renderedFooter', 'meta')); } public function show($slug) { $production = MusicProduction::active() ->where('slug', $slug) ->firstOrFail(); // Get Settings $settings = new \stdClass(); $allSettings = Setting::where('is_active', '=', true, 'and')->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(); // --- Header Logic --- $renderedHeader = null; $defaultHeaderId = $settings->default_header ?? null; if ($defaultHeaderId) { $headerTemplate = HeaderTemplate::find($defaultHeaderId); if ($headerTemplate) { $templateDefaults = $headerTemplate->default_data ?? []; $mergedHeaderData = array_merge($templateDefaults, []); $renderedHeader = TemplateService::replacePlaceholders( $headerTemplate->html_content, $mergedHeaderData, $production ); } } // --- Footer Logic --- $renderedFooter = null; $defaultFooterId = $settings->default_footer ?? null; if ($defaultFooterId) { $footerTemplate = FooterTemplate::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', compact('production', 'prev', 'next', 'settings', 'renderedHeader', 'renderedFooter', 'meta')); } }