Kurse in Landing Page integriert

This commit is contained in:
Karol Bielski 2025-07-10 12:03:32 +02:00
parent 509c685d80
commit e5637d4929
3 changed files with 102 additions and 93 deletions

View File

@ -190,6 +190,23 @@ class UserModel extends Database
die; die;
} }
} }
public function getAllCourses() {
$pdo = $this->linkDB();
$sql = "SELECT k.id, k.name, k.preis, k.dauer, k.rabatt, k.kategorie, k.beschreibung, k.ort_id,
o.stadt, o.strasse, o.plz, b.note, b.kommentar
FROM kurs AS k
JOIN ort AS o ON o.id = k.ort_id
LEFT JOIN bewertungen AS b ON b.kurs_id = k.id";
try {
$sth = $pdo->prepare($sql);
$sth->execute();
return $sth->fetchAll(\PDO::FETCH_ASSOC);
} catch (PDOException $e) {
new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e);
die;
}
}
public function updateCourse($course) { public function updateCourse($course) {

View File

@ -1,7 +1,6 @@
<?php <?php
include dirname(__DIR__) . '/header.phtml'; include dirname(__DIR__) . '/header.phtml';
// Filter auslesen
$rating = $_GET['rating'] ?? ''; $rating = $_GET['rating'] ?? '';
$price = $_GET['price'] ?? ''; $price = $_GET['price'] ?? '';
$location = $_GET['location'] ?? ''; $location = $_GET['location'] ?? '';
@ -11,10 +10,9 @@ $location = $_GET['location'] ?? '';
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<h1 class="welcome-heading">KURSE & ERLEBNISSE JEDER ART</h1> <h1 class="welcome-heading">KURSE & ERLEBNISSE JEDER ART</h1>
<p class="welcome-subheading">Alle Kurse in deiner Nähe auf einen Blick</p> <p class="welcome-subheading">Alle Kurse in deiner Nähe - auf einen Blick</p>
<div class="row"> <div class="row">
<div class="col-3 col-m-12"> <div class="col-4">
<div class="filter-box"> <div class="filter-box">
<form method="get"> <form method="get">
<label for="rating">Bewertung:</label> <label for="rating">Bewertung:</label>
@ -36,61 +34,18 @@ $location = $_GET['location'] ?? '';
</div> </div>
</div> </div>
<div class="col-9"> <div class="col-8">
<!-- KURSLISTE -->
<div class="course-grid row"> <div class="course-grid row">
<?php <?php
$kurse = [ $userModel = new \Blog\Model\UserModel();
[ $kurse = $userModel->getAllCourses();
'bewertung' => 5,
'titel' => 'Marketing Pro',
'adresse' => 'Bulu ulu Straße 17',
'preis' => '59,99€',
'ort' => '33333 Frankfurt',
'leiter' => 'Max Mustermann'
],
[
'bewertung' => 4,
'titel' => 'Design Basics',
'adresse' => 'Musterstraße 10',
'preis' => '39,99€',
'ort' => '10115 Berlin',
'leiter' => 'Lisa Beispiel'
],
[
'bewertung' => 5,
'titel' => 'Excel Masterclass',
'adresse' => 'Tabellenweg 5',
'preis' => '49,99€',
'ort' => '20457 Hamburg',
'leiter' => 'Thomas Tabelle'
],
[
'bewertung' => 5,
'titel' => 'Excel Masterclass',
'adresse' => 'Tabellenweg 5',
'preis' => '49,99€',
'ort' => '20457 Hamburg',
'leiter' => 'Thomas Tabelle'
],
[
'bewertung' => 5,
'titel' => 'Excel Masterclass',
'adresse' => 'Tabellenweg 5',
'preis' => '49,99€',
'ort' => '20457 Hamburg',
'leiter' => 'Thomas Tabelle'
],
];
// Filter anwenden
$filteredKurse = array_filter($kurse, function($kurs) use ($rating, $location) { $filteredKurse = array_filter($kurse, function($kurs) use ($rating, $location) {
if ($rating && $kurs['bewertung'] < $rating) return false; if ($rating && $kurs['note'] < $rating) return false;
if ($location && stripos($kurs['ort'], $location) === false) return false; if ($location && stripos($kurs['ort'], $location) === false) return false;
return true; return true;
}); });
// Preise in Float umwandeln für Sortierung
if ($price) { if ($price) {
usort($filteredKurse, function($a, $b) use ($price) { usort($filteredKurse, function($a, $b) use ($price) {
$priceA = floatval(str_replace(',', '.', str_replace('€', '', $a['preis']))); $priceA = floatval(str_replace(',', '.', str_replace('€', '', $a['preis'])));
@ -99,28 +54,65 @@ $location = $_GET['location'] ?? '';
}); });
} }
foreach ($filteredKurse as $kurs): ?> $doc = new DOMDocument('1.0', 'UTF-8');
<div class="course-card col-card-4 col-m-6">
<div class="course-image"></div> if (!empty($filteredKurse)) {
<div class="course-content"> echo '<div class="courses-view">';
<div class="course-left"> foreach ($filteredKurse as $kurs) {
<div><?= $kurs['bewertung'] ?></div> $courseCard = $doc->createElement('div');
<div><?= $kurs['titel'] ?></div> $courseCard->setAttribute('class', 'course-card');
<div style="min-height: 40px;">Kursleiter: <?= $kurs['leiter'] ?></div>
<div><?= $kurs['adresse'] ?></div> $courseImage = $doc->createElement('div');
</div> $courseImage->setAttribute('class', 'course-image');
<div class="course-right"> $courseCard->appendChild($courseImage);
<div><?= $kurs['preis'] ?></div>
<div><?= $kurs['ort'] ?></div> $courseContent = $doc->createElement('div');
</div> $courseContent->setAttribute('class', 'course-content');
</div> $courseCard->appendChild($courseContent);
</div>
<?php endforeach; ?> $courseLeft = $doc->createElement('div');
$courseLeft->setAttribute('class', 'course-left');
$courseContent->appendChild($courseLeft);
$note = $doc->createElement('div', htmlspecialchars($kurs['note'] ?? 'Keine Bewertung') . ' ★');
$courseLeft->appendChild($note);
$name = $doc->createElement('div', htmlspecialchars($kurs['name']));
$courseLeft->appendChild($name);
$address = $doc->createElement('div', htmlspecialchars($kurs['strasse'] . ', ' . $kurs['stadt'] . ' ' . $kurs['plz']));
$courseLeft->appendChild($address);
$courseRight = $doc->createElement('div');
$courseRight->setAttribute('class', 'course-right');
$courseContent->appendChild($courseRight);
$price = $doc->createElement('div', htmlspecialchars($kurs['preis']) . ' €');
$courseRight->appendChild($price);
$category = $doc->createElement('div', htmlspecialchars($kurs['kategorie'] ?? 'Keine Kategorie'));
$courseRight->appendChild($category);
$editLink = $doc->createElement('a', "Bearbeiten");
$editLink->setAttribute('href', '?controller=User&do=showUserAccountPage&id=' . $kurs['id']);
$editLink->setAttribute('class', 'course-card-link');
$courseRight->appendChild($editLink);
echo $doc->saveHTML($courseCard);
}
echo '</div>';
} else {
echo '<p>Keine Kurse gefunden.</p>';
}
?>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>