Default UI language code. '' means the built-in English strings baked into xcrud.js. A non-empty code must have a matching languages/{code}.ini; a page's own ->set_lang() overrides this.
$columnVisibilityToggle
bool
true
Adds a "Columns" toolbar toggle letting the operator show/hide grid columns at will. Site-wide only, no per-page override.
$buttonText
bool
true
Whether row action buttons (Edit/Remove/every ->button()) show icon+label, or icon-only with a hover tooltip. A table's own ->button_style() can override this per table.
$loadingIndicator
string
'text'
'text' (a "Processing…" label), 'bar' (a shared page-top progress bar), or 'spinner' (a small spinning icon) while a grid loads.
$intelligentColumnFit
bool
true
Site-wide default for hiding overflow columns behind a per-row expand toggle on narrow containers. Per-page overridable via ->intelligent_column_fit().
$intelligentColumnArrangement
bool
true
Site-wide default for reflowing each row into a stacked card on phone-width screens. Per-page overridable via ->intelligent_column_arrangement().
Enables a "View Code" button on every Add/Edit form, showing the raw PHP source of the page that defined it. Turn off in production - see Deploying to Production.
Third-party libraries
$libraries is an array of CDN (or local libs/) URLs that progressively enhance certain fields. If a URL fails to load, the field falls back to its native HTML control instead of breaking:
Key
Powers
flatpickr_js / flatpickr_css
Richer date/datetime picker on date fields.
quill_js / quill_css
change_type('field', 'editor') - the rich text (WYSIWYG) editor.
choices_js / choices_css
Searchable/taggable dropdowns for ->relation(..., search: true).
cropper_js / cropper_css
The interactive drag-to-crop UI for change_type('field', 'image', '', ['manual_crop' => true]).
Uploads
Property
Type
Default
Description
$uploadDir
string
'media/'
Where uploaded files are written (relative to the project root) - also the URL path they're served from.
$uploadMaxSize
int
10 * 1024 * 1024 (10MB)
Max upload size in bytes, enforced on top of whatever php.ini's own upload_max_filesize/post_max_size already cap.
$uploadAllowedImageExt
array
['jpg','jpeg','png','gif','webp']
Allowed image extensions, checked against both filename and actual detected image data.
Turns a camelCase or snake_case field name into a Title Case label - e.g. 'customerNumber'/'payment_date' become "Customer Number"/"Payment Date". A bare "id" word is upper-cased to "ID".
Wraps trusted markup so a column_callback() return renders as real HTML in the grid instead of being escaped as plain text. See Custom Cell Rendering: Badges & Avatars.
Xcrud::uiAssets(): string
Emits the active theme's theme.js tag plus any extra CDN/font <head> assets, for a widget-less page that still wants the theme's JS globals.
Xcrud::assetVersion(string $path): string
Returns a ?v=<mtime> cache-busting query string for a static asset this project owns (not for CDN libraries, which are already versioned by URL).