Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избежать перекресного вложения разделов, Ребята, нужна помощь. Горю!!! 
:(
    Опции темы
OPG
Дата 20.8.2005, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 25.2.2005

Репутация: нет
Всего: 1



Имеются две функции. Вопросы о том, что все можно реализовать с помощью одной функции добавив еще
одну переменную, сейчас не поднимаются.

Таблица такова:

idSection:nameSection:idParent

, где idParent идентификатор родительского раздела

У меня два вопроса.
Данные функции являются немного переделанными примерами одной функции со статьи весьма распросранненой в инете.
Первый вопрос:
Зачем нужна переменная $lvl?
Второй вопрос более насущный:
Существует панель администрирования сайта.
В левой колонке выводится дерево
ShowTreeParentSection(0,0);
В правой колонке выводится дерево
ShowTreeChildSection(0,0);

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

После некоторого раздумья с задачей конечно справлюсь, но мне сдавать заказ в понедельник. Все написано, кроме вот
этого данного вопроса. Очень прошу сообщество помочь. На другие форумы даже не обращаюсь, т.к. опыт показывает, если
не помогут здесь, то в других форумах подавно делать нечего...

Кстати, с осени буду жить в Москве, и очень понравилось начинание о встречахsmile))
<?php
function ShowTreeParentSection($idParent, $lvl) {

include_once "connect.php";
global $lvl;
$lvl++;

$query="select idSection, nameSection, idParent from section where idParent='$idParent' order by nameSection";
$result=mysql_query($query);

if (mysql_num_rows($result) > 0)
{
echo("<ol>\n");
while ( $row = mysql_fetch_array($result) )
{
$id1 = $row[0];
echo("<ol>\n");
echo("<input type=\"radio\" name=\"idSectionParent\" value=\"$id1\">$row[1] \n");
echo("</ol>\n");
ShowTreeParentSection($id1, $lvl);
$lvl--;
}
echo("</ol>\n");
}
}

function ShowTreeChildSection($idParent, $lvl) {

include_once "connect.php";
global $lvl;
$lvl++;

$query="select idSection, nameSection, idParent from section where idParent='$idParent' order by nameSection";
$result=mysql_query($query);

if (mysql_num_rows($result) > 0)
{
echo("<ol>\n");
while ( $row = mysql_fetch_array($result) )
{
$id1 = $row[0];
echo("<ol>\n");
echo("<input type=\"radio\" name=\"idSectionChild\" value=\"$id1\">$row[1] \n");
echo("</ol>\n");
ShowTreeChildSection($id1, $lvl);
$lvl--;
}
echo("</ol>\n");
}
}
?>


Это сообщение отредактировал(а) OPG - 20.8.2005, 22:27
PM MAIL   Вверх
Mal Hack
Дата 21.8.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Так. Поясни малость задачу, что ты понимаешь под перекрестностью.
ЗЫ:
Цитата(OPG @ 20.8.2005, 23:22)
Зачем нужна переменная $lvl?

Судя по всему level - уровень тобишь. У тебя этого нет,
PM ICQ   Вверх
OPG
Дата 21.8.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 25.2.2005

Репутация: нет
Всего: 1



Сам понимаю, что уровень. Но и в примере, такового нет. Зачем? Вот ссылка на оригинал http://activex.net.ru/docs/tree.shtml.
Теперь перекресное вложение. Предположим имеются разделы 1, 2, 3. Юзер вкладывает в 1 - 2, в 2-3, а в 3-1. Получается функция зацикливается, и вообще при большом количестве разделов юзер может такого намешать, что придется писать в админке службу, которая устанавливает в ноль все разделы, а юзер начинает с нуля строить структуру сайта. Проще говоря, если такое может произойти, то обязательно произойдет, и бороться с этим необходимо на уровне вкладывания разделов.
Т.е. как я понимаю, должна иметься рекурсивная функция, которая проверяет всю ветку раздела и проверяет наличие двух одинаковых id. Если таковые имеются, то выход и предупреждение.
PM MAIL   Вверх
Mal Hack
Дата 21.8.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Я так понимаю само дерево ты строишь. Как мне кажется тут надо сделать тоже. Получить все ПОДкатегории для той категории у которой ты хочешь изменить. И посмотреть, есть ли в полученных категориях категория в которую ты хочешь переместить категорию. Если есть, т.е. 1ниже по уровню к 3, значит ошибка.
Т.е. если куда переносишь - ниже по уровню, то нельзя. Если выше, то можно.
PM ICQ   Вверх
IZ@TOP
Дата 21.8.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



А можно спросить как эта тема относится к форуму "Профессиональная разработка"?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.