# سیستم مدیریت عنوان صفحات (Title Management System)

## 📁 ساختار فایل‌ها

```
app/
├── Services/
│   └── TitleService.php          # کلاس اصلی مدیریت عنوان
├── Http/Controllers/
│   └── TestTitleController.php   # کنترلر نمونه برای تست
└── Helpers/
    └── helpers.php               # توابع کمکی

config/
└── title.php                    # فایل تنظیمات

resources/views/
├── header/
│   ├── title.blade.php          # قالب تولید عنوان
│   └── README.md                # مستندات
└── test-title.blade.php         # صفحه تست
```

## 🚀 نحوه استفاده

### 1. استفاده از @section در Blade (پیشنهادی)

```blade
@extends('layouts.panel')

@section('title', 'عنوان صفحه')
@section('content')
    <!-- محتوای صفحه -->
@endsection
```

### 2. استفاده از Helper Function

```blade
@php
    set_page_title('عنوان صفحه');
@endphp
@extends('layouts.panel')
```

### 3. استفاده در Controller

```php
use App\Services\TitleService;

class ProductController extends Controller
{
    public function index(TitleService $titleService)
    {
        $pageTitle = $titleService->forPage('products');
        return view('admin.products.index', compact('pageTitle'));
    }
}
```

### 4. استفاده مستقیم از Service

```php
$titleService = app(\App\Services\TitleService::class);
$title = $titleService->generate('عنوان سفارشی');
```

## ⚙️ تنظیمات

### تغییر تنظیمات در `config/title.php`

```php
return [
    'default_title' => 'عنوان پیش‌فرض جدید',
    'app_name' => 'نام اپلیکیشن جدید',
    'separator' => ' | ',
    
    'page_titles' => [
        'custom-page' => 'عنوان صفحه سفارشی',
        // ...
    ],
];
```

## 🎯 متدهای موجود در TitleService

### `generate($pageTitle, $customAppName)`
تولید عنوان کامل با عنوان صفحه و نام اپلیکیشن سفارشی

### `forPage($page, $customTitle)`
تولید عنوان برای صفحه خاص با استفاده از عنوان‌های از پیش تعریف شده

### `withTemplate($template, $pageTitle, $customAppName)`
تولید عنوان با استفاده از قالب خاص

### `withEnvironmentSuffix($title)`
اضافه کردن پسوند محیط (DEV, TEST, etc.)

## 📋 عنوان‌های از پیش تعریف شده

| کلید | عنوان |
|------|-------|
| `dashboard` | داشبورد مدیریت |
| `products` | مدیریت محصولات |
| `suppliers` | مدیریت تامین‌کنندگان |
| `purchase-requests` | درخواست‌های خرید |
| `price-inquiry` | استعلام قیمت |
| `accounting` | حسابداری |
| `inventory` | مدیریت انبار |
| `reports` | گزارشات |
| `settings` | تنظیمات |
| `profile` | پروفایل کاربری |
| `login` | ورود به سیستم |
| `register` | ثبت نام |

## 🎨 قالب‌های موجود

| قالب | نتیجه |
|------|-------|
| `default` | `عنوان صفحه - نام اپلیکیشن` |
| `simple` | `عنوان صفحه` |
| `app_first` | `نام اپلیکیشن - عنوان صفحه` |
| `with_version` | `عنوان صفحه - نام اپلیکیشن v1.0` |

## 🔧 مثال‌های کاربردی

### در Controller
```php
public function index()
{
    $titleService = app(\App\Services\TitleService::class);
    
    // استفاده از عنوان پیش‌فرض
    $title1 = $titleService->generate();
    
    // استفاده از عنوان سفارشی
    $title2 = $titleService->generate('صفحه سفارشی');
    
    // استفاده از عنوان از پیش تعریف شده
    $title3 = $titleService->forPage('products');
    
    // استفاده از قالب خاص
    $title4 = $titleService->withTemplate('simple', 'صفحه ساده');
    
    return view('test', compact('title1', 'title2', 'title3', 'title4'));
}
```

### در Blade Template
```blade
@php
    $titleService = app(\App\Services\TitleService::class);
    $pageTitle = $titleService->forPage('dashboard');
@endphp

<title>{{ $pageTitle }}</title>
```

## 🌐 Route های تست

- `/test-title` - صفحه تست اصلی
- `/test-title/default` - تست عنوان پیش‌فرض
- `/test-title/custom` - تست عنوان سفارشی
- `/test-title/predefined` - تست عنوان از پیش تعریف شده
- `/test-title/all` - نمایش تمام عنوان‌ها

## ✅ مزایای این سیستم

1. **مدیریت متمرکز**: تمام تنظیمات در یک مکان
2. **قابلیت توسعه**: آسان برای اضافه کردن ویژگی‌های جدید
3. **سازگاری با MVC**: پیروی از اصول معماری Laravel
4. **قابلیت استفاده مجدد**: قابل استفاده در تمام صفحات
5. **انعطاف‌پذیری**: امکان تنظیم عنوان‌های مختلف
6. **پشتیبانی از محیط‌های مختلف**: DEV, PROD, TEST
7. **قالب‌های متنوع**: امکان استفاده از قالب‌های مختلف

## 🔄 به‌روزرسانی و نگهداری

برای تغییر عنوان‌ها یا اضافه کردن عنوان‌های جدید:

1. فایل `config/title.php` را ویرایش کنید
2. در صورت نیاز، متدهای جدید به `TitleService` اضافه کنید
3. Helper functions را در `app/Helpers/helpers.php` به‌روزرسانی کنید

## 📞 پشتیبانی

برای سوالات یا پیشنهادات، با تیم توسعه تماس بگیرید.
