Foro: paginación en la búsqueda y contador de visitas por tema
- búsqueda paginada (count_search_topics + offset/limit) con controles en la plantilla - contador de visitas: columna opcional forum_topics.views con detección automática (has_views_column), increment_views al ver el tema, mostrado en lista y cabecera - sql/forum_views.sql (ALTER opcional) + docs Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+14
-1
@@ -87,14 +87,22 @@ def view_forum(request, forum_id, page=1):
|
||||
|
||||
def search(request):
|
||||
query = (request.GET.get('q') or '').strip()
|
||||
try:
|
||||
page = int(request.GET.get('page', 1))
|
||||
except (TypeError, ValueError):
|
||||
page = 1
|
||||
results = []
|
||||
pag = None
|
||||
if len(query) >= 2:
|
||||
results = db.search_topics(query)
|
||||
total = db.count_search_topics(query)
|
||||
pag, offset = _paginate(total, page, settings.FORUM_TOPICS_PER_PAGE)
|
||||
results = db.search_topics(query, offset, settings.FORUM_TOPICS_PER_PAGE)
|
||||
for r in results:
|
||||
r['display_poster'] = db.get_display_name(r['poster_id']) or r['poster']
|
||||
return render(request, 'forum/search.html', _base_context(request, {
|
||||
'query': query,
|
||||
'results': results,
|
||||
'pagination': pag,
|
||||
}))
|
||||
|
||||
|
||||
@@ -106,6 +114,11 @@ def view_topic(request, topic_id, page=1):
|
||||
|
||||
forum = db.get_forum(topic['forum_id'], include_hidden=True)
|
||||
|
||||
# Contador de visitas (si la columna existe)
|
||||
db.increment_views(topic_id)
|
||||
if topic.get('views') is not None:
|
||||
topic['views'] = topic['views'] + 1
|
||||
|
||||
total = db.count_posts(topic_id)
|
||||
pag, offset = _paginate(total, page, settings.FORUM_POSTS_PER_PAGE)
|
||||
include_deleted = perm.is_moderator(request)
|
||||
|
||||
Reference in New Issue
Block a user