RaxBoard Node System
RaxBoard manages your entire forum structure through a hierarchical node tree. Categories, forums, links, and pages unite under a single infrastructure, delivering a flexible and scalable content organisation. 😎
Table of Contents
1. Node System Overview
2. Node Types
3. Hierarchical Tree Structure (Nested Set)
4. Forum Sub-Types
5. Icon Management
6. SEO & URL Structure (Slug)
7. Ordering & Drag-and-Drop
8. Deletion Strategies
9. Forum Permission System
10. Caching Architecture
11. Event System
12. Forum Data Model
13. Question & Answer System
14. Our Competitive Advantages
1. Node System Overview
In RaxBoard, the entire forum structure is built upon the concept of "nodes." Every category, every forum, every link, and every page is a node. Nodes can be nested to unlimited depth through parent-child relationships. This architecture handles every scenario from a simple two-level structure (category > forum) to complex multi-layered organisations.
The node system operates on the Nested Set algorithm. This allows the entire tree to be loaded with a single database query; subtree, ancestor chain, and sibling queries execute at O(1) complexity.
2. Node Types
The system supports six distinct node types.
| Type | Icon | Description |
|---|
| Category | fa-folder | Container that groups other nodes. Does not hold content directly. |
| Forum | fa-comments | Primary content area where threads and messages are posted. Extended by the forums table. |
| Article | fa-newspaper | Article/blog format content area. The first post is displayed as a pinned article. |
| Poll | fa-chart-bar | Specialised forum type where every thread contains a poll. |
| Link | fa-link | External or internal URL redirect. |
| Page | fa-file-alt | Static page content. |
When creating nodes via the admin panel, only Category and Forum types are available. This design prevents creation of unreachable nodes.
3. Hierarchical Tree Structure (Nested Set)
RaxBoard manages the node hierarchy using the Nested Set model. Each node carries three coordinates.
| Field | Description |
|---|
| lft (Left) | Left boundary number of the node |
| rgt (Right) | Right boundary number of the node |
| depth | Distance from the root node (0 = root) |
With this structure, the entire subtree of any node can be found with a single
WHERE lft > ? AND rgt < ? condition. The ancestor chain is obtained via
WHERE lft < ? AND rgt > ?. When the tree is restructured (parent or order change), the system automatically calls
rebuildTree() and recalculates all lft/rgt/depth values.
Subtree Size: The number of nodes contained within any node is calculated as
(<rgt - lft + 1>) / 2.
Child Detection: If
(<rgt - lft>) > 1, the node has children.
4. Forum Sub-Types
Every forum-type node can be customised with four distinct sub-types. Each sub-type offers its own default sorting, allowed thread types, and specific configuration options.
| Sub-Type | Default Sort | Voting | Features |
|---|
| Discussion | Last post date | No | Standard discussion forum. Chronological thread listing. |
| Question (Q and A) | Vote score | Yes | Answers sorted by vote score. Best answer can be selected. |
| Article | Post date | No | First post pinned as article. Cover image and author bio support. |
| Poll | Last post date | No | Every thread contains a poll. Vote changing and result hiding options. |
Sub-type changes can be made from the admin panel;
ForumTypeFactory automatically resolves the appropriate handler. If an unknown type is entered, the system falls back to Discussion.
5. Icon Management
Each node can be assigned one of three icon types.
| Icon Type | Value Format | Description |
|---|
| default | Automatic | Default Font Awesome icon based on node type |
| fa | fa-[a-z0-9-]+ | Custom Font Awesome class (e.g. fa-rocket, fa-shield-alt) |
| image | filename.png | Custom uploaded image |
Font Awesome Icons: Any Font Awesome 5/6 class matching the
fa-[a-z0-9-]+ pattern can be used. The validation layer returns an error for invalid formats.
Custom Images: Images uploaded to the
/data/uploads/node_icons/ directory are rendered at 18x18 pixels with 4px border-radius. Images are cropped with
object-fit: cover and aligned with
vertical-align: middle.
Default Icons: When no icon is assigned, an automatic icon is used based on node type (Category: fa-folder, Forum: fa-comments, Article: fa-newspaper, Poll: fa-chart-bar, Link: fa-link, Page: fa-file-alt).
6. SEO & URL Structure
Each node has an optional
node_name (slug) field. Slug rules:
| Rule | Detail |
|---|
| Format | Lowercase letters, digits, and hyphens only. Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| Length | Maximum 50 characters |
| Uniqueness | Enforced by UNIQUE database constraint |
| Auto Conversion | Uppercase letters are automatically converted to lowercase |
When no slug is defined, the URL structure falls back to
/node-{id} format. This ensures every node is accessible with SEO-friendly, readable URLs. ;)
7. Ordering & Drag-and-Drop
Nodes can be ordered through two methods.
Manual Ordering: Each node's
display_order value determines its position. When a new node is created, the order value is automatically assigned as 10 more than the current highest value under the same parent.
Drag-and-Drop: Bulk reordering is supported in the admin panel. JSON data from the drag-and-drop interface is validated via
ReorderNodesDTO; parent loop detection is performed, then all nodes' parent_id and display_order values are updated. The Nested Set tree is automatically rebuilt after the operation.
Loop Protection: A node cannot be moved into its own subtree. The system detects and prevents loops in both individual moves and bulk reorder operations.
8. Deletion Strategies
When deleting a node, the fate of child nodes is determined by one of two strategies.
| Strategy | Description |
|---|
| move_up | Child nodes are moved to the deleted node's parent. Content is preserved. |
| cascade | The entire subtree is deleted. Threads and messages in forum-type nodes are soft-deleted. |
Content Protection: During cascade deletion, forum content (threads and messages) is not permanently destroyed; it is marked as
discussion_state = 'deleted' and
message_state = 'deleted'. This enables restoration when needed.
After deletion, the Nested Set tree is automatically rebuilt and caches are cleared.
9. Forum Permission System
Node-scoped permissions can be assigned to forum nodes. Permissions are defined at the user group or individual user level.
User Permissions:
| Permission Key | Description |
|---|
| forum.viewOthers | View other users' threads |
| forum.viewContent | View thread content |
| forum.postThread | Create new threads |
| forum.postReply | Reply to threads |
| forum.editOwnPost | Edit own posts |
| forum.editOwnThreadTitle | Edit own thread titles |
| forum.deleteOwnPost | Delete own posts |
| forum.deleteOwnThread | Delete own threads |
| forum.react | React to posts |
| forum.contentVote | Vote on content |
| forum.viewAttachment | View attachments |
| forum.uploadAttachment | Upload attachments |
| forum.uploadVideo | Upload videos |
| forum.tagOwnThread | Tag own threads |
| forum.votePoll | Vote in polls |
Moderator Permissions:
| Permission Key | Description |
|---|
| forum.inlineMod | Use inline moderation tools |
| forum.stickUnstickThread | Sticky/unsticky threads |
| forum.lockUnlockThread | Lock/unlock threads |
| forum.manageAnyThread | Move/merge threads |
| forum.deleteAnyThread | Soft delete any thread |
| forum.hardDeleteAnyThread | Hard delete any thread |
| forum.editAnyPost | Edit any post |
| forum.deleteAnyPost | Soft delete any post |
| forum.hardDeleteAnyPost | Hard delete any post |
| forum.viewDeleted | View soft-deleted content |
| forum.viewModerated | View moderated content |
| forum.undelete | Undelete content |
| forum.approveUnapprove | Approve/unapprove content |
| forum.tagAnyThread | Tag any thread |
| forum.manageAnyTag | Manage any tag |
| forum.threadReplyBan | Ban users from replying |
| forum.createRequiresApproval | New threads require moderator approval |
| forum.replyRequiresApproval | New replies require moderator approval |
Permissions accept one of three values:
allow,
deny, or
unset. Compiled permission caches are stored in the
permission_cache_forum table in JSON format for fast access.
10. Caching Architecture
The node tree is served through a four-tier caching system.
| Tier | Storage | TTL |
|---|
| L1 — Per-Request Memory | PHP array (per-request) | Request lifetime |
| L2 — Shared Cache | APCu / Redis | 600 seconds |
| L3 — File Cache | data/cache/node_tree.php | Unlimited (invalidated on change) |
| L4 — Database | SQL query | None (source of truth) |
All cache tiers are automatically cleared after every node CRUD operation. The CacheInvalidationListener also invalidates the navigation cache and the compiled template resolution map.
11. Event System
Node operations trigger side effects through a PSR-14 compliant event dispatcher.
| Event | Trigger | Payload |
|---|
| NodeCreatedEvent | When a new node is created | nodeId, nodeTypeId, title, parentId |
| NodeUpdatedEvent | When a node is updated | nodeId, changedFields |
| NodeDeletedEvent | When a node is deleted | nodeId, nodeTypeId, childAction |
These events are consumed by the CacheInvalidationListener; cache clearing, navigation rebuild, and template resolution map updates occur automatically.
12. Forum Data Model
Forum-type nodes are extended by an additional
forums table. This table is linked to the nodes table via a foreign key and cascades automatically on node deletion.
| Field | Description |
|---|
| discussion_count | Total thread count in the forum (denormalised) |
| message_count | Total message count in the forum (denormalised) |
| last_post_id | ID of the most recent post |
| last_post_date | Date of the most recent post |
| last_post_username | Username of the most recent poster |
| last_thread_id | ID of the most recently active thread |
| last_thread_title | Title of the most recently active thread |
| forum_type_id | Forum sub-type (discussion, question, article, poll) |
| allow_posting | Whether new content can be created in the forum |
| require_prefix | Whether a prefix is required when creating threads |
| min_tags | Minimum number of tags required when creating threads |
Counters (discussion_count, message_count) are updated incrementally. After moderation operations, the
rebuildForum() method can recompute the full count. Category nodes aggregate child forum statistics upward (bubble-up) for display at the category level.
13. Question & Answer System
Forums with the Question sub-type feature an advanced Q and A mechanism.
Voting: Answers can receive +1 or -1 votes. Vote toggling is supported. Answers are sorted by vote score.
Best Answer: The thread owner or an authorised moderator can mark an answer as the "solution." The solution mark can be toggled. Solved threads are displayed with a special badge in thread listings.
Statistics: Each thread's answer count and solved status can be queried in bulk. The N+1 query problem is prevented in list views.
14. Our Competitive Advantages
| Feature | The RaxBoard Difference |
|---|
| Nested Set Tree | Entire hierarchy loaded with a single query; unlimited depth support. |
| Four Forum Sub-Types | Discussion, Q and A, Article, and Poll on the same infrastructure; no additional plugins required. |
| Three-Tier Icon System | Default, Font Awesome, and custom image options. |
| Four-Tier Caching | Memory, APCu/Redis, file, and database for high performance. |
| Node-Scoped Permissions | Independent, user-group-based permission assignment per forum. |
| Smart Deletion Strategies | Cascade and move_up options with zero risk of content loss. |
| PSR-14 Event System | Automatic side-effect management on node operations. |
| Q and A with Voting | Built-in question-answer, best answer, and vote scoring system. |
RaxBoard Node, Forum & Kategori Sistemi
RaxBoard, forumunuzun tüm yapısını hiyerarşik bir node ağacı üzerinde yönetir. Kategoriler, forumlar, bağlantılar ve sayfalar tek bir altyapıda birleşerek esnek ve ölçeklenebilir bir içerik organizasyonu sunar. 😎
İçindekiler
1. Node Sistemi Genel Bakış
2. Node Türleri
3. Hiyerarşik Ağaç Yapısı (Nested Set)
4. Forum Alt Türleri
5. İkon Yönetimi
6. SEO ve URL Yapısı (Slug)
7. Sıralama ve Sürükle-Bırak
8. Silme Stratejileri
9. Forum İzin Sistemi
10. Önbellekleme Mimarisi
11. Olay Sistemi (Events)
12. Forum Veri Modeli
13. Soru-Cevap (Q and A) Sistemi
14. Rekabet Avantajlarımız
1. Node Sistemi Genel Bakış
RaxBoard'da forum yapısının tamamı "node" kavramı üzerine inşa edilmiştir. Her kategori, her forum, her bağlantı ve her sayfa birer node'dur. Node'lar ebeveyn-çocuk ilişkisiyle sınırsız derinlikte iç içe yerleştirilebilir. Bu mimari, basit bir iki seviyeli yapıdan (kategori > forum) karmaşık çok katmanlı organizasyonlara kadar her senaryoyu karşılar.
Node sistemi, Nested Set (iç içe küme) algoritmasıyla çalışır. Bu sayede tüm ağaç tek bir veritabanı sorgusuyla yüklenebilir; alt ağaç, ata zinciri ve kardeş node sorguları O(1) karmaşıklığında gerçekleşir.
2. Node Türleri
Sistem altı farklı node türünü destekler.
| Tür | İkon | Açıklama |
| Category | fa-folder | Diğer node'ları gruplayan kapsayıcı. Doğrudan içerik barındırmaz. |
| Forum | fa-comments | Konu ve mesajların paylaşıldığı ana içerik alanı. Forums tablosuyla genişletilir. |
| Article | fa-newspaper | Makale/blog formatında içerik alanı. İlk gönderi sabitlenmiş makale olarak görüntülenir. |
| Poll | fa-chart-bar | Her konunun bir anket içerdiği özel forum türü. |
| Link | fa-link | Harici veya dahili URL yönlendirmesi. |
| Page | fa-file-alt | Statik sayfa içeriği. |
Yönetim panelinden node oluşturulurken yalnızca Category ve Forum türleri kullanılabilir. Bu tasarım, erişilemez node oluşturulmasını önler.
3. Hiyerarşik Ağaç Yapısı (Nested Set)
RaxBoard, node hiyerarşisini Nested Set (iç içe küme) modeliyle yönetir. Her node üç koordinat taşır.
| Alan | Açıklama |
| lft (Sol) | Node'un sol sınır numarası |
| rgt (Sağ) | Node'un sağ sınır numarası |
| depth (Derinlik) | Kök node'a olan mesafe (0 = kök) |
Bu yapı sayesinde herhangi bir node'un tüm alt ağacı, tek bir
WHERE lft > ? AND rgt < ? koşuluyla bulunur. Ata zinciri ise
WHERE lft < ? AND rgt > ? sorgusuyla elde edilir. Ağaç yeniden yapılandırıldığında (ebeveyn veya sıralama değişikliği) sistem otomatik olarak
rebuildTree() metodunu çağırır ve tüm lft/rgt/depth değerlerini yeniden hesaplar.
Alt Ağaç Boyutu: Herhangi bir node'un kaç node içerdiği
(<rgt - lft + 1>) / 2 formülüyle hesaplanır.
Çocuk Kontrolü: (<rgt - lft>) > 1 ise node'un çocukları vardır.
4. Forum Alt Türleri
Forum türündeki her node, dört farklı alt tür ile özelleştirilebilir. Her alt tür, varsayılan sıralama, izin verilen konu tipleri ve özel yapılandırma seçenekleri sunar.
| Alt Tür | Varsayılan Sıralama | Oylama | Özellikler |
| Discussion | Son mesaj tarihi | Hayır | Standart tartışma forumu. Kronolojik konu listesi. |
| Question (Soru-Cevap) | Oy puanı | Evet | Cevaplar oy puanına göre sıralanır. En iyi cevap seçilebilir. |
| Article (Makale) | Yayın tarihi | Hayır | İlk gönderi makale olarak sabitlenir. Kapak görseli ve yazar biyografisi desteği. |
| Poll (Anket) | Son mesaj tarihi | Hayır | Her konu bir anket içerir. Oy değiştirme ve sonuç gizleme seçenekleri. |
Alt tür değişikliği yönetim panelinden yapılabilir;
ForumTypeFactory ilgili handler'ı otomatik olarak çözümler. Bilinmeyen bir tür girildiğinde sistem Discussion'a geri döner.
5. İkon Yönetimi
Her node'a üç farklı ikon türünden biri atanabilir.
| İkon Türü | Değer Formatı | Açıklama |
| default | Otomatik | Node türüne göre varsayılan Font Awesome ikonu kullanılır |
| fa | fa-[a-z0-9-]+ | Özel bir Font Awesome sınıfı belirtilir (orn: fa-rocket, fa-shield-alt) |
| image | dosya-adi.png | Yüklenen özel görsel kullanılır |
Font Awesome İkonları: fa-[a-z0-9-]+ kalıbına uygun herhangi bir Font Awesome 5/6 sınıfı kullanılabilir. Geçersiz format girildiğinde doğrulama katmanı hata döndürür.
Özel Görseller: /data/uploads/node_icons/ dizinine yüklenen görseller 18x18 piksel boyutunda, 4px border-radius ile render edilir. Görseller
object-fit: cover ile kırpılır ve
vertical-align: middle ile satıra hizalanır.
Varsayılan İkonlar: Herhangi bir ikon atanmadığında node türüne göre otomatik ikon kullanılır (Category: fa-folder, Forum: fa-comments, Article: fa-newspaper, Poll: fa-chart-bar, Link: fa-link, Page: fa-file-alt).
6. SEO ve URL Yapısı
Her node isteğe bağlı bir
node_name (slug) alanına sahiptir. Slug kuralları:
| Kural | Detay |
| Format | Yalnızca küçük harf, rakam ve tire. Kalıp: ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| Uzunluk | Maksimum 50 karakter |
| Benzersizlik | Veritabanında UNIQUE kısıtlama ile korunur |
| Otomatik Dönüşüm | Büyük harfler otomatik küçük harfe çevrilir |
Slug tanımlanmadığında URL yapısı
/node-{id} formatına geri döner. Bu sayede her node SEO dostu, okunabilir URL'lerle erişilebilir. ;)
7. Sıralama ve Sürükle-Bırak
Node'lar iki yöntemle sıralanabilir.
Manuel Sıralama: Her node'un
display_order değeri ayarlanarak sıralama belirlenir. Yeni node oluşturulduğunda sıralama değeri otomatik olarak aynı ebeveyn altındaki mevcut en yüksek değerin 10 fazlası olarak atanır.
Sürükle-Bırak: Yönetim panelinde toplu sıralama desteği mevcuttur. Sürükle-bırak arayüzünden gelen JSON verisi
ReorderNodesDTO ile doğrulanır; ebeveyn döngüsü tespiti yapılır, ardından tüm node'ların parent_id ve display_order değerleri güncellenir. İşlem sonrası Nested Set ağacı otomatik yeniden oluşturulur.
Döngü Koruması: Bir node kendi alt ağacına taşınamaz. Sistem, hem tekil taşıma hem de toplu sıralama işlemlerinde döngü tespiti yapar ve engeller.
8. Silme Stratejileri
Node silinirken çocuk node'ların akıbeti iki farklı stratejiyle belirlenir.
| Strateji | Açıklama |
| move_up (Yukarı Taşı) | Çocuk node'lar silinen node'un ebeveynine taşınır. İçerik korunur. |
| cascade (Zincirleme Sil) | Tüm alt ağaç silinir. Forum türündeki node'lardaki konular ve mesajlar yumuşak silinir (soft-delete). |
İçerik Koruması: Cascade silme işleminde forum içerikleri (konular ve mesajlar) kalıcı olarak silinmez;
discussion_state = 'deleted' ve
message_state = 'deleted' olarak işaretlenir. Bu sayede gerektiğinde geri yükleme mümkündür.
Silme işlemi sonrası Nested Set ağacı otomatik yeniden oluşturulur ve önbellekler temizlenir.
9. Forum İzin Sistemi
Forum node'larına özel, node bazlı izin atanabilir. İzinler kullanıcı grubu veya bireysel kullanıcı düzeyinde tanımlanır.
Kullanıcı İzinleri:
| İzin Anahtarı | Açıklama |
| forum.viewOthers | Diğer kullanıcıların konularını görüntüleme |
| forum.viewContent | Konu içeriğini görüntüleme |
| forum.postThread | Yeni konu oluşturma |
| forum.postReply | Konulara yanıt yazma |
| forum.editOwnPost | Kendi mesajını düzenleme |
| forum.editOwnThreadTitle | Kendi konu başlığını düzenleme |
| forum.deleteOwnPost | Kendi mesajını silme |
| forum.deleteOwnThread | Kendi konusunu silme |
| forum.react | Mesajlara tepki verme |
| forum.contentVote | İçerik oylaması |
| forum.viewAttachment | Ek dosyaları görüntüleme |
| forum.uploadAttachment | Ek dosya yükleme |
| forum.uploadVideo | Video yükleme |
| forum.tagOwnThread | Kendi konusuna etiket ekleme |
| forum.votePoll | Anketlerde oy kullanma |
Moderatör İzinleri:
| İzin Anahtarı | Açıklama |
| forum.inlineMod | Satır içi moderasyon araçlarını kullanma |
| forum.stickUnstickThread | Konuları sabitleme/kaldırma |
| forum.lockUnlockThread | Konuları kilitleme/açma |
| forum.manageAnyThread | Konuları taşıma/birleştirme |
| forum.deleteAnyThread | Herhangi bir konuyu yumuşak silme |
| forum.hardDeleteAnyThread | Herhangi bir konuyu kalıcı silme |
| forum.editAnyPost | Herhangi bir mesajı düzenleme |
| forum.deleteAnyPost | Herhangi bir mesajı yumuşak silme |
| forum.hardDeleteAnyPost | Herhangi bir mesajı kalıcı silme |
| forum.viewDeleted | Silinmiş içerikleri görüntüleme |
| forum.viewModerated | Moderasyon bekleyen içerikleri görüntüleme |
| forum.undelete | Silinmiş içerikleri geri yükleme |
| forum.approveUnapprove | İçerik onaylama/onay kaldırma |
| forum.tagAnyThread | Herhangi bir konuya etiket ekleme |
| forum.manageAnyTag | Herhangi bir etiketi yönetme |
| forum.threadReplyBan | Kullanıcıları yanıt vermekten yasaklama |
| forum.createRequiresApproval | Yeni konular moderatör onayı gerektirir |
| forum.replyRequiresApproval | Yeni yanıtlar moderatör onayı gerektirir |
İzinler üç değerden birini alır:
allow,
deny veya
unset. Derlenmiş izin önbelleği
permission_cache_forum tablosunda saklanır ve JSON formatında hızlı erişim sağlar.
10. Önbellekleme Mimarisi
Node ağacı dört katmanlı bir önbellek sistemiyle sunulur.
| Katman | Depolama | TTL |
| L1 — İstek İçi Bellek | PHP dizisi (per-request) | İstek ömrü |
| L2 — Paylaşımlı Önbellek | APCu / Redis | 600 saniye |
| L3 — Dosya Önbelleği | data/cache/node_tree.php | Sınırsız (invalidate ile) |
| L4 — Veritabanı | SQL sorgusu | Yok (kaynak) |
Her node CRUD işleminden sonra tüm önbellek katmanları otomatik olarak temizlenir. CacheInvalidationListener, navigasyon önbelleğini ve derlenen template çözümleme haritasını da geçersiz kılar.
11. Olay Sistemi
Node işlemleri PSR-14 uyumlu bir olay dağıtıcısı üzerinden yan etkiler tetikler.
| Olay | Tetiklenme Zamanı | Taşınan Veri |
| NodeCreatedEvent | Yeni node oluşturulduğunda | nodeId, nodeTypeId, title, parentId |
| NodeUpdatedEvent | Node güncellendiğinde | nodeId, changedFields |
| NodeDeletedEvent | Node silindiğinde | nodeId, nodeTypeId, childAction |
Bu olaylar CacheInvalidationListener tarafından dinlenir; önbellek temizleme, navigasyon yeniden oluşturma ve template çözümleme haritası güncelleme işlemleri otomatik gerçekleşir.
12. Forum Veri Modeli
Forum türündeki node'lar, ek bir
forums tablosuyla genişletilir. Bu tablo, nodes tablosuna foreign key ile bağlıdır ve node silindiğinde otomatik cascade edilir.
| Alan | Açıklama |
| discussion_count | Forumdaki toplam konu sayısı (denormalize) |
| message_count | Forumdaki toplam mesaj sayısı (denormalize) |
| last_post_id | Son mesajın kimliği |
| last_post_date | Son mesajın tarihi |
| last_post_username | Son mesajı yazan kullanıcı |
| last_thread_id | Son aktif konunun kimliği |
| last_thread_title | Son aktif konunun başlığı |
| forum_type_id | Forum alt türü (discussion, question, article, poll) |
| allow_posting | Forumda yeni içerik oluşturulabilir mi |
| require_prefix | Konu oluştururken prefix zorunlu mu |
| min_tags | Konu oluştururken gereken minimum etiket sayısı |
Sayaçlar (discussion_count, message_count) artımlı olarak güncellenir. Moderasyon işlemlerinden sonra
rebuildForum() metodu ile tam sayım yeniden hesaplanabilir. Kategori node'larında alt forum istatistikleri yukarı doğru toplanarak (bubble-up) kategori seviyesinde gösterilir.
13. Soru-Cevap Sistemi
Question alt türündeki forumlarda gelişmiş bir Soru-Cevap mekanizması çalışır.
Oylama: Cevaplara +1 veya -1 oy verilebilir. Oy değiştirme (toggle) desteklenir. Cevaplar oy puanına göre sıralanır.
En İyi Cevap: Konu sahibi veya yetkili moderatör, bir cevabı "çözüm" olarak işaretleyebilir. Çözüm işareti kaldırılabilir (toggle). Konu listesinde çözülmüş konular özel rozetle gösterilir.
İstatistikler: Her konunun cevap sayısı ve çözülme durumu toplu olarak sorgulanabilir. Liste görünümünde N+1 sorgu problemi önlenmiştir.
14. Rekabet Avantajlarımız
| Özellik | RaxBoard Farkı |
| Nested Set Ağacı | Tüm hiyerarşi tek sorguyla yüklenir; sınırsız derinlik desteği. |
| Dört Forum Alt Türü | Discussion, Q and A, Article ve Poll aynı altyapıda; ek eklenti gerektirmez. |
| Üç Katmanlı İkon Sistemi | Varsayılan, Font Awesome ve özel görsel seçenekleri. |
| Dört Katmanlı Önbellek | Bellek, APCu/Redis, dosya ve veritabanı ile yüksek performans. |
| Node Bazlı İzinler | Her forum için bağımsız, kullanıcı grubu bazlı izin ataması. |
| Akıllı Silme Stratejileri | Cascade ve move_up seçenekleriyle içerik kaybı riski sıfır. |
| PSR-14 Olay Sistemi | Node işlemlerinde otomatik yan etki yönetimi. |
| Q and A ve Oylama | Yerleşik soru-cevap, en iyi cevap ve oy puanlama sistemi. |