re: Symfony tartalmi oldalak
Időközben megszületett az első részmegoldás. Ha esetleg valakinek szüksége lenne ilyesmire, akkor egy query-ről van szó (1 db), ami az egész fa struktúrát képes kioperálni egy táblából, ami így néz ki:
Kód:
CREATE TABLE IF NOT EXISTS `page` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`page_title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`menu_title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`link_title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`content` mediumtext COLLATE utf8_unicode_ci,
`meta_keywords` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`sequence` mediumint(8) unsigned DEFAULT NULL,
`in_menu` tinyint(1) DEFAULT '1',
`is_active` tinyint(1) DEFAULT '1',
`viewed` mediumint(8) unsigned NOT NULL DEFAULT '0',
`root_id` bigint(20) DEFAULT NULL,
`lft` int(11) DEFAULT NULL,
`rgt` int(11) DEFAULT NULL,
`level` smallint(6) DEFAULT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`slug` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `page_sluggable_idx` (`slug`,`root_id`,`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
Sima nested set...
A query, ami ebből kiszedi a tartalmat sorrend szerint (sequence), pedig ilyen:
Kód:
SELECT
main_node.name as name,
(SELECT group_concat( parent.slug SEPARATOR '/' ) AS path
FROM page AS node, page AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.id = main_node.id
ORDER BY parent.lft) as path,
FROM page AS main_node, page AS main_parent
WHERE main_node.lft
BETWEEN main_parent.lft
AND main_parent.rgt
AND main_parent.id = (
SELECT root_id
FROM page
GROUP BY root_id
LIMIT 1 )
ORDER BY main_node.sequence
A trükk a lekérdezésben a GROUP_CONCAT() funkció, ami egy többsoros (de egy oszlopos) subquery sorait egy sorba tudja összefűzni egy elválasztóval, így az eredmény a következő (tesztadatok)
http://cyber-punk.org/query.png
Ebből menüt építeni már gyerekjáték. :)
Ami még nem világos, az az, hogy ezekkel az url-ekkel hogyan fogok majd lekérdezni az adatbázisból 1-1, rekordot, ha valakinek van ötlete, akkor azt megköszönném. :)
re: Symfony tartalmi oldalak
Közben rájöttem, hogy a megoldás egyszerű:
Kód:
SELECT
main_node.id
FROM page AS main_node
WHERE (SELECT group_concat( parent.slug SEPARATOR '/' ) AS path
FROM page AS node, page AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = main_node.id
ORDER BY parent.lft) = 'fooldal/2-oldal/2-oldal-alatt-1'
A végeredmény:
http://cyber-punk.org/query2.png
Bocsi, ha esetleg valaki úgy érzi, hogy átmeneti tárolónak használtam a fórumot a gondolataimnak. :)