+ {{ method_exists($post, 'translate') ? $post->translate('title') : $post->title }} +
+{{ method_exists($post, 'translate') ? $post->translate('excerpt') : ($post->excerpt ?? '') }}
+diff --git a/app/Http/Controllers/BlogController.php b/app/Http/Controllers/BlogController.php
new file mode 100644
index 0000000..381d298
--- /dev/null
+++ b/app/Http/Controllers/BlogController.php
@@ -0,0 +1,47 @@
+first()) : null;
+ $posts = class_exists(Post::class)
+ ? Post::query()->where('status', 'published')->latest('published_at')->paginate(12)
+ : collect();
+
+ return view('blog.index', [
+ 'settings' => $settings,
+ 'posts' => $posts,
+ 'meta' => [
+ 'title' => __('blog.meta-index-title'),
+ 'description' => __('blog.meta-index-description'),
+ ],
+ ]);
+ }
+
+ public function show(string $slug)
+ {
+ $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null;
+ if (!class_exists(Post::class)) {
+ abort(404);
+ }
+ $post = Post::query()->where('slug', $slug)->where('status', 'published')->firstOrFail();
+
+ return view('blog.show', [
+ 'settings' => $settings,
+ 'post' => $post,
+ 'meta' => [
+ 'title' => method_exists($post, 'translate') ? ($post->translate('meta_title') ?: $post->translate('title')) : ($post->meta_title ?? $post->title),
+ 'description' => method_exists($post, 'translate') ? ($post->translate('meta_description') ?: $post->translate('excerpt')) : ($post->meta_description ?? $post->excerpt),
+ 'image' => $post->featured_image ?? null,
+ ],
+ ]);
+ }
+}
+
+
diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php
index 85ab2f7..d3095cb 100644
--- a/app/Http/Controllers/PageController.php
+++ b/app/Http/Controllers/PageController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\Page;
+use App\Models\Setting;
use Illuminate\Http\Request;
class PageController extends Controller
@@ -12,22 +13,63 @@ class PageController extends Controller
*/
public function index()
{
- // Homepage'i bul
+ // 1) is_homepage işaretli ve published
$page = Page::where('is_homepage', true)
->where('status', 'published')
->first();
+ // 2) yoksa 'home' slug'ı
if (!$page) {
- // Homepage yoksa, view'e boş geçelim
- return view('home', [
+ $page = Page::where('slug', 'home')
+ ->where('status', 'published')
+ ->first();
+ }
+
+ // 3) yoksa ilk published sayfa (fallback)
+ if (!$page) {
+ $page = Page::where('status', 'published')->orderByDesc('published_at')->first();
+ }
+
+ $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null;
+
+ // Hiç sayfa yoksa: direkt home template'inin statik fallback'i ile render et
+ if (!$page) {
+ return view('templates.home', [
'page' => null,
- 'menuItems' => $this->getMenuItems()
+ 'settings' => $settings,
+ 'meta' => [
+ 'title' => $settings->default_meta_title ?? config('app.name'),
+ 'description' => $settings->default_meta_description ?? null,
+ 'image' => $settings->default_meta_image ?? null,
+ ],
]);
}
- return view('home', [
+ $metaTitle = method_exists($page, 'translate')
+ ? ($page->translate('meta_title') ?: $page->translate('title'))
+ : ($page->meta_title ?? $page->title ?? null);
+
+ $metaDescription = method_exists($page, 'translate')
+ ? ($page->translate('meta_description') ?: ($page->excerpt ?? null))
+ : ($page->meta_description ?? $page->excerpt ?? null);
+
+ $sections = $page->sections ?? $page->data ?? [];
+ $template = ($page->slug === 'home' || ($page->is_homepage ?? false))
+ ? 'home'
+ : ($page->template ?? null);
+ $view = $template && view()->exists("templates.$template")
+ ? "templates.$template"
+ : (($page->slug === 'home' || ($page->is_homepage ?? false)) ? 'templates.home' : 'templates.generic');
+
+ return view($view, [
'page' => $page,
- 'menuItems' => $this->getMenuItems()
+ 'settings' => $settings,
+ 'sections' => $sections,
+ 'meta' => [
+ 'title' => $metaTitle ?: ($settings->default_meta_title ?? config('app.name')),
+ 'description' => $metaDescription ?: ($settings->default_meta_description ?? null),
+ 'image' => $settings->default_meta_image ?? null,
+ ],
]);
}
@@ -40,9 +82,31 @@ class PageController extends Controller
->where('status', 'published')
->firstOrFail();
- return view('page', [
+ $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null;
+
+ $metaTitle = method_exists($page, 'translate')
+ ? ($page->translate('meta_title') ?: $page->translate('title'))
+ : ($page->meta_title ?? $page->title ?? null);
+
+ $metaDescription = method_exists($page, 'translate')
+ ? ($page->translate('meta_description') ?: ($page->excerpt ?? null))
+ : ($page->meta_description ?? $page->excerpt ?? null);
+
+ $sections = $page->sections ?? $page->data ?? [];
+ $template = ($slug === 'home' || ($page->is_homepage ?? false))
+ ? 'home'
+ : ($page->template ?? 'generic');
+ $view = view()->exists("templates.$template") ? "templates.$template" : (($slug === 'home') ? 'templates.home' : 'templates.generic');
+
+ return view($view, [
'page' => $page,
- 'menuItems' => $this->getMenuItems()
+ 'settings' => $settings,
+ 'sections' => $sections,
+ 'meta' => [
+ 'title' => $metaTitle ?: ($settings->default_meta_title ?? config('app.name')),
+ 'description' => $metaDescription ?: ($settings->default_meta_description ?? null),
+ 'image' => $settings->default_meta_image ?? null,
+ ],
]);
}
diff --git a/lang/en/blog.php b/lang/en/blog.php
index 8d98641..48f3fef 100644
--- a/lang/en/blog.php
+++ b/lang/en/blog.php
@@ -1,6 +1,13 @@
'Blog',
+ 'meta-index-title' => 'Blog',
+ 'meta-index-description' => 'Latest posts',
+ 'empty' => 'No posts yet.',
+
+ // Module labels
'title' => 'Blog Posts',
'navigation_label' => 'Blog',
'model_label' => 'Blog Post',
diff --git a/lang/en/pages.php b/lang/en/pages.php
index d70fc7a..4b64983 100644
--- a/lang/en/pages.php
+++ b/lang/en/pages.php
@@ -1,6 +1,13 @@
'Home',
+ 'nav-about' => 'About',
+ 'nav-services' => 'Services',
+ 'nav-contact' => 'Contact',
+
+ // Module labels
'title' => 'Pages',
'navigation_label' => 'Pages',
'model_label' => 'Page',
@@ -13,15 +20,6 @@ return [
'restore' => 'Restore Page',
'force_delete' => 'Force Delete',
- // Form fields
- 'title_field' => 'Title',
- 'slug_field' => 'URL Slug',
- 'content_field' => 'Content',
- 'meta_title_field' => 'Meta Title',
- 'meta_description_field' => 'Meta Description',
- 'status_field' => 'Status',
- 'published_at_field' => 'Published At',
-
// Form sections
'form_section_content' => 'Content',
'form_section_page_settings' => 'Page Settings',
diff --git a/lang/tr/blog.php b/lang/tr/blog.php
index a16d84f..eb88c1c 100644
--- a/lang/tr/blog.php
+++ b/lang/tr/blog.php
@@ -1,6 +1,13 @@
'Blog',
+ 'meta-index-title' => 'Blog',
+ 'meta-index-description' => 'Güncel paylaşımlarımız',
+ 'empty' => 'Şu anda blog yazısı bulunmuyor.',
+
+ // Module labels
'title' => 'Blog Yazıları',
'navigation_label' => 'Blog',
'model_label' => 'Blog Yazısı',
diff --git a/lang/tr/pages.php b/lang/tr/pages.php
index 2b020aa..aaba588 100644
--- a/lang/tr/pages.php
+++ b/lang/tr/pages.php
@@ -1,6 +1,13 @@
'Anasayfa',
+ 'nav-about' => 'Hakkımızda',
+ 'nav-services' => 'Hizmetler',
+ 'nav-contact' => 'İletişim',
+
+ // Module labels
'title' => 'Sayfalar',
'navigation_label' => 'Sayfalar',
'model_label' => 'Sayfa',
@@ -13,15 +20,6 @@ return [
'restore' => 'Sayfayı Geri Yükle',
'force_delete' => 'Kalıcı Olarak Sil',
- // Form fields
- 'title_field' => 'Başlık',
- 'slug_field' => 'URL Yolu',
- 'content_field' => 'İçerik',
- 'meta_title_field' => 'Meta Başlık',
- 'meta_description_field' => 'Meta Açıklama',
- 'status_field' => 'Durum',
- 'published_at_field' => 'Yayın Tarihi',
-
// Form sections
'form_section_content' => 'İçerik',
'form_section_page_settings' => 'Sayfa Ayarları',
@@ -30,7 +28,7 @@ return [
// Form fields
'title_field' => 'Başlık',
- 'slug_field' => 'URL Slug',
+ 'slug_field' => 'URL Yolu',
'content_field' => 'İçerik',
'excerpt_field' => 'Özet',
'featured_image_field' => 'Öne Çıkan Görsel',
diff --git a/resources/views/blog/index.blade.php b/resources/views/blog/index.blade.php
new file mode 100644
index 0000000..62bbd61
--- /dev/null
+++ b/resources/views/blog/index.blade.php
@@ -0,0 +1,31 @@
+@extends('layouts.site')
+
+@section('content')
+ {{ method_exists($post, 'translate') ? $post->translate('excerpt') : ($post->excerpt ?? '') }} {{ __('blog.empty') }}
+ {{ $data['subtitle'] }}
+ {{ $data['section_subtitle'] }} {{ $feature['description'] }} {{ $data['section_subtitle'] }} {{ $item['description'] }} {{ $data['subtitle'] }} {{ $data['section_subtitle'] }} {{ $stat['label'] }} {{ $data['section_subtitle'] }} "{{ $testimonial['quote'] }}" {{ $testimonial['position'] }}
+
+ @endif
+
+ {{ method_exists($post, 'translate') ? $post->translate('title') : $post->title }}
+
+ {{ method_exists($post, 'translate') ? $post->translate('title') : $post->title }}
+ @if(!empty($post->featured_image))
+
+ @endif
+
+
+
+ {!! $data['title'] !!}
+
+ @endif
+
+ @if(!empty($data['subtitle']))
+
+
{{ $data['section_badge'] }}
+ @endif
+
+ @if(!empty($data['section_title']))
+
+ {{ $data['section_title'] }}
+
+ @endif
+
+ @if(!empty($data['section_subtitle']))
+
+
{{ $feature['title'] }}
+ @endif
+ @if(!empty($feature['description']))
+ {{ $data['section_badge'] }}
+ @endif
+
+ @if(!empty($data['section_title']))
+
+ {{ $data['section_title'] }}
+
+ @endif
+
+ @if(!empty($data['section_subtitle']))
+
+
+
+ {{ $item['title'] }}
+
+ @endif
+ @if(!empty($item['description']))
+
+
{{ $data['badge'] }}
+ @endif
+
+ @if(!empty($data['title']))
+
+ {!! $data['title'] !!}
+
+ @endif
+
+ @if(!empty($data['subtitle']))
+
+
{{ $data['section_badge'] }}
+ @endif
+
+ @if(!empty($data['section_title']))
+
+ {{ $data['section_title'] }}
+
+ @endif
+
+ @if(!empty($data['section_subtitle']))
+ {{ $plan['name'] }}
+ @endif
+
+
+ @foreach($plan['features'] as $feature)
+
+ @endif
+
+ @if(!empty($plan['button_text']))
+
+ {{ $plan['button_text'] }}
+
+ @endif
+
+ @endif
+
+ @if(!empty($stat['number']))
+
+ {{ $stat['number'] }}
+
+ @endif
+
+ @if(!empty($stat['label']))
+ {{ $data['section_badge'] }}
+ @endif
+
+ @if(!empty($data['section_title']))
+
+ {{ $data['section_title'] }}
+
+ @endif
+
+ @if(!empty($data['section_subtitle']))
+
+
+ @endif
+
+
+ @endif
+
{{ $testimonial['name'] }}
+ @endif
+ @if(!empty($testimonial['position']))
+
{{ data_get($page->data ?? [], 'hero_subtitle') }}
+ @if($img = data_get($page->data ?? [], 'hero_image')) +{{ $item['text'] ?? '' }}
+