presseportale/_docs/CATEGORY_SERVICE_DOCUMENTATION.md
Kevin Adametz 5b8bdf4182
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
12-05-2026 Frontend dev
2026-05-12 18:32:33 +02:00

8.5 KiB
Raw Blame History

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.

use App\Services\CategoryService;

$categories = CategoryService::getCategories();
// Returns: Array mit allen Kategorien

Rückgabe-Struktur:

[
    [
        '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.

$category = CategoryService::getCategoryBySlug('wirtschaft');
// Returns: Array mit Kategorie-Daten oder null

3. getCategorySlugs()

Gibt alle Kategorie-Slugs als Array zurück.

$slugs = CategoryService::getCategorySlugs();
// Returns: ['wirtschaft', 'technologie', 'gesundheit', ...]

4. getColorGradients()

Gibt alle Farb-Gradient-Mappings zurück.

$gradients = CategoryService::getColorGradients();
// Returns: ['blue' => 'from-blue-500/10 to-blue-600/10', ...]

5. getColorClasses()

Gibt alle Farb-CSS-Klassen zurück.

$classes = CategoryService::getColorClasses();
// Returns: ['blue' => 'text-blue-500', ...]

6. getGradientForColor(string $color)

Gibt den Gradient für eine bestimmte Farbe zurück.

$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.

$class = CategoryService::getClassForColor('blue');
// Returns: 'text-blue-500'

8. getIconPath(string $iconName)

Generiert den Pfad zu einem Heroicon.

$path = CategoryService::getIconPath('chart-bar');
// Returns: '/heroicons/optimized/24/outline/chart-bar.svg'

9. count()

Gibt die Gesamtanzahl der Kategorien zurück.

$total = CategoryService::count();
// Returns: 12

🔧 Verwendungsbeispiele

Beispiel 1: Kategorien in Blade anzeigen

@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

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

@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

<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

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

@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:

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:

@php
    $categories = [
        ['name' => 'Wirtschaft', 'slug' => 'wirtschaft', ...],
        // ...
    ];
@endphp

Nachher:

@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:

// 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:

@foreach($globalCategories as $category)
    <!-- ... -->
@endforeach

🧪 Testing

Beispiel für einen Test:

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