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.