Article

The Forum module: a full community package on CPalius

The CPalius Forum module ships a locale-aware section tree, denormalized topic stats, capability-based moderation, and portal/search contributions without stuffing community data into Node.ffing community data into Node.

· ZemoCA · 2 min read
The Forum module: a full community package on CPalius

The CPalius Forum module is not a Node subtype. Topics, posts, sections, and permissions live in their own entities, and the Studio Forum desk stays separate from AACP. The point is a real community package inside the CMF — not “everything is a page.”

Section tree and locale

Sections nest as division, category, and subcategory. Each section carries a locale; Turkish and English trees pair through translation_group_id. /tr/forum and /en/forum describe the same product while slugs, titles, and last-post previews stay language-specific.

Topics, posts, denormalized counts

A topic stores first_post_id, last_post_id, post_count, and last_poster_name so listing pages avoid a JOIN storm. Likes, notifications, read markers, drafts, polls, and attachments are dedicated tables — they are not stuffed into Node JSON.

Moderation and capabilities

Lock, merge, move, and inline tools go through ForumModerationService. Controllers never check ROLE_ADMIN; they grant forum.moderate and forum.post.create via capabilities.yaml and voters. The ban guard stops a blocked user before the topic page renders.

Portal and search

ForumPortalBlockDataProvider feeds the homepage. ForumSearchProvider adds topics and posts to site search. contributions.yaml declares those hooks so the kernel stays free of module-specific if blocks.

After seven months this module is the proof that a CPalius package can be as deep as a standalone forum product while still living under cp-content/modules.

Comments (0)

No comments yet. Be the first to write one.

Leave a comment

Your comment will appear after it is reviewed.