Data Tables lets administrators create stand-alone, fully customizable data tables within XenForo, no code required. Define your own columns, set up dropdown lookups, and manage structured data right from the AdminCP, with clean public-facing display pages wrapped in your forum's theme.
Perfect for product catalogs, game databases, team rosters, pricing tables, inventory lists, or any structured data that doesn't fit neatly into forum threads.
Addon ID: Qubn/DataTables
Vendor: Qubn
License: Free / Open Source
Télécharger V1.0.0 :
Télécharger V1.1.0 :
After upgrading to v1.2.1, go to Admin CP > Groups & permissions > User group permissions, you should see the "Data table permissions" group with all 4 permissions configurable.
If you already set permissions before v1.2.0, you may need to re-configure them.
Télécharger V1.2.1 :
Old:
New:
This is cleaner - the table and record sit under the same path hierarchy, matching how XF handles thread URLs. All old URLs 301-redirect to the new format automatically.
150 automated browser tests pass on this release.
v1.4.6 restores them. You may need to re-set your permission values (which groups have allow/deny) in Groups & permissions > User groups > [group] under the "Data Tables" section.
All 3 fixes from v1.4.5 (autocomplete pre-fill, pagination, CSV UTF-8) are included unchanged.
Télécharger V1.4.6 :
Perfect for product catalogs, game databases, team rosters, pricing tables, inventory lists, or any structured data that doesn't fit neatly into forum threads.
Key Features
- Dynamic Table Definitions, Create unlimited tables, each with its own title, URL slug, description, and display order. Toggle tables active/inactive without deleting data.
- 7 Field Types, Build columns using: Text, Number, URL, Date, Lookup (dropdown), Text Area, and Yes/No (boolean). Each field supports sortable and filterable flags.
- Lookup Columns (Relational Dropdowns), Define dropdown options for any field. Options are stored relationally (not as flat strings), enabling clean data entry and consistent display.
- Admin Record Management, Full CRUD for records within the AdminCP. Dynamic forms automatically adapt to your field definitions, text fields become text inputs, lookups become dropdowns, numbers get spinners, booleans get checkboxes.
- Public Table Display, Clean, responsive public pages at /data-tables/ showing all active tables, with individual table views at /data-tables/{slug}/. Full theme integration.
- Column Sorting,Mark fields as "sortable" in the admin, and users can click column headers on the public table view to sort ascending/descending.
- Public Record Submission, Optionally allow members to submit new records from the public side (permission-controlled).
- Permission-Controlled Access, Two permissions out of the box:
- View data tables (default: Allow for all)
- Add records (default: No)
- Pagination, Both admin and public views paginate at 50 records per page.
- Clean Uninstall, All 4 database tables are dropped on uninstall. No leftover data.
How It Works
- Create a Definition, Go to AdminCP > Tools > Data Tables > Add Definition. Give it a title (e.g., "Product Catalog") and a URL slug (e.g., "products").
- Add Fields, Click "Fields" to define your columns. For example:
- Name (Text, Required, Sortable)
- Category (Lookup, with options like "Electronics", "Clothing", "Home")
- Price (Number, Sortable)
- In Stock (Yes/No)
- Website (URL)
- Add Records, Click "Records" to start entering data. The form automatically generates the right input type for each field.
- View Publicly, Visit
/data-tables/products/to see your table with sortable columns, resolved lookup values, and clean formatting.
Technical Details
- Architecture:Hybrid JSON + normalized lookups across 4 database tables
xf_qubn_dt_definition, table definitionsxf_qubn_dt_field, column definitions per tablexf_qubn_dt_lookup_option, dropdown options for lookup fieldsxf_qubn_dt_record, data rows (JSON blob per record)
- Performance: Lookup values resolved in a single batch query. Composite indexes on frequently-queried columns. Paginated to 50 records per page.
- Compatibility: XenForo 2.3.x. No class extensions, completely self-contained with zero conflicts.
- Code Quality: PHPStan level 3 clean. Follows XenForo conventions throughout. All user input filtered. CSRF protection on all forms.
Installation
- Download and extract the ZIP file
- Upload the
Qubn/DataTables/folder tosrc/addons/ - Go to AdminCP > Add-ons > Install from archive (or Install/upgrade)
- Navigate to AdminCP > Tools > Data Tables to start creating tables
Addon ID: Qubn/DataTables
Vendor: Qubn
License: Free / Open Source
Télécharger V1.0.0 :
Pour consulter le contenu, vous devez : Se connecter ou S'inscrire.
Data Tables v1.1.0 - Cross-Table Relational Lookups & Inline Record Creation
v1.1.0 adds cross-table relational lookups and inline record creation via overlay.New Features
- Cross-table relational lookups - a new "Table Lookup" field type lets you reference records from another table. Select a linked table and choose which field to display as the label. Users pick from existing records via dropdown, and values render as clickable links to the referenced record's detail page.
- Inline "Create New" overlay - a "+" button appears next to every Table Lookup dropdown. Click it and a modal opens with the linked table's record form. Fill it out, save, and the new record is automatically selected in the parent dropdown - no page reload, no navigating away. Works in both AdminCP and public pages (permission-gated).
- Record detail pages - every record now has its own page at
/data-tables/{slug}/view-record?record_id=Nshowing all fields in a clean layout. A "Referenced by" section at the bottom lists records from other tables that point to this one - giving you automatic reverse navigation between related data. - Clickable cross-links - Table Lookup values display as clickable links in both admin and public table views. Click a manufacturer name in a products table and jump straight to that manufacturer's detail page.
- Clickable URL fields - URL-type field values now render as clickable links (safe protocols only - http/https).
- AJAX field configuration - when editing fields in the AdminCP, selecting "Table Lookup" as the field type dynamically loads linked table and display field dropdowns via AJAX - no page reload needed.
- Reference tracking - denormalized
xf_qubn_dt_record_reftable for fast reverse lookups between tables. - 17 new phrases for relational lookup and overlay UI.
Changed
- Cell output restructured to support clickable cells in both admin and public views.
- Setup.php refactored to use getTables() helper (prevents install/uninstall drift).
- URL field values validated for safe protocols.
Fixed
- Definition deletion now cleans up orphaned linked_definition_id references in other tables' fields
Upgrading
Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive. Two upgrade steps run automatically to add the newxf_qubn_dt_record_ref table and linked_definition_id / display_field_key columns to the field table. All existing data is preserved. Database tables: 5 (was 4). No class extensions - zero conflict risk.Télécharger V1.1.0 :
Pour consulter le contenu, vous devez : Se connecter ou S'inscrire.
Data Tables v1.2.0 - Multi-Select, Public Edit/Delete, Autocomplete & More
v1.2.0 adds multi-select table lookups, public edit/delete permissions, required field validation, autocomplete search for large lookup lists, and inline edit for linked records.New Features
- Multi-select table lookups - Table Lookup fields can now be marked as multi-select for many-to-many relationships. Rendered as a multi-select dropdown (or autocomplete tags when >50 options). Cell display shows comma-separated linked items with clickable links to each.
- Public edit/delete - Records can now be edited and deleted from public pages. Two new permissions: "Edit records" (default: Allow) and "Delete records" (default: Deny). Edit and Delete buttons appear on both table view rows and record detail pages.
- Required field validation - Fields can be marked as required. Validation is enforced across all 4 save actions (admin create/edit, public create/edit) with clear error messages.
- Autocomplete search - Table Lookup fields with more than 50 options automatically switch from a standard dropdown to an AJAX-powered autocomplete with debounced search. Multi-select uses removable tag pills.
- Inline edit linked record - A pencil icon appears next to single-select Table Lookup fields. Click it to open an overlay and edit the referenced record in-place. The option label refreshes on save without page reload.
- Overlay form reset - After overlay save, the container DOM is removed to force a fresh fetch on next open, preventing stale form data.
Fixed
- Display field dropdown - Fixed the display field dropdown not populating when selecting a linked table for Table Lookup fields (reported by briansol).
- Deleted record references - Skip deleted record references instead of showing broken links in "Referenced by" sections.
- Button styling - Consistent text-only action buttons across admin and public views with proper inline-flex layout and matching button sizes.
- Inline styles extracted to LESS - All static inline styles moved to addon LESS files using XF theme variables for full theme compatibility.
- Lookup field options - Added "Add option" button so you can add unlimited lookup options without saving and reloading (reported by briansol).
- Table lookup display labels - Dropdowns and record lists now show the first text value from linked records instead of "#1", "#2" or "Record detail #N" when display field is not explicitly set (reported by briansol).
- Accessibility - Autocomplete widget now includes proper ARIA attributes (role=combobox, aria-expanded, role=listbox, role=option).
Data Tables v1.2.1 - Permission fix
v1.2.0 had an empty permissions.xml which caused the Data Tables permission group to disappear after upgrading. This release restores all 4 permission definitions (viewDataTable, addRecord, editRecord, deleteRecord).After upgrading to v1.2.1, go to Admin CP > Groups & permissions > User group permissions, you should see the "Data table permissions" group with all 4 permissions configurable.
If you already set permissions before v1.2.0, you may need to re-configure them.
Pour consulter le contenu, vous devez : Se connecter ou S'inscrire.
Data Tables v1.3.0 - Friendly URLs, CSV Import/Export, Icon Picker, and Enhanced UI
v1.3.0 adds friendly record URLs with breadcrumbs, clickable table rows, CSV import and export, field visibility controls, unlisted table definitions, per-definition FontAwesome icon picker, enhanced public page layouts, bulk record operations, and inline field display order editing.New Features
- Friendly URLs - Records are now accessible at
/data-tables/record/{table-slug}/{record-slug}/with auto-generated unique slugs.Legacy ?record_id=NURLs 301-redirect to the new format. - Breadcrumbs - Full navigation trail on all public pages: Home > Data Tables > Table Name > Record Title.
- Clickable table rows - Click anywhere on a table row to navigate to the record detail page. Ctrl/Cmd+click opens in a new tab. Action buttons still function independently.
- Field visibility - Per-field "Show in table" toggle to hide columns from the table view while still displaying them on record detail pages.
- Unlisted definitions - Hide tables from the public index while keeping them accessible via direct URL. "Unlisted" badge in AdminCP.
- CSV Import - Upload CSV files from the AdminCP record list page. Supports comma, tab, semicolon, and pipe delimiters. Automatic column mapping, 5-row preview, lookup resolution with optional auto-creation of missing options.
- CSV Export - Download table data as CSV with formatted cell values (lookup labels, boolean Yes/No, table lookup display labels).
- Inline field display order - Edit display order values directly from the field list page without opening each field individually.
- FontAwesome icon picker - Per-definition custom icon selectable from 1,500+ FontAwesome icons (e.g., fa-car, fa-wrench, fa-database). Displayed on the table list, table view header, and record detail header.
- Enhanced table list - Public table directory uses rich card rows with definition icon, description, field count, and record count badge with smooth hover transitions.
- Unified page headers - Table view and record detail pages use a consistent icon + title block header pattern for visual cohesion across all Data Tables pages.
- Bulk select & delete - Admin record list has select-all checkbox and batch delete button with dynamic count display.
Changed
- Record detail URL changed from
/data-tables/{slug}/view-record?record_id=Nto/data-tables/record/{slug}/{record-slug}/ - Table view headers respect the field "Show in table" setting
- Record slugs are stable - editing a record no longer changes its URL
- Table lookup autocomplete mode (>50 options) uses count-first strategy instead of loading all records into memory
Fixed
- Lookup option ID stability - Editing a lookup field (e.g., adding a new option) no longer reassigns option IDs, so existing records keep their values
- Boolean required validation - Boolean fields marked "required" no longer block record creation with false-positive errors
- Definition slug upgrade step - Upgrading from v1.2.x now correctly adds the slug column to definitions
- Case-insensitive option matching - Renaming a lookup option's casing preserves the option ID
- Lookup zero-value rejection - Option ID 0 is no longer accepted as valid
- Orphaned table lookup display - Deleted targets now show "(Unknown)" consistently
- Field type change cleanup - Changing a field type now clears stale reference IDs from records
- syncRecordRefs transaction safety - Record reference sync wrapped in transaction
- CSV import path traversal - File path validation prevents directory traversal attacks
- Cross-definition validation - Admin controller now validates field/record ownership across table definitions
Data Tables v1.3.1 - upgrade step slug unique key sequencing fix
- Fixes DuplicateKeyException when upgrading from v1.2.x with existing records. Unique key now added after slug data migration completes.
- Fixes DuplicateKeyException when upgrading from v1.2.x with existing records. Unique key now added after slug data migration completes.
Data Tables v1.3.2 - Title Field Selector, Editable Slugs, and Slug Regeneration
v1.3.2 fixes the record title showing "#58" instead of field values, adds a title field selector per definition, makes slugs editable, and adds a one-click slug regeneration button.New Features
- Title field selector - Choose which field is the record's display title from a dropdown on the definition edit page. Used in the page header, browser tab title, and URL slug generation. Defaults to "Auto (first text field)" for backward compatibility.
- Editable record slugs - Admin record edit form now shows the URL slug field for manual editing.
- Regenerate slugs button - One-click button on the admin record list page that regenerates all record slugs using the title field. Fixes generic slugs like record-2 created during the v1.3.0 migration.
Fixed
- Record title shows "#N" instead of field value - Title resolution now uses the definition's title field setting, then falls back to the first text field. Previously it could show the raw record ID when the first field value wasn't a plain string.
- Bulk delete button count not resetting - Unchecking all checkboxes on the admin record list now correctly resets the button text to "Delete selected" instead of keeping the old count.
- Slug generation uses title field - New records now generate their URL slug from the title field value instead of always using the first field.
How to Fix Existing Records
If you upgraded from v1.2.x and have generic slugs likerecord-2:- Go to AdminCP > Tools > Data Tables > edit your definition
- Set the Title field dropdown to the field you want (e.g., "Model" for a vehicles table)
- Save
- Go to the record list for that definition
- Click Regenerate slugs on the right side
Data Tables v1.4.0 - Safe Type Conversion, Color & Rich Text Fields, Sitemap, New URL Format
v1.4.0 adds safe field type conversion with data preservation, two new field types (color swatch and rich text/BBCode), sitemap integration, nested overlay creation, move field between definitions, custom route prefix, bulk select on all admin lists, and a cleaner .ID URL format. Includes admin UX improvements requested by briansol.New Field Types
- Color - HTML5 color picker with hex validation. Shows a compact inline swatch in table views and a larger preview on record detail pages.
- Rich Text (BBCode) - Full XF BBCode editor for rich content fields. Renders as formatted HTML on record detail pages. BBCode is cleanly stripped when converting to other field types.
Safe Field Type Conversion
Changing a field's type no longer wipes existing data. You now get a confirmation page showing how many records will be affected and how many can be auto-converted. The addon performs smart conversions where possible - for example, changing a Lookup field to Text resolves option labels instead of leaving behind raw IDs, and changing a Table Lookup to Text resolves linked record display names.New Features
- Sitemap integration - Records from active, listed definitions are automatically included in your XF sitemap for search engine discovery.
- Nested overlay creation - The "+" button for creating linked records now works inside overlays (one level deep). Create a referenced record without leaving the parent form.
- Move field between definitions - Relocate a field and all its record data from one table to another. Includes collision checks and automatic reference cleanup.
- Custom route prefix - New admin option to change the public URL from /data-tables/ to any custom prefix (e.g., /reference/). Uses XF's native route filter system so all template links update automatically.
- Bulk select & delete everywhere - The select-all checkbox and "Delete selected" button pattern (previously only on records) now also works on the definition list and field list pages.
URL Changes
Record URLs now use XF's native .ID suffix pattern:Old:
/data-tables/record/{table-slug}/{record-slug}/New:
/data-tables/{table-slug}/{record-slug}.{id}/This is cleaner - the table and record sit under the same path hierarchy, matching how XF handles thread URLs. All old URLs 301-redirect to the new format automatically.
Admin UX Improvements
- Clicking a definition title now goes to its Records page (not the edit form). Edit and Delete buttons are in the Actions column. (Requested by briansol)
- "Required" and "Show in table" are now inline checkboxes on the field list, saved alongside display order in one click. No more opening each field individually. (Requested by briansol)
- Title fields using Lookup or Table Lookup types now resolve to their display labels instead of showing raw IDs. No more "621" instead of "del Sol". (Reported by briansol)
Bug Fixes
- Fixed pagination overlap/gaps on bulk-imported records that share the same timestamp (added record ID tiebreaker sort). (Reported by briansol)
- Fixed "Referenced by" showing raw record IDs instead of proper display labels.
- Fixed singular/plural counts on the public table list ("1 field" vs "2 fields").
- Fixed missing option group description in AdminCP.
- Accessing
/data-tables/...when a custom prefix is configured now 301-redirects to the custom prefix URL.
Upgrade
Standard XF upgrade - upload and install from AdminCP. Seamless from any prior version (v1.0.0 through v1.3.2). All migration steps run automatically.150 automated browser tests pass on this release.
Data Tables v1.4.1 - Sitemap registration fix
- v1.4.1 fixes the sitemap handler that was not properly registered in v1.4.0. Records will now correctly appear in your XF sitemap. No other changes.
- v1.4.1 fixes the sitemap handler that was not properly registered in v1.4.0. Records will now correctly appear in your XF sitemap. No other changes.
Data Tables v1.4.2 - Color picker & type change confirmation fixes
v1.4.2 fixes two UI issues reported by briansol:
v1.4.2 fixes two UI issues reported by briansol:
- Color picker sizing - The color input displayed as a full-width thin black bar in admin forms. Now renders as a compact 80×36px color box.
- Type change confirmation layout - The impact stats (records affected, auto-convertible, etc.) overlapped their labels. Now uses standard XF form rows with the description in the block header.
Data Tables v1.4.3 - Bug Fixes + Performance
Bug fixes and performance improvements. All issues from @briansol's reports are addressed.Bug Fixes
- Rich text fields not saving - Content entered in the WYSIWYG editor (formatted text, bullet lists, bold, etc.) was silently lost on save. The field appeared blank on next view. Fixed by properly reading the editor's HTML output and converting it to BBCode for storage. (Reported by briansol)
- Wrong slugs don't 301 redirect - URLs with incorrect slugs (e.g.,
/reference/transmissions/fsdfsdfsddsfsd.263/) served the page content without redirecting to the canonical URL. Now returns a proper 301 redirect to the correct slug. Applies to record view, edit, and delete pages. (Reported by briansol) - Pagination URLs use query params instead of XF-style paths - Changed from
/reference/transmissions/?page=2to/reference/transmissions/page-2, matching XF's native forum/thread pagination pattern. Sort parameters remain as query params where appropriate. (Reported by briansol) - Admin bulk delete has no confirmation - Selecting records and clicking "Delete selected" now shows a confirmation page with the count of records to be deleted. Records are only removed after explicit confirmation. (Reported by briansol)
- Textarea/rich text not truncated in table view - Long text content (textarea and rich text fields) now truncates to ~100 characters with ellipsis in table views. Full content is still displayed on record detail pages. Fixes the row height blowout on tables with notes/description fields. (Reported by briansol)
- File health check warnings - Eliminated "Missing" and "Unexpected contents" warnings on
permissions.xmlin the AdminCP file health check. Caused by a stalehashes.jsonentry from a prior build.
Performance
- Table lookup maps scoped to current page - Previously loaded ALL records from linked tables on every page view. Now only fetches records actually referenced on the current page. Dramatic improvement for tables with large linked datasets.
- Autocomplete search bounded - Search no longer loads the entire table into memory for PHP-side filtering. Uses SQL LIKE with a limit of 50 candidates, then resolves display labels only for matches.
- In-memory sort capped - Column sorting on JSON-stored fields is capped to tables with 500 or fewer records. Above that threshold, default pagination order is used to avoid loading the entire dataset into memory.
- COUNT queries eliminated - Add/edit forms no longer run a COUNT query per table-lookup field. Uses the pre-maintained
record_countcolumn instead. - New composite index - Added
(definition_id, created_date, record_id)index on the records table for faster default-order pagination.
Upgrade
Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive. One automatic migration step adds the new database index. Seamless from any prior version.Data Tables v1.4.4 - CSV Import Fix
Targeted fix for CSV import with cross-table lookups.Bug Fixes
- "Create missing lookup values" now works for table_lookup fields - The checkbox only created missing static dropdown options (lookup fields) but did nothing for cross-table references (table_lookup fields). If your CSV had a column mapped to a table_lookup field with values that didn't exist in the linked table, you'd get "Linked record not found" errors regardless of the checkbox. Now auto-creates records in linked tables. Deduplication ensures the same value across 200 rows creates just 1 record. (Reported by briansol)
- CSV import rejects rows with unmapped required fields - If your CSV didn't include columns for every required field in the table, all rows were rejected even if the missing fields weren't mapped. Now only validates required fields that are actually mapped in the CSV.
- Empty lookup cells display "(Unknown)" - Empty lookup/table_lookup cells stored
0instead ofnull, causing the display to show "(Unknown)". Now stores null and displays blank, matching manual form behavior. - Multi-select table_lookup not handled in CSV - Comma-separated values like "
B16A2, B18C5" in multi-select fields were treated as a single lookup. Now split and resolved individually. - CSV import crashes on auto-create failure - If creating a linked record failed (DB error, slug collision), the entire import crashed. Now catches the exception, logs it, and skips the row with a clear error.
- Excel CSV files broken by UTF-8 BOM - Excel exports CSV files with a UTF-8 BOM character that caused the first column header to not match during auto-mapping. BOM is now stripped.
- Color and rich text fields not handled in CSV import - These field types fell through with no validation. Color now validates hex format (#RRGGBB); rich text passes through correctly.
Performance
- Pre-built lookup caches - Single DB query per lookup/table_lookup field at import start, then O(1) cache hits per row. Replaces v1.4.3's per-cell queries that did a full table scan for every CSV cell.
Upgrade
Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive. No database changes - this is a PHP-only fix with updated phrases.Data Tables v1.4.5 - 3 Bug Fixes
Bug Fixes
- Table lookup autocomplete loses value on edit - Fields with more than 50 options switch to autocomplete/search mode. When editing a record, the search box showed "Search..." instead of the current value (e.g., "5AN"). The hidden form value was correct so saving didn't lose data, but you couldn't see what was selected. Now pre-fills the label. (Reported by briansol)
- Pagination broken on public table view - Navigating to
/page-2always loaded page 1. The page number from the URL path wasn't being passed to XF's pagination handler. Now works correctly with sort parameters too (e.g.,/page-2?direction=asc). (Reported by briansol) - CSV import crashes on Word special characters - Pasting text from Word into a CSV (em dash, en dash, curly quotes) caused "Malformed UTF-8" errors because these characters are Windows-1252 encoded, not UTF-8. Now auto-converts to valid UTF-8 before processing. Valid UTF-8 characters (Japanese, Chinese, emoji, accented) are preserved unchanged. (Reported by briansol)
Upgrade
Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive. No database changes.Data Tables v1.4.6 - Permissions Fix
Hotfix - v1.4.5 shipped with empty permission definition files due to a build packaging error. Upgrading to v1.4.5 wiped the 4 DataTables permissions (viewDataTable, addRecord, editRecord, deleteRecord).v1.4.6 restores them. You may need to re-set your permission values (which groups have allow/deny) in Groups & permissions > User groups > [group] under the "Data Tables" section.
All 3 fixes from v1.4.5 (autocomplete pre-fill, pagination, CSV UTF-8) are included unchanged.
Upgrade
Upload the ZIP via Admin CP > Add-ons > Install/upgrade from archive. No database changes.
Pour consulter le contenu, vous devez : Se connecter ou S'inscrire.
Pièces jointes
-
01-admin-definition-list.webp20.3 KB · Affichages: 5 -
02-admin-definition-edit.webp23.3 KB · Affichages: 5 -
03-admin-field-list.webp24.5 KB · Affichages: 3 -
04-admin-field-edit-lookup.webp24.9 KB · Affichages: 4 -
05-admin-record-list.webp31.6 KB · Affichages: 3 -
06-admin-record-edit.webp20.9 KB · Affichages: 2 -
07-public-table-list.webp14.4 KB · Affichages: 5 -
08-public-table-view.webp19.2 KB · Affichages: 2 -
09-public-table-sorted.webp19.5 KB · Affichages: 2 -
10-public-add-record.webp14.3 KB · Affichages: 3

