Getting Started

Configuration

Administration

Modules

Templates

Integrations

Development

Getting Started

  • πŸ‘‹ Introduction
    High-level overview of UNA CMS: what it is, who it’s for, and what you can build.

  • βš™οΈ How UNA Works
    Explains the underlying architecture and relationship between front-end, Studio (admin console), and apps.

  • [πŸ’‘ Key Concepts][key-concepts]
    Covers essential terminology (Profiles, Context Modules, Permissions, etc.) that power UNA.

  • πŸ“• Glossary
    Alphabetical reference for important UNA terms.

  • ✊ Principles
    The guiding philosophies behind UNA development and community management.

  • [πŸ’» System Requirements][system-requirements]
    Details on hosting environment, server configuration, and prerequisites.

  • [πŸš€ Installation & Setup][installation-setup]
    Step-by-step instructions for installing UNA on various platforms (shared hosting, VPS, Docker, etc.).

  • [πŸƒ Quick Start Tutorial][quick-start-tutorial]
    A hands-on approach to spin up a basic UNA site with minimal configuration.

  • [πŸ“‹ Launch Checklist][launch-checklist]
    A structured guide (43 steps or more) to configure essentials before going live.

  • [❓ General FAQ][general-faq]
    Frequently asked questions for newcomers.


Building & Managing Your UNA Site

  • [πŸ”§ Studio Basics][studio-basics]
    How to navigate and use Studio: Pages, Forms, Navigation, Permissions, Languages, etc.

  • [πŸ“‘ Site Structure][site-structure]
    Understanding page layouts, blocks, and how modules interact.

  • πŸ—‚ Content Management
    Managing posts, media, categories, and moderation workflows.

  • [πŸ‘€ User & Profile Management][user-profile-management]
    Handling user accounts, profiles, activation, and roles.

  • [πŸ”’ Permissions & Roles][permissions-roles]
    Configuring membership levels, access controls, and custom permissions.

  • [🏷 Customization & Theming][customization-theming]
    Applying templates/themes, styling pages, and basic design tweaks.

  • [πŸ”€ Navigation & Menus][navigation-menus]
    Configuring menus, site navigation, and user interface structure.

  • [πŸ’¬ Language & Translations][language-translations]
    Setting default languages, editing language keys, and creating multilingual sites.

  • [πŸ”” Notifications][notifications]
    Customizing email templates, push notifications, and in-site alerts.

  • [πŸ›  Maintenance & Upgrades][maintenance-upgrades]
    Updating UNA core and apps, backups, cron tasks, and overall site health.

  • [πŸ“ˆ Analytics & Reporting][analytics-reporting]
    Integrating external analytics, built-in stats, and best practices for measuring growth.


Apps (Modules)

Click to expand all official UNA Inc apps
  • Core β€œContext” Modules

    • [Groups][app-groups]
    • [Events][app-events]
    • [Spaces][app-spaces]
    • [Organizations][app-organizations]
    • [Channels][app-channels]
  • Core β€œContent” Modules

    • [Posts][app-posts]
    • [Discussions][app-discussions]
    • [Albums][app-albums]
    • [Photos][app-photos]
    • [Videos][app-videos]
    • [Files][app-files]
    • [Wiki][app-wiki]
    • [Polls][app-polls]
    • [Blogs][app-blogs]
  • Communication & Messaging

    • [Messenger (Jot Server)][app-messenger]
    • [Conversations / Chat+ (if separate)][app-chatplus]
  • Membership & Monetization

    • [Paid Levels][app-paid-levels]
    • [Market][app-market]
    • [Ads][app-ads]
    • [Payments][app-payments]
  • Engagement & Interaction

    • [Timeline (Feed)][app-timeline]
    • [Reactions][app-reactions]
    • [Comments][app-comments]
    • [Notifications][app-notifications]
  • Administration & Utilities

    • [Permissions][app-permissions]
    • [Developer][app-developer]
    • [Helpdesk][app-helpdesk]
    • [Maintenance Tools][app-maintenance-tools]
  • E-Learning & Specialized

    • [Classes][app-classes]
    • [Courses (if separate)][app-courses]

Dev Pages

Pages API allows to display pages which are built from studio. The main difference is that old system had column based pages, but the new one has layout based pages.

The new system has the following main features:

  • Layouts - page can have any structure, not just columns.
  • SEO - page can have own SEO options, like meta tags and meta keywords, as well as instructions for search bots.
  • Cache - page can be cached on the server.
  • Access control - page access can be controlled using member levels.

DB Structure

images/dev-pages-db-structure.png

Creating the Page object

1. Add record to sys_objects_page table:

  • object - name of the page object, in the format: vendor prefix, underscore, module prefix, underscore, internal identifier or nothing; for example: bx_profiles_view - profile view page.

  • title - name to display as page title.

  • module - the module this page belongs to.

  • cover - cover visibility.

  • cover_image - cover image ID.

  • type_id - page type, this is ID of the record from sys_pages_types table.

  • layout_id - page layout to use, this is ID of the record from sys_pages_layouts table.

  • submenu - submenu object to show as page menu.

  • visibile_for_levels - bit field with set of member level ids. To use member level id in bit field - the level id minus 1 as power of 2 is used, for example:

    • user level id = 1 -> 2^(1-1) = 1
    • user level id = 2 -> 2^(2-1) = 2
    • user level id = 3 -> 2^(3-1) = 4
    • user level id = 4 -> 2^(4-1) = 8
  • visibile_for_levels_editable - it determines if visibile_for_levels field is editable from page builder, visibility options can be overriden by custom class and shouldn't be editable in this case.

  • url - the page url, if it is static page.

  • meta_description - meta description of the page.

  • meta_keywords - meta keywords of the page.

  • meta_robots - instructions for search bots.

  • cache_lifetime - number of seconds to store cache for.

  • cache_editable - it determines if cache can be edited from page builder.

  • deletable - it determines if page can be deleted from page builder.

  • override_class_name - user defined class name which is derived from BxTemplPage.

  • override_class_file - the location of the user defined class, leave it empty if class is located in system folders.

Page can select appropriate menu automatically if module and object fields in sys_objects_page table are matched with module and name fields in sys_menu_items table.

2. Add page blocks to sys_pages_blocks table:

  • object - page object name this block belongs to.

  • cell_id - cell number in page layout to place block to.

  • module - module name this block belongs to.

  • title - block title.

  • designbox_id - design box to use to diplay page block, it is id of the record from sys_pages_design_boxes table.

  • visibile_for_levels - bit field with set of member level ids. To use member level id in bit field - the level id minus 1 as power of 2 is used, for example:

    • user level id = 1 -> 2^(1-1) = 1
    • user level id = 2 -> 2^(2-1) = 2
    • user level id = 3 -> 2^(3-1) = 4
    • user level id = 4 -> 2^(4-1) = 8
  • type - block type:

    • raw - HTML block, displayed in page builder as HTML textarea.
    • html - HTML block, displayed in page builder as visual editor, like TinyMCE.
    • lang - translatable language string, displayed in page builder as editable language key.
    • image - just an image, displayed in page builder as HTML upload form.
    • rss - RSS block, displayed in page builder as editable URL to RSS resource, along with number of displayed items.
    • menu - menu block, displayed as menu selector.
    • service - to display block content, the provided service method is used.
  • content - depending on type field:

    • raw - HTML string.
    • html - HTML string.
    • lang - language key.
    • image - image id in the storage and alignment (left, center, right) for example: 36#center
    • rss - URL to RSS with number of displayed items, for example: http://www.example.com/rss#4
    • menu - menu object name.
    • service - serialized array of service call parameters: module - module name, method - service method name, params - array of parameters.
  • text - text to index for search functionality.

  • text_updated - unix timestamp when text was updated.

  • deletable - is block deletable from page builder.

  • copyable - is block can be copied to any other page from page builder.

  • order - block order in particular cell.

Block design boxes are stored in sys_pages_design_boxes table:

  • id - consistent id, there are the following defines can be used in the code for each system block style:
    • 0 - BX_DB_CONTENT_ONLY - design box with content only - no borders, no background, no caption.
    • 1 - BX_DB_DEF - default design box with content, borders and caption.
    • 2 - BX_DB_EMPTY - just empty design box, without anything.
    • 3 - BX_DB_NO_CAPTION - design box with content, like BX_DB_DEF but without caption.
    • 10 - BX_DB_PADDING_CONTENT_ONLY - design box with content only wrapped with default padding - no borders, no background, no caption; it can be used to just wrap content with default padding.
    • 11 - BX_DB_PADDING_DEF - default design box with content wrapped with default padding, borders and caption.
    • 13 - BX_DB_PADDING_NO_CAPTION - design box with content wrapped with default padding, like BX_DB_DEF but without caption.
  • title - block name which is displayed in studio, describes block styles.
  • template - template name to use to display page block.

3. Display the Page.

Use the following sample code to display page:

    bx_import('BxDolPage');
    $oPage = BxDolPage::getObjectInstance('sample'); // 'sample' is 'object' field from 'sys_objects_page' table, it automatically creates instance of default or custom class by object name
    if ($oPage)
        echo $oPage->getCode(); // print page