feat: Sortierung nach Beliebtheit im Frontend-Filter

- Dropdown: Neueste zuerst / 👍 Beliebteste / 👁 Meist gesehen
- Beliebteste: likes DESC, views DESC, published_at DESC
- Meist gesehen: views DESC, published_at DESC
- Cross-Filter: Sort-Parameter bleibt bei Halle/Kategorie-Wechsel erhalten
- Reset-Link erscheint bei aktiver Sortierung
This commit is contained in:
Hermes Agent
2026-06-17 22:12:05 +02:00
parent 5f678144e5
commit 3dfea22046
+20 -1
View File
@@ -1605,6 +1605,7 @@ def public_frontend():
# Filters
halle_filter = request.args.get("halle", "").strip()
cat_filter = request.args.get("cat", "").strip()
sort = request.args.get("sort", "neu").strip()
query = "SELECT * FROM submissions WHERE status='published' AND deleted_at IS NULL"
params = []
@@ -1614,6 +1615,11 @@ def public_frontend():
if cat_filter:
query += " AND category = ?"
params.append(cat_filter)
if sort == "beliebt":
query += " ORDER BY likes DESC, views DESC, published_at DESC LIMIT 50"
elif sort == "gesehen":
query += " ORDER BY views DESC, published_at DESC LIMIT 50"
else:
query += " ORDER BY published_at DESC LIMIT 50"
rows = db.execute(query, params).fetchall()
@@ -1675,7 +1681,20 @@ def public_frontend():
selected = " selected" if cat_filter == c else ""
filter_html += f'<option value="{c}"{selected}>{c}</option>'
filter_html += '</select></form> '
if halle_filter or cat_filter:
# Sort dropdown
filter_html += '<span class="filter-label" style="margin-left:0.8rem;">🔽 Sortierung:</span> '
filter_html += '<form method="get" class="filter-form-inline" style="display:inline;">'
if halle_filter:
filter_html += f'<input type="hidden" name="halle" value="{halle_filter}">'
if cat_filter:
filter_html += f'<input type="hidden" name="cat" value="{cat_filter}">'
filter_html += '<select name="sort" onchange="this.form.submit()" class="hall-select">'
filter_html += f'<option value="neu" {"selected" if sort == "neu" else ""}>Neueste zuerst</option>'
filter_html += f'<option value="beliebt" {"selected" if sort == "beliebt" else ""}>👍 Beliebteste</option>'
filter_html += f'<option value="gesehen" {"selected" if sort == "gesehen" else ""}>👁 Meist gesehen</option>'
filter_html += '</select></form> '
if halle_filter or cat_filter or sort != "neu":
filter_html += '<a href="/" class="filter-reset">✕ Filter zurücksetzen</a>'
filter_html += "</div>"