diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index a7d2246..925ed94 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -384,37 +384,49 @@ class TemplateService // Replace each placeholder foreach ($placeholders as $placeholder) { - // Try to find the value in data with various key formats - $value = null; + // Extract type from placeholder + $parts = explode('.', $placeholder); + $type = $parts[0] ?? null; + $field = $parts[1] ?? null; - // 1. Try exact match (text.title) - if (isset($data[$placeholder])) { - $value = $data[$placeholder]; - } - // 2. Try with section_data prefix (section_data.text.title) - elseif (isset($data["section_data.{$placeholder}"])) { - $value = $data["section_data.{$placeholder}"]; - } - // 3. Try nested array access (data['section_data']['text.title'] or data['text']['title']) - else { - $parts = explode('.', $placeholder); - if (count($parts) === 2) { - [$type, $field] = $parts; - // Try nested: data['section_data'][$type][$field] - if (isset($data['section_data'][$type][$field])) { - $value = $data['section_data'][$type][$field]; - } - // Try nested: data[$type][$field] - elseif (isset($data[$type][$field])) { - $value = $data[$type][$field]; + // Handle setting.* placeholders - get value from Setting model + if ($type === 'setting' && $field) { + $value = setting($field, ''); + + // Get setting type to determine if it's a file/image + $settingModel = \App\Models\Setting::where('key', $field)->where('is_active', true)->first(); + if ($settingModel && in_array($settingModel->type, ['file', 'image'])) { + // For file/image settings, use file type for formatting + $type = 'file'; + } + } else { + // Try to find the value in data with various key formats + $value = null; + + // 1. Try exact match (text.title) + if (isset($data[$placeholder])) { + $value = $data[$placeholder]; + } + // 2. Try with section_data prefix (section_data.text.title) + elseif (isset($data["section_data.{$placeholder}"])) { + $value = $data["section_data.{$placeholder}"]; + } + // 3. Try nested array access (data['section_data']['text.title'] or data['text']['title']) + else { + if (count($parts) === 2) { + [$type, $field] = $parts; + // Try nested: data['section_data'][$type][$field] + if (isset($data['section_data'][$type][$field])) { + $value = $data['section_data'][$type][$field]; + } + // Try nested: data[$type][$field] + elseif (isset($data[$type][$field])) { + $value = $data[$type][$field]; + } } } } - // Extract type from placeholder to determine if it's a file/image - $parts = explode('.', $placeholder); - $type = $parts[0] ?? null; - // Handle different value types if (is_array($value)) { // Handle arrays (e.g., multiple images) diff --git a/lang/en/placeholder-picker.php b/lang/en/placeholder-picker.php index 48b4085..650ba73 100644 --- a/lang/en/placeholder-picker.php +++ b/lang/en/placeholder-picker.php @@ -32,6 +32,7 @@ return [ 'type_toggle' => 'Toggle', 'type_color' => 'Color', 'type_tags' => 'Tags', + 'type_setting' => 'Setting', 'type_custom' => 'Custom', ]; diff --git a/lang/tr/placeholder-picker.php b/lang/tr/placeholder-picker.php index a3085ab..15b0f58 100644 --- a/lang/tr/placeholder-picker.php +++ b/lang/tr/placeholder-picker.php @@ -32,6 +32,7 @@ return [ 'type_toggle' => 'Aç/Kapa', 'type_color' => 'Renk', 'type_tags' => 'Etiketler', + 'type_setting' => 'Ayar', 'type_custom' => 'Özel', ]; diff --git a/resources/views/components/placeholder-picker.blade.php b/resources/views/components/placeholder-picker.blade.php index ba1b94f..ec55381 100644 --- a/resources/views/components/placeholder-picker.blade.php +++ b/resources/views/components/placeholder-picker.blade.php @@ -1,7 +1,20 @@ @php + // Setting key'lerini veritabanından al (aktif ve public olanlar) + $settingKeys = \App\Models\Setting::where('is_active', true) + ->where('is_public', true) + ->orderBy('key') + ->pluck('key') + ->toArray(); + + // Eğer setting yoksa, yaygın örnekleri kullan + if (empty($settingKeys)) { + $settingKeys = ['site_name', 'site_description', 'contact_email', 'contact_phone', 'site_url', 'copyright_text', 'seo_meta_title', 'seo_meta_description']; + } + // Desteklenen placeholder tipleri ve açıklamaları $placeholderTypes = [ 'special' => ['label' => __('placeholder-picker.special_placeholders'), 'examples' => ['page.content', 'page.title', 'page.excerpt', 'menu', 'staticMenu']], + 'setting' => ['label' => __('placeholder-picker.type_setting'), 'examples' => array_slice($settingKeys, 0, 15)], // İlk 15 setting'i göster 'text' => ['label' => __('placeholder-picker.type_text'), 'examples' => ['company_name', 'title', 'description', 'subtitle']], 'email' => ['label' => __('placeholder-picker.type_email'), 'examples' => ['contact', 'support', 'info', 'sales']], 'url' => ['label' => __('placeholder-picker.type_url'), 'examples' => ['website', 'facebook', 'twitter', 'linkedin']], diff --git a/resources/views/layouts/site.blade.php b/resources/views/layouts/site.blade.php index 71d1ba0..27f5594 100644 --- a/resources/views/layouts/site.blade.php +++ b/resources/views/layouts/site.blade.php @@ -1,3 +1,7 @@ + @@ -5,15 +9,17 @@ {{ setting('seo_meta_title') }} - {{ $meta['title'] ?? ($settings->default_meta_title ?? config('app.name')) }} - - + + - +