Dynamic properties
The menu of this page is generated using the dynamic
component with the following SQL query:
SELECT 'dynamic' AS component, json_object(
'component', 'shell',
'title', 'SQLPage documentation',
'link', '/',
'menu_item', json_array(
json_object(
'link', '/',
'title', 'Home'
),
json_object(
'title', 'Community',
'submenu', json_array(
json_object(
'link', '/blog.sql',
'title', 'Blog'
),
json_object(
'link', 'https://github.com/sqlpage/SQLPage/issues',
'title', 'Issues'
),
json_object(
'link', 'https://github.com/sqlpage/SQLPage/discussions',
'title', 'Discussions'
),
json_object(
'link', 'https://github.com/sqlpage/SQLPage',
'title', 'Github'
)
)
)
)
) AS properties
Dynamic properties from the database
One could also store the menu items in the database, using a structure like this:
CREATE TABLE menu_items (
id INTEGER PRIMARY KEY,
title TEXT,
link TEXT,
parent_id INTEGER REFERENCES menu_items(id)
);
INSERT INTO menu_items (id, title, link, parent_id) VALUES
(1, 'Home', '/', NULL),
(2, 'Community', NULL, NULL),
(3, 'Blog', 'blog.sql', 2),
(4, 'Issues', 'https://github.com/sqlpage/SQLPage/issues', 2),
(5, 'Discussions', 'https://github.com/sqlpage/SQLPage/discussions', 2),
(6, 'Github', 'https://github.com/sqlpage/SQLPage', 2);
Then, one could use the following SQL query to fetch and generate the menu from the database:
SELECT 'dynamic' AS component, json_object(
'component', 'shell',
'title', 'SQLPage documentation',
'link', '/',
'menu_item', json_group_array(
json_object(
'link', link,
'title', title,
'submenu', (
select json_group_array(
json_object(
'link', submenu.link,
'title', submenu.title
)
) FROM menu_items AS submenu
WHERE menu_items.id = submenu.parent_id
HAVING COUNT(*) > 0
)
)
)
) AS properties
FROM menu_items
WHERE parent_id IS NULL