Introduction
Let's talk about structure first. What happens when you request a URL? Look at the below structure to understand it better. Any domain is a site. In our example, www.hashtagcms.org is a site. A site must have a context and domain. Context is nothing but an identifier to use in API. Let’s see a flow in the below image.
Language
Each sites needs at least one language. Default language is English. You can create multiple languages from the admin panel. In below URL “en” is a language.
https://www.hashtagcms.org/en/web/home
Tenant
Each sites needs their own tenants. Such as;
- Web
- Android
- iOS
- PWA
- AMP
You can use/create as many as you want from the admin panel. In below URL “web” is a tenant.
https://www.hashtagcms.org/en/web/home
Category
For accessing a link we need a URL. We call it a category. In below URL “home” is category. Each category needs a theme.
https://www.hashtagcms.org/en/web/home
Theme
Theme is a combination of basic HTML and placeholder for the module. Placeholder is actually a hook. Multiple hooks can be added in a theme based on requirement or layout of the page. See below:
<div>
<header class="container-fluid">
%{cms.hook.HOOK_HEADER}%
</header>
<section>
%{cms.hook.HOOK_HERO_SECTION}%
</section>
<footer class="footer">
%{cms.hook.HOOK_FOOTER }%
</footer>
</div>
Hooks
Hook is a placeholder to have modules. Hook identifier is like below. HOOK_HEADER is an alias of a hook. You can create hook from the admin panel.
%{cms.hook.HOOK_HEADER}%
Modules
Module is responsible for populate the data. We have following type of modules. You can create frontend module from the admin panel. There are 6 types of frontend modules.
- Static: Fetch data from CMS table (content) ie. Content Module. View is not required.
- Query: Execute query from any table and database. (if database is different you need to add jdbc name in desc field.)
- Service: Fetch data from any URL. Return type will be json or text/html (if you need text/html; append 'resultType=html' in your service url)
- Custom: Don't do anything special. Just load the module.
- QueryService: It executes a query and pass those data to service URL. You can also get the data from the both.
- UrlService: You can invoke any service along with HTTP request dynamic parameters.