Changeset 1e2e9e7 in Klonkt for src/routes/posts.js
- Timestamp:
- 06/19/2026 09:38:20 AM (3 months ago)
- Branches:
- main
- Children:
- 8cdb377
- Parents:
- f4b7b6a
- File:
-
- 1 edited
-
src/routes/posts.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/posts.js
rf4b7b6a r1e2e9e7 394 394 }); 395 395 396 // Newer/Older-buren over ALLE posts in feed-volgorde. Gedeeld door de volledige 397 // post-render รฉn de fan-gate (premium fan_only), zodat de navigatie overal gelijk 398 // is. Solo: binnen de site (pinned eerst, dan datum). Hub: globaal op datum. 399 function postNeighbors(site, post, isHub) { 400 const urlBaseFor = (p) => (isHub && p && p.site_slug) ? `/user/${p.site_slug}` : ''; 401 const ordered = isHub 402 ? db.prepare(` 403 SELECT p.id, p.slug, p.title, s.slug AS site_slug 404 FROM posts p JOIN sites s ON s.id = p.site_id 405 WHERE p.status = 'published' 406 ORDER BY p.published_at DESC 407 `).all() 408 : db.prepare(` 409 SELECT id, slug, title FROM posts 410 WHERE site_id = ? AND status = 'published' 411 ORDER BY (pinned = 0) ASC, pinned ASC, published_at DESC 412 `).all(site.id); 413 const idx = ordered.findIndex((p) => p.id === post.id); 414 const newerPost = idx > 0 ? ordered[idx - 1] : null; 415 const olderPost = (idx >= 0 && idx < ordered.length - 1) ? ordered[idx + 1] : null; 416 if (newerPost) newerPost._urlBase = urlBaseFor(newerPost); 417 if (olderPost) olderPost._urlBase = urlBaseFor(olderPost); 418 return { newerPost, olderPost }; 419 } 420 396 421 // ==================== VIEW POST (last route รขโฌโ catches /:slug) ==================== 397 422 router.get('/:slug', (req, res, next) => { … … 419 444 // teaser mag elders wel als lokkertje verschijnen). 420 445 if (post.fan_only && !(req.session && req.session.user)) { 446 // Zelfde Newer/Older-navigatie als op een gewone post, zodat de bezoeker op 447 // de fan-gate niet vastloopt maar verder kan bladeren. 448 const { newerPost, olderPost } = postNeighbors(site, post, res.locals.tenancy === 'hub'); 421 449 return renderPage(req, res, 'pages/fan-gate', { 422 450 pageTitle: post.title || 'Alleen voor fans', … … 424 452 fgTitle: post.title || '', 425 453 fgNext: (res.locals.siteUrlBase || '') + '/' + post.slug, 454 newerPost, 455 olderPost, 426 456 }); 427 457 } … … 545 575 const urlBaseFor = (p) => (isHub && p && p.site_slug) ? `/user/${p.site_slug}` : ''; 546 576 547 // Newer/Older over ALLE posts, in de canonieke feed-volgorde โ niet alleen de 548 // pinned-stack. Solo: binnen de site, pinned eerst op rank, dan op datum 549 // (zelfde volgorde als de homepage-feed). Hub: globaal op datum over alle 550 // sites. De vorige positie in de lijst = "Newer" (โ omhoog), de volgende = 551 // "Older" (โ omlaag). Pinned posts zitten zo gewoon in de doorlopende reeks. 552 const ordered = isHub 553 ? db.prepare(` 554 SELECT p.id, p.slug, p.title, s.slug AS site_slug 555 FROM posts p JOIN sites s ON s.id = p.site_id 556 WHERE p.status = 'published' 557 ORDER BY p.published_at DESC 558 `).all() 559 : db.prepare(` 560 SELECT id, slug, title FROM posts 561 WHERE site_id = ? AND status = 'published' 562 ORDER BY (pinned = 0) ASC, pinned ASC, published_at DESC 563 `).all(site.id); 564 const _idx = ordered.findIndex((p) => p.id === post.id); 565 const newerPost = _idx > 0 ? ordered[_idx - 1] : null; 566 const olderPost = (_idx >= 0 && _idx < ordered.length - 1) ? ordered[_idx + 1] : null; 567 if (newerPost) newerPost._urlBase = urlBaseFor(newerPost); 568 if (olderPost) olderPost._urlBase = urlBaseFor(olderPost); 577 // Newer/Older over ALLE posts (gedeelde helper โ ook door de fan-gate gebruikt). 578 const { newerPost, olderPost } = postNeighbors(site, post, isHub); 569 579 570 580 // โโ Related posts: same-tag matching with recency fallback โโโโโ
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)