12-05-2026 Frontend dev
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run

This commit is contained in:
Kevin Adametz 2026-05-12 18:32:33 +02:00
parent 405df0a122
commit 5b8bdf4182
779 changed files with 480564 additions and 6241 deletions

View 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