Navigation & Menus
Setting up site navigation, menu items, and URL structure.
🧭 Navigation and Menu
The navigation table is the heart of apidcms routing. Each record is one site page.
Table Fields
| Field | Type | Description |
|---|---|---|
title |
TEXT | Page name (in the menu and <title>) |
url |
TEXT | Address: docs, /about, blog |
page_type |
TEXT | Page type: page, dynamic, form, ai, landing, category |
source_table |
TEXT | Name of the data table (for dynamic, form, landing) |
page_config |
TEXT | JSON with page settings |
template |
TEXT | Template name: default or custom (e.g. docs) |
location |
TEXT | header / footer / none |
menu_order |
INTEGER | Order in the menu |
parent_id |
INTEGER | ID of the parent item (for nested menus) |
status |
TEXT | active / inactive |
Page Types
page_type |
Purpose | source_table |
Example URL |
|---|---|---|---|
page |
Static page | — | /about |
dynamic |
Dynamic list + records by slug | docs |
/docs, /docs/install |
form |
Contact form | contacts |
/contact |
ai |
AI chat | — | /chat |
landing |
Landing page from sections | sections |
/ |
category |
Filtered list | posts |
/blog/category/news |
How to Create a New Page
- Go to Admin Panel → Tables → navigation
- Click «Add Record»
- Fill in the fields:
title— what it will be calledurl— address (without leading slash:docs)page_type— select the typesource_table— table with datatemplate—defaultor your own template namepage_config— JSON with settings (optional)
status—active- Save
Done. The page is immediately accessible at the specified address.
page_config — JSON Settings
Detailed reference: page_config
{
"source_table": "docs",
"template": "docs",
"sort": {"field": "sort_order", "order": "ASC"},
"items_per_page": 20
}
template — How CMS Chooses the Template
| Value | List Template | Record Template |
|---|---|---|
default |
blog/list.html.twig |
blog/single.html.twig |
docs |
docs.html.twig |
docs_single.html.twig |
my/page |
my/page.html.twig |
my/page_single.html.twig |
If template is specified both in page_config and the template column of the navigation table — page_config takes priority.