Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Система каталогов
 
 автор: Doorgen   (28.02.2009 в 12:52)   письмо автору
 
 

Подскажи пожалуйста как делаються системы каталогов в CMS?

Ну подразделы как подкрепляються к разделам, все дерево как должно выглядеть?

Просто можно привязывать к id подразедл ну тогда удалять крайне неудобно.

Например есть раздел с id - 7

Подраздел sub_id - 7

Тогда при запросе в разделе 7 будет выходить его подраздел, но как такую систему тогда удалять? Какой же тогда должен быть цикл что бы удалять такое дерево.

  Ответить  
 
 автор: cheops   (28.02.2009 в 13:00)   письмо автору
 
   для: Doorgen   (28.02.2009 в 12:52)
 

Рекурсивно зачастую удаляют, спускаясь по дереву каталога. У вас какая сейчас структура базы данных?

  Ответить  
 
 автор: Doorgen   (28.02.2009 в 15:23)   письмо автору
 
   для: cheops   (28.02.2009 в 13:00)
 

На данный момент никакой. Вот и думаю как бы лучше сделать.

Но было что то вроде:

id_page - id страницы

level  - уровень страницы, ну 1 это та страница которая отображаеться на в основной нафигации, 2 это уже подраздел, 3 невидемый подраздел на который только даеться ссылка

sub_page - вот это и есть подраздел если (если лвл не 1) то тут пишеться id раздела к которому он привязан

headline - загаловок

description - описание

text - ну собствено и сам текст 


А удалял ужасными циклами, например что бы удалить раздел я искал все его подразделы, такием образом было 3 уровня.

Вот и хотел узнать как можно сделать иначе, что бы подуровней было больше.

  Ответить  
 
 автор: Doorgen   (02.03.2009 в 17:00)   письмо автору
 
   для: cheops   (28.02.2009 в 13:00)
 

Ну что можете посоветовать?

  Ответить  
 
 автор: Front   (02.03.2009 в 17:13)   письмо автору
 
   для: Doorgen   (02.03.2009 в 17:00)
 

Наверно лучше сделать так:

id_page - id страницы 

headline - загаловок 

description - описание 

text - ну собствено и сам текст  

id_parent_page - id родительской страницы

  Ответить  
 
 автор: Doorgen   (02.03.2009 в 20:28)   письмо автору
 
   для: Front   (02.03.2009 в 17:13)
 

И что тут лучшего? а точнее что тут такого нового.? тут только левла нету... и все,

  Ответить  
 
 автор: Front   (04.03.2009 в 11:14)   письмо автору
 
   для: Doorgen   (02.03.2009 в 20:28)
 

Вы кажется спрашивали Как делаются системы каталогов в CMS? Так вот в большинстве случаев именно так они и делаются. У каждой записи есть id его родителя.
А про новизну решения я ничего не говорил! Ужасные циклы здесь не нужны, рекурсивная функция вас спасет...

  Ответить  
 
 автор: Doorgen   (04.03.2009 в 11:30)   письмо автору
 
   для: Front   (04.03.2009 в 11:14)
 

Опишите пожалуйста что такое рекурсивная функция

Буду очень вам признателен.

  Ответить  
 
 автор: Front   (04.03.2009 в 11:36)   письмо автору
 
   для: Doorgen   (04.03.2009 в 11:30)
 

Функция которая в процессе выполнения будет вызывать саму себя:
function test() { 
разные операторы 
test();
разные операторы
}

  Ответить  
 
 автор: Doorgen   (04.03.2009 в 20:38)   письмо автору
 
   для: Front   (04.03.2009 в 11:36)
 

че то всеравно не доганяю а как можно удалить 5ти уровневый каталог?

  Ответить  
 
 автор: cheops   (05.03.2009 в 00:18)   письмо автору
 
   для: 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("Ошибка удаления каталога");
?>

  Ответить  
 
 автор: Trianon   (05.03.2009 в 00:29)   письмо автору
 
   для: Doorgen   (04.03.2009 в 20:38)
 

вот здесь еще парочка примеров:
http://softtime.ru/forum/read.php?id_forum=3&id_theme=56816

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования