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:
@@ -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,7 +1615,12 @@ def public_frontend():
|
||||
if cat_filter:
|
||||
query += " AND category = ?"
|
||||
params.append(cat_filter)
|
||||
query += " ORDER BY published_at DESC LIMIT 50"
|
||||
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()
|
||||
|
||||
# Get available filter values — group by hall number (H1-H7)
|
||||
@@ -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>"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user