12-05-2026 Frontend dev
This commit is contained in:
parent
405df0a122
commit
5b8bdf4182
779 changed files with 480564 additions and 6241 deletions
353
_docs/CATEGORY_SERVICE_DOCUMENTATION.md
Normal file
353
_docs/CATEGORY_SERVICE_DOCUMENTATION.md
Normal file
|
|
@ -0,0 +1,353 @@
|
|||
# CategoryService Dokumentation
|
||||
|
||||
Der `CategoryService` ist eine zentrale Service-Klasse für die Verwaltung aller Kategorien in der Anwendung.
|
||||
|
||||
## 📁 Pfad
|
||||
```
|
||||
app/Services/CategoryService.php
|
||||
```
|
||||
|
||||
## 🎯 Zweck
|
||||
|
||||
Der CategoryService bietet eine zentrale Stelle für:
|
||||
- Kategorie-Definitionen (Name, Slug, Icon, Farbe, etc.)
|
||||
- Farb-Mappings und Gradients
|
||||
- Icon-Pfade für Heroicons
|
||||
- Helper-Methoden für Kategorie-Zugriff
|
||||
|
||||
## 📖 Verfügbare Methoden
|
||||
|
||||
### 1. `getCategories()`
|
||||
Gibt alle verfügbaren Kategorien zurück.
|
||||
|
||||
```php
|
||||
use App\Services\CategoryService;
|
||||
|
||||
$categories = CategoryService::getCategories();
|
||||
// Returns: Array mit allen Kategorien
|
||||
```
|
||||
|
||||
**Rückgabe-Struktur:**
|
||||
```php
|
||||
[
|
||||
[
|
||||
'name' => 'Wirtschaft',
|
||||
'slug' => 'wirtschaft',
|
||||
'description' => 'Unternehmensnachrichten, Finanzberichte, Wirtschaftstrends',
|
||||
'count' => '2.450+',
|
||||
'icon' => 'chart-bar',
|
||||
'color' => 'blue',
|
||||
],
|
||||
// ... weitere Kategorien
|
||||
]
|
||||
```
|
||||
|
||||
### 2. `getCategoryBySlug(string $slug)`
|
||||
Findet eine Kategorie anhand ihres Slugs.
|
||||
|
||||
```php
|
||||
$category = CategoryService::getCategoryBySlug('wirtschaft');
|
||||
// Returns: Array mit Kategorie-Daten oder null
|
||||
```
|
||||
|
||||
### 3. `getCategorySlugs()`
|
||||
Gibt alle Kategorie-Slugs als Array zurück.
|
||||
|
||||
```php
|
||||
$slugs = CategoryService::getCategorySlugs();
|
||||
// Returns: ['wirtschaft', 'technologie', 'gesundheit', ...]
|
||||
```
|
||||
|
||||
### 4. `getColorGradients()`
|
||||
Gibt alle Farb-Gradient-Mappings zurück.
|
||||
|
||||
```php
|
||||
$gradients = CategoryService::getColorGradients();
|
||||
// Returns: ['blue' => 'from-blue-500/10 to-blue-600/10', ...]
|
||||
```
|
||||
|
||||
### 5. `getColorClasses()`
|
||||
Gibt alle Farb-CSS-Klassen zurück.
|
||||
|
||||
```php
|
||||
$classes = CategoryService::getColorClasses();
|
||||
// Returns: ['blue' => 'text-blue-500', ...]
|
||||
```
|
||||
|
||||
### 6. `getGradientForColor(string $color)`
|
||||
Gibt den Gradient für eine bestimmte Farbe zurück.
|
||||
|
||||
```php
|
||||
$gradient = CategoryService::getGradientForColor('blue');
|
||||
// Returns: 'from-blue-500/10 to-blue-600/10'
|
||||
```
|
||||
|
||||
### 7. `getClassForColor(string $color)`
|
||||
Gibt die CSS-Klasse für eine bestimmte Farbe zurück.
|
||||
|
||||
```php
|
||||
$class = CategoryService::getClassForColor('blue');
|
||||
// Returns: 'text-blue-500'
|
||||
```
|
||||
|
||||
### 8. `getIconPath(string $iconName)`
|
||||
Generiert den Pfad zu einem Heroicon.
|
||||
|
||||
```php
|
||||
$path = CategoryService::getIconPath('chart-bar');
|
||||
// Returns: '/heroicons/optimized/24/outline/chart-bar.svg'
|
||||
```
|
||||
|
||||
### 9. `count()`
|
||||
Gibt die Gesamtanzahl der Kategorien zurück.
|
||||
|
||||
```php
|
||||
$total = CategoryService::count();
|
||||
// Returns: 12
|
||||
```
|
||||
|
||||
## 🔧 Verwendungsbeispiele
|
||||
|
||||
### Beispiel 1: Kategorien in Blade anzeigen
|
||||
|
||||
```blade
|
||||
@php
|
||||
use App\Services\CategoryService;
|
||||
$categories = CategoryService::getCategories();
|
||||
@endphp
|
||||
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
@foreach($categories as $category)
|
||||
<a href="/kategorie/{{ $category['slug'] }}">
|
||||
<div class="category-card">
|
||||
<img src="{{ CategoryService::getIconPath($category['icon']) }}"
|
||||
alt="{{ $category['name'] }}">
|
||||
<h3>{{ $category['name'] }}</h3>
|
||||
<p>{{ $category['description'] }}</p>
|
||||
</div>
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
```
|
||||
|
||||
### Beispiel 2: Kategorie in Controller verwenden
|
||||
|
||||
```php
|
||||
use App\Services\CategoryService;
|
||||
|
||||
class CategoryController extends Controller
|
||||
{
|
||||
public function show(string $slug)
|
||||
{
|
||||
$category = CategoryService::getCategoryBySlug($slug);
|
||||
|
||||
if (!$category) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return view('kategorie', [
|
||||
'category' => $category,
|
||||
'allCategories' => CategoryService::getCategories(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Beispiel 3: Kategorie-Navigation
|
||||
|
||||
```blade
|
||||
@php
|
||||
use App\Services\CategoryService;
|
||||
$categories = CategoryService::getCategories();
|
||||
@endphp
|
||||
|
||||
<nav class="category-nav">
|
||||
@foreach($categories as $category)
|
||||
<a href="/kategorie/{{ $category['slug'] }}"
|
||||
class="nav-item {{ request()->segment(2) === $category['slug'] ? 'active' : '' }}">
|
||||
{{ $category['name'] }}
|
||||
</a>
|
||||
@endforeach
|
||||
</nav>
|
||||
```
|
||||
|
||||
### Beispiel 4: Dropdown mit Kategorien
|
||||
|
||||
```blade
|
||||
<select name="category" class="form-select">
|
||||
<option value="">Kategorie wählen</option>
|
||||
@foreach(App\Services\CategoryService::getCategories() as $cat)
|
||||
<option value="{{ $cat['slug'] }}">{{ $cat['name'] }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
```
|
||||
|
||||
### Beispiel 5: Kategorie-Filter in Livewire
|
||||
|
||||
```php
|
||||
use App\Services\CategoryService;
|
||||
use Livewire\Component;
|
||||
|
||||
class PressReleaseFilter extends Component
|
||||
{
|
||||
public $selectedCategory = '';
|
||||
public $categories = [];
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->categories = CategoryService::getCategories();
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.press-release-filter');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Beispiel 6: Farb-Gradient verwenden
|
||||
|
||||
```blade
|
||||
@php
|
||||
use App\Services\CategoryService;
|
||||
$category = CategoryService::getCategoryBySlug('wirtschaft');
|
||||
$gradient = CategoryService::getGradientForColor($category['color']);
|
||||
$iconColor = CategoryService::getClassForColor($category['color']);
|
||||
@endphp
|
||||
|
||||
<div class="bg-gradient-to-br {{ $gradient }} rounded-lg p-4">
|
||||
<img src="{{ CategoryService::getIconPath($category['icon']) }}"
|
||||
class="h-8 w-8 {{ $iconColor }}"
|
||||
alt="{{ $category['name'] }}">
|
||||
<h3>{{ $category['name'] }}</h3>
|
||||
</div>
|
||||
```
|
||||
|
||||
## 🎨 Verfügbare Kategorien
|
||||
|
||||
Aktuell sind folgende Kategorien definiert:
|
||||
|
||||
| Name | Slug | Icon | Farbe |
|
||||
|------|------|------|-------|
|
||||
| Wirtschaft | wirtschaft | chart-bar | blue |
|
||||
| Technologie | technologie | cpu-chip | purple |
|
||||
| Gesundheit | gesundheit | heart | green |
|
||||
| Finanzen | finanzen | currency-dollar | yellow |
|
||||
| Automotive | automotive | truck | red |
|
||||
| Immobilien | immobilien | building-office | indigo |
|
||||
| Energie | energie | bolt | orange |
|
||||
| Bildung | bildung | academic-cap | cyan |
|
||||
| Handel | handel | shopping-cart | pink |
|
||||
| Tourismus | tourismus | globe-alt | teal |
|
||||
| Sport | sport | trophy | lime |
|
||||
| Kultur | kultur | musical-note | violet |
|
||||
|
||||
## ➕ Neue Kategorie hinzufügen
|
||||
|
||||
Um eine neue Kategorie hinzuzufügen, bearbeiten Sie die `getCategories()` Methode in `app/Services/CategoryService.php`:
|
||||
|
||||
```php
|
||||
public static function getCategories(): array
|
||||
{
|
||||
return [
|
||||
// ... bestehende Kategorien
|
||||
[
|
||||
'name' => 'Neue Kategorie',
|
||||
'slug' => 'neue-kategorie',
|
||||
'description' => 'Beschreibung der neuen Kategorie',
|
||||
'count' => '0+',
|
||||
'icon' => 'icon-name', // Heroicon Name
|
||||
'color' => 'emerald', // Farbe
|
||||
],
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
**Wichtig:** Wenn Sie eine neue Farbe verwenden, fügen Sie diese auch in `getColorGradients()` und `getColorClasses()` hinzu!
|
||||
|
||||
## 🎯 Best Practices
|
||||
|
||||
1. **Verwenden Sie immer den CategoryService** statt hardcodierte Kategorien
|
||||
2. **Caching:** Für bessere Performance können Kategorien gecacht werden
|
||||
3. **Validierung:** Nutzen Sie `getCategoryBySlug()` zur Validierung von Kategorie-Parametern
|
||||
4. **Konsistenz:** Alle Kategorie-Daten sollten nur über den Service abgerufen werden
|
||||
|
||||
## 🔄 Migration von inline Arrays
|
||||
|
||||
**Vorher:**
|
||||
```blade
|
||||
@php
|
||||
$categories = [
|
||||
['name' => 'Wirtschaft', 'slug' => 'wirtschaft', ...],
|
||||
// ...
|
||||
];
|
||||
@endphp
|
||||
```
|
||||
|
||||
**Nachher:**
|
||||
```blade
|
||||
@php
|
||||
use App\Services\CategoryService;
|
||||
$categories = CategoryService::getCategories();
|
||||
@endphp
|
||||
```
|
||||
|
||||
## 📊 Performance-Tipps
|
||||
|
||||
Wenn Sie die Kategorien häufig verwenden, können Sie sie in einem View Composer laden:
|
||||
|
||||
```php
|
||||
// app/Providers/ViewServiceProvider.php
|
||||
use App\Services\CategoryService;
|
||||
use Illuminate\Support\Facades\View;
|
||||
|
||||
public function boot()
|
||||
{
|
||||
View::composer('*', function ($view) {
|
||||
$view->with('globalCategories', CategoryService::getCategories());
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
Dann in Blade:
|
||||
```blade
|
||||
@foreach($globalCategories as $category)
|
||||
<!-- ... -->
|
||||
@endforeach
|
||||
```
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
Beispiel für einen Test:
|
||||
|
||||
```php
|
||||
use App\Services\CategoryService;
|
||||
use Tests\TestCase;
|
||||
|
||||
class CategoryServiceTest extends TestCase
|
||||
{
|
||||
public function test_get_categories_returns_array()
|
||||
{
|
||||
$categories = CategoryService::getCategories();
|
||||
|
||||
$this->assertIsArray($categories);
|
||||
$this->assertNotEmpty($categories);
|
||||
}
|
||||
|
||||
public function test_get_category_by_slug()
|
||||
{
|
||||
$category = CategoryService::getCategoryBySlug('wirtschaft');
|
||||
|
||||
$this->assertNotNull($category);
|
||||
$this->assertEquals('Wirtschaft', $category['name']);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📝 Changelog
|
||||
|
||||
- **v1.0** - Initiale Version mit allen 12 Kategorien
|
||||
- Unterstützt Heroicons
|
||||
- Farb-Mappings für alle Kategorien
|
||||
- Helper-Methoden für einfachen Zugriff
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue