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]

Browseable categories

This tutorial is how to make browseable categories. For example we'll add "Occupation" field to "Persons" module and make it possible to browse all people of the same occupation.

Create a list

Go to Studio > Forms > Data Lists > click "Add New List". We'll add a list for Occupation, make sure to enter list name for all languages, you can switch between languages in the form input by clicking on a flag icon near the input.

/images/browseable-categories-create-list.png

After list is created, fill it with the actual values. Click on "0 items" link near just created list to go to the another grid where you can add new items. Click "Add New Item" and add necessary items. We'll add items for occupation, such as tailor, builder, barber, etc.

Create a form field with select box

Go to Studio > Forms > Fields > Select desired module (in our case "Persons") > Select desired display (in our case "Add Person") > click "Add New Field" > select "select" type > in the popup specify values for your new field, paying attention to "Values" field, you need to select just created list (in our case "Occupation").

/images/browseable-categories-create-form-field.png

After field is created you need to make it visible in other form displays, like "Edit Person", "View Person" and "View Full Person" form displays.

Test changes

Try to create or edit profile and select some value from the created list, then go to profile view to see the changes:

/images/browseable-categories-test.png

As you can see "Tailor" value isn't clickable, so you can't see all tailors on the site.

Making select field browse-able

To make "select" field clickable you need to make some direct DB modifications.

First, lets add category object. For example for "Occupation" field it will look like this:

INSERT INTO `sys_objects_category` SET
`object` = 'my_custom_occupation', /* you can choose any name you want */
`search_object` = 'bx_persons', /* the name of the search object from `sys_objects_search` table, the content displayed in, usually this is single search object from the module the content belong to */
`form_object` = 'bx_person', /* from object from `sys_objects_form` table where new field was added */
`list_name` = 'Occupation', /* the name of list, `key` field from `sys_form_pre_lists` table which was added in previous steps */
`table` = 'bx_persons_data', /* table name with the content */
`field` = 'occupation', /* name of the field which was added in previous steps */
`join` = 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`content_id` = `bx_persons_data`.`id` AND `sys_profiles`.`type` = ''bx_persons'')', /* custom JOIN clause for the SQL query */
`where` = 'AND `sys_profiles`.`status` = ''active''', /* custom WHERE clause for the SQL query */
`override_class_name`= '', /* custom class name */
`override_class_file` = ''; /* custom class file */

To find particular values for this table you need to browse SQL tables mentioned near each field above.

After record is added, try to refresh page with test profile, now this field becomes a link, after clicking this field it will list all profiles with the same field value:

/images/browseable-categories-making-field-clickable.png

Adding block with names and counters

To add a block like this one:

/images/browseable-categories-adding-block.png

Install Developer module (if it isn't installed yet). Then go to Studio > Developer > Pages > Select module you want to add block to (Persons in our case) > Select page to add block to ("New People" in our sample case) > click "Add Blocks" > Select "Skeletons" and choose "service" blocks. Click on added block, name it as you want, then insert the following in "Code" field:

array (
  'module' => 'system',
  'method' => 'categories_list',
  'params' => array ('my_custom_occupation'),
  'class' => 'TemplServiceCategory',
)

my_custom_occupation in above code is categories object name we added before, so you need to replace it with yours.

You can specify some options there, for example:

array (
  'module' => 'system',
  'method' => 'categories_list',
  'params' => array ('my_custom_occupation', array('show_empty_categories' => true)),
  'class' => 'TemplServiceCategory',
)

Also show_empty parameter is supported, it will show "Empty" message if no one category has any content in it.