Как связать веб-контент в базе данных с моделью вложенного множества?

Моя вложенная таблица набора выглядит следующим образом.

 create table depts (
  id int identity(0, 1) primary key
  , lft int
  , rgt int
  , name nvarchar(60)
        , abbrv nvarchar(20)
 );

Испытательные отделы.

insert into depts (lft, rgt, name, abbrv) values (1, 14, 'root', 'r');
insert into depts (lft, rgt, name, abbrv) values (2, 3, 'department 1', 'd1');
insert into depts (lft, rgt, name, abbrv) values (4, 5, 'department 2', 'd2');
insert into depts (lft, rgt, name, abbrv) values (6, 13, 'department 3', 'd3');
insert into depts (lft, rgt, name, abbrv) values (7, 8, 'sub department 3.1', 'd3.1');
insert into depts (lft, rgt, name, abbrv) values (9, 12, 'sub department 3.2', 'd3.2');
insert into depts (lft, rgt, name, abbrv) values (10, 11, 'sub sub department 3.2.1', 'd3.2.1');

Моя таблица веб-контента выглядит следующим образом.

 create table content (
  id int identity(0, 1)
  , dept_id int
  , page_name nvarchar(60)
  , content ntext
 );

Тестовый контент.

insert into content (dept_id, page_name, content) 
 values (3, 'index', '<h2>welcome to department 3!</h2>');
insert into content (dept_id, page_name, content) 
 values (4, 'index', '<h2>welcome to department 3.1!</h2>');
insert into content (dept_id, page_name, content) 
 values (6, 'index', '<h2>welcome to department 3.2.1!</h2>');
insert into content (dept_id, page_name, content) 
 values (2, 'what-doing', '<h2>what is department 2 doing?/h2>');

Я пытаюсь запросить правильный контент страницы (из таблицы контента) на основе указанного URL-адреса. Я могу легко выполнить эту задачу с корневым отделом. Однако запрос отдела с несколькими глубинами оказывается немного сложнее. Например:

http://localhost/departments.asp?d3/ (Should return <h2>welcome to department 3!</h2>)
http://localhost/departments.asp?d2/what-doing (Should return <h2>what is department 2 doing?</h2>)

Я не уверен, можно ли это создать в одном запросе или потребуется какая-то рекурсивная функция. Кроме того, если после последнего / ничего нет, то предположим, что нам нужна индексная страница.

По сути, это будет серверная часть небольшой CMS. Итак, я подумал, что вы можете создавать новые страницы с уникальным именем, связанным с категорией. В моем случае это были бы отделы. Я осмотрелся и обнаружил, что вариантов CMS для ASP Classic не так много.

Как это можно сделать? Комментарии и предложения также приветствуются.

Спасибо.


person Mike    schedule 17.06.2010    source источник


Ответы (1)


Я сделал что-то очень похожее на это (кроме PHP/MySQL). У меня нет перед собой кода, но я был бы рад предоставить его вам, если вы считаете, что он может помочь:

Я считаю, что основное отличие моего подхода заключалось в том, что у меня не было отдельной таблицы с вложенным набором, у меня просто были содержимое и lft/rgt вместе в одной таблице. Управление контентом позволяло пользователю создавать иерархию контента настолько глубоко, насколько он осмелился, поэтому сайт мог получиться примерно таким:

http://site/tier1-page
http://site/tier1-page/tier2-pageA
http://site/tier1-page/tier2-pageB
http://site/tier1-page/tier2-pageB/tier3-pageI
http://site/tier1-page/tier2-pageB/tier3-pageII

...и так далее.

person Matthew Groves    schedule 24.06.2010
comment
Будем очень признательны, если вы опубликуете свое решение. - person Mike; 25.06.2010
comment
напишите мне в твиттере или что-то в этом роде, и я пришлю вам копию - person Matthew Groves; 25.06.2010