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
|
# Filters
|
||||||
halle_filter = request.args.get("halle", "").strip()
|
halle_filter = request.args.get("halle", "").strip()
|
||||||
cat_filter = request.args.get("cat", "").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"
|
query = "SELECT * FROM submissions WHERE status='published' AND deleted_at IS NULL"
|
||||||
params = []
|
params = []
|
||||||
@@ -1614,7 +1615,12 @@ def public_frontend():
|
|||||||
if cat_filter:
|
if cat_filter:
|
||||||
query += " AND category = ?"
|
query += " AND category = ?"
|
||||||
params.append(cat_filter)
|
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()
|
rows = db.execute(query, params).fetchall()
|
||||||
|
|
||||||
# Get available filter values — group by hall number (H1-H7)
|
# Get available filter values — group by hall number (H1-H7)
|
||||||
@@ -1675,7 +1681,20 @@ def public_frontend():
|
|||||||
selected = " selected" if cat_filter == c else ""
|
selected = " selected" if cat_filter == c else ""
|
||||||
filter_html += f'<option value="{c}"{selected}>{c}</option>'
|
filter_html += f'<option value="{c}"{selected}>{c}</option>'
|
||||||
filter_html += '</select></form> '
|
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 += '<a href="/" class="filter-reset">✕ Filter zurücksetzen</a>'
|
||||||
filter_html += "</div>"
|
filter_html += "</div>"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user