|
|
|
| Подскажи пожалуйста как делаються системы каталогов в CMS?
Ну подразделы как подкрепляються к разделам, все дерево как должно выглядеть?
Просто можно привязывать к id подразедл ну тогда удалять крайне неудобно.
Например есть раздел с id - 7
Подраздел sub_id - 7
Тогда при запросе в разделе 7 будет выходить его подраздел, но как такую систему тогда удалять? Какой же тогда должен быть цикл что бы удалять такое дерево. | |
|
|
|
|
|
|
|
для: Doorgen
(28.02.2009 в 12:52)
| | Рекурсивно зачастую удаляют, спускаясь по дереву каталога. У вас какая сейчас структура базы данных? | |
|
|
|
|
|
|
|
для: cheops
(28.02.2009 в 13:00)
| | На данный момент никакой. Вот и думаю как бы лучше сделать.
Но было что то вроде:
id_page - id страницы
level - уровень страницы, ну 1 это та страница которая отображаеться на в основной нафигации, 2 это уже подраздел, 3 невидемый подраздел на который только даеться ссылка
sub_page - вот это и есть подраздел если (если лвл не 1) то тут пишеться id раздела к которому он привязан
headline - загаловок
description - описание
text - ну собствено и сам текст
|
А удалял ужасными циклами, например что бы удалить раздел я искал все его подразделы, такием образом было 3 уровня.
Вот и хотел узнать как можно сделать иначе, что бы подуровней было больше. | |
|
|
|
|
|
|
|
для: cheops
(28.02.2009 в 13:00)
| | Ну что можете посоветовать? | |
|
|
|
|
|
|
|
для: Doorgen
(02.03.2009 в 17:00)
| | Наверно лучше сделать так:
id_page - id страницы
headline - загаловок
description - описание
text - ну собствено и сам текст
id_parent_page - id родительской страницы
|
| |
|
|
|
|
|
|
|
для: Front
(02.03.2009 в 17:13)
| | И что тут лучшего? а точнее что тут такого нового.? тут только левла нету... и все, | |
|
|
|
|
|
|
|
для: Doorgen
(02.03.2009 в 20:28)
| | Вы кажется спрашивали Как делаются системы каталогов в CMS? Так вот в большинстве случаев именно так они и делаются. У каждой записи есть id его родителя.
А про новизну решения я ничего не говорил! Ужасные циклы здесь не нужны, рекурсивная функция вас спасет... | |
|
|
|
|
|
|
|
для: Front
(04.03.2009 в 11:14)
| | Опишите пожалуйста что такое рекурсивная функция
Буду очень вам признателен. | |
|
|
|
|
|
|
|
для: Doorgen
(04.03.2009 в 11:30)
| | Функция которая в процессе выполнения будет вызывать саму себя:
function test() {
разные операторы
test();
разные операторы
}
|
| |
|
|
|
|
|
|
|
для: Front
(04.03.2009 в 11:36)
| | че то всеравно не доганяю а как можно удалить 5ти уровневый каталог? | |
|
|
|
|
|
|
|
для: Doorgen
(04.03.2009 в 20:38)
| | Пишется примерно такая функция
<?php
function get_subcatalog_list($id_catalog, $tbl)
{
// Предотвращаем SQL-инъекцию
$id_catalog = intval($id_catalog);
// Извлекаем подчинённые каталоги
$query = "SELECT id_catalog FROM $tbl
WHERE id_parent = $id_catalog";
$cat = mysql_query($query);
if(!$cat) exit("Ошибка извлечения параметров каталога");
if(mysql_num_rows($cat))
{
$arr[] = $id_catalog;
while($catalog = mysql_fetch_array($cat))
{
$arr[] = $catalog['id_catalog'];
$new = get_subcatalog_list($catalog['id_catalog'], $tbl);
if(!empty($new)) $arr = array_merge($arr, $new);
}
return $arr;
}
else return FALSE;
}
?>
|
Функция возвращает массив с первичными ключами id_catalog всех подчиненных каталогов, достаточно воспользоваться оператором IN чтобы уничтожить текущий каталог и все подчиненные каталоги
<?php
$arr = get_subcatalog_list(15, $tbl)
$query = "DELETE FROM $tbl WHERE id_catalog IN (".implode(",", $arr).")";
if(!mysql_query($query)) exit("Ошибка удаления каталога");
?>
|
| |
|
|
|
|