ФорумПрограммированиеPHP для идиотов → PHP, рекурсия, дерево

PHP, рекурсия, дерево

  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 22 марта 2010 г. 18:57, спустя 28 минут 11 секунд

    Подскажите кто нибудь как такую задачу решить а то мозги уже раком всттали
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 5:55, спустя 10 часов 57 минут 50 секунд

    Это уебанство хранить деревья структурой только с parent_id, убивать кучей запросов базу зачем?
    а это ЧТО?
    global $db;
    По моему не за ту ты задачу взялся.
    ПС Пардон за мой французский, но из этих ошибок в дальнейшем падают большие проекты
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 8:25, спустя 2 часа 30 минут 13 секунд


    Это уебанство хранить деревья структурой только с parent_id, убивать кучей запросов базу зачем?
    а это ЧТО?
    global $db;
    По моему не за ту ты задачу взялся.
    ПС Пардон за мой французский, но из этих ошибок в дальнейшем падают большие проекты


    1. За твой французский извеняю ибо он у тебя никакой
    2. Дерево разрабатывается не для больших проектов, а для вполне конкретной задачи.
    3. global $db; определение переменной $db как глобальной
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 8:52, спустя 26 минут 40 секунд

    3. global $db; определение переменной $db как глобальной
    Это типа сострил?
    Твой файл: Делаем global $db;
    потом ты используешь его в другом файле
    потом дали твой проект доработать мне. Я и думаю что же такое $db? Наверное "Даша - блядь", соглашаюсь с этим $db=true. И врезаюсь в твой проект. Всё что дальше, где использовалось $db падает….
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 9:02, спустя 10 минут 23 секунды


    3. global $db; определение переменной $db как глобальной
    Это типа сострил?
    Твой файл: Делаем global $db;
    потом ты используешь его в другом файле
    потом дали твой проект доработать мне. Я и думаю что же такое $db? Наверное "Даша - блядь", соглашаюсь с этим $db=true. И врезаюсь в твой проект. Всё что дальше, где использовалось $db падает….


    Я конечно понимаю что это очень важная тема… Ну что ты приципился к бедной переменной db. Что она жить чтоль мешает. Я конечно понимаю что мое дерево плохое… Но это мое дерево. Я конечно понимаю что из за такого дерева большие проекты валятся, но у меня маленький проект. То что ты сказал я принял это во внимание… В следующих своих кодах я обязательно это учту. Но все-таки хотелось бы еще и получить по тому вопросу который я задал ранее… Если конечно это возможно.

    Спасибо за внимание….

    Ух Josh извини если что не так… Накипело…
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 23 марта 2010 г. 9:09, спустя 6 минут 22 секунды

    Ух Josh извини если что не так… Накипело…
    http://nbt1.ru/d/32961/d/image_28.jpg
    В чем сейчас проблема?
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 9:15, спустя 6 минут 18 секунд


    Ух Josh извини если что не так… Накипело…
    http://nbt1.ru/d/32961/d/image_28.jpg
    В чем сейчас проблема?


    Гениально… Ха Ха Ха…. Давайте не будем отклонятся от темы… Если даже в ней кто-то не видит никакой ценности или кому нечего сказать, давай те не будем засорять эфир, бесполезно сотрясать воздух. Быть может кто - то зайдет… захочет мне помоч… наткнется на всякий бред и и сразу уйдет… Так что прошу по существу товарищи заседатели…
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 23 марта 2010 г. 9:17, спустя 1 минуту 47 секунд



    Ух Josh извини если что не так… Накипело…
    http://nbt1.ru/d/32961/d/image_28.jpg
    В чем сейчас проблема?


    Гениально… Ха Ха Ха…. Давайте не будем отклонятся от темы… Если даже в ней кто-то не видит никакой ценности или кому нечего сказать, давай те не будем засорять эфир, бесполезно сотрясать воздух. Быть может кто - то зайдет… захочет мне помоч… наткнется на всякий бред и и сразу уйдет… Так что прошу по существу товарищи заседатели…
    Я спросил по существу!!!!111 *пошла пена*
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz 23 марта 2010 г. 9:22, спустя 5 минут 33 секунды

    а не проще всего засунь в куки клон элемента, в котором у тебя дерево, а потом применить его?
    Спустя 208 сек.
    smv, ты хочешь что бы тебе помогли сделать так как хочешь ты, а сам не делаешь так как тебе говорят, и даже видимо не читаешь


    smv, бля, ну буквально вчера была ссылка про всю фигню

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

    http://phpclub.ru/faq/Tree/Internal?v=38y
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 25 марта 2010 г. 14:53, спустя 2 дня 5 часов 30 минут

    <!–
    // Функция для записи переменной в cookie
    function setCookie (name, value) {
    document.cookie = name + "=" + escape(value);
    }

    // Функция для чтения переменной из cookie
    function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
    offset = cookie.indexOf(search);
    if (offset != -1) {
    offset += search.length;
    end = cookie.indexOf(";", offset)
    if (end == -1) {
    end = cookie.length;
    }
    setStr = unescape(cookie.substring(offset, end));
    }
    }
    return(setStr);
    }



    var t,lit,i;
    function tree(liter) {
    lit=liter;//литера
    i=1;//счетчик
    alert("А вот теперь страница обновилась и мы видим только первый уровень… так как переменная i=" + i);
    alert("Значение куки" + getCookie("tree_view"));
    t = setInterval(show, 5); // развертываем/сворачиваем с заданным интервалом
    }


    function show() {
    var el;

    if(el = document.getElementById(lit + "." + i)) {

    setCookie("tree_view", lit); // Записываем значение переемнной i в куки
    alert(getCookie("tree_view"));

    el.style.display = (el.style.display == 'block')?'none':'block';
    i++;
    }
    else clearInterval(t);
    }
    –>


    include ("connect_bd.php");

    $sql_pid = "SELECT DISTINCT pid FROM menu";
    $result_sql_pid = mysql_query($sql_pid, $db);
    $pid_arr = array();
    while ($row_result_sql_pid = mysql_fetch_array($result_sql_pid))
    {
    $pid_arr[] = $row_result_sql_pid['pid'];
    }

    function ShowTree($ParentID, $lvl) {

    global $db;
    global $lvl;
    global $pid_arr;
    $lvl++;

    $sSQL="SELECT id,name,pid FROM menu WHERE pid=".$ParentID."";
    $result=mysql_query($sSQL, $db);

    if (mysql_num_rows($result) > 0) {
    echo("<UL>\n");
    while ( $row = mysql_fetch_array($result) ) {
    $ID1 = $row["id"];
    $i++;
    if (in_array($ID1, $pid_arr)){
    $b1 = "<b>";
    $b2 = "</b>";
    $style1 = "onclick=\"tree('".$ID1."')\"";
    }

    if (!in_array($ID1, $pid_arr) || $lvl >= 2){
    $style2 = "id='".$row['pid'].".".$i."' style='display: none';";
    }

    echo("<LI ".$style2.">\n");

    echo("<span ".$style1." title='".$row["name"]."'>".$b1.$row["name"].$b2." </span> \n");

    ShowTree($ID1, $lvl);
    $lvl–;
    }
    echo("</UL>\n");
    }
    }
    ShowTree(0, 0);


    Подскажите пожалуйста как доработать Javascript чтоб развернутое дерево после обновления не сворачивалось. В JS ьам у меня коментарии есть когда какие переменные заношу в куки. Там в куки заношу переменную lit она показывает id "родителя". По смыслу я понял что что при обновлении страницы надо загружать функцию Show… Точнее не совсем ее, а написать так:

    el = document.getElementById(lit + "." + i) , что опеределяет какрас тот нужный раздел который необходимо открыть

    и вот это

    el.style.display = (el.style.display == 'block')?'none':'block';
    i++;

    что собственно и означает что надо отобразить нужные нам элементы.

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

  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 17:33, спустя 2 часа 40 минут 20 секунд

    есть такая вещь как события.
    вешаешся на событие загрузки ДОМа, и там выполняешь свою коварную ф-ию
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 25 марта 2010 г. 18:15, спустя 41 минуту 46 секунд


    есть такая вещь как события.
    вешаешся на событие загрузки ДОМа, и там выполняешь свою коварную ф-ию


    спасибо огроменное … кажется мой мозг начал думать… что то уже получается
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 20:22, спустя 2 часа 6 минут 37 секунд

    smv, ахуеть, прогресс
    Сапожник без сапог
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 29 марта 2010 г. 7:32, спустя 3 дня 11 часов 9 минут

    Сварганил вот такую функцию:

    function show_tree(){
    var lit_cookie;
    lit_cookie = getCookie("tree_view");
    if (lit_cookie !== null){
    document.getElementById(lit_cookie + "." + i).style.display = (document.getElementById(lit_cookie + "." + i).style.display == 'block')?'none':'block';
    }
    }


    При загрузки или обновлении страницы ее запускаю (<body onload="show_tree()">)

    Столкнулся с такой проблемой, что выводится только один элемент. Так как значению переменной i можно присвоить одно значение… Если перед отображением разделов написать var i=1, а после i++; то так все равно не работает.

    Может я что то не так делаю?
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 29 марта 2010 г. 9:08, спустя 1 час 36 минут 46 секунд

    Точнее я знаю что я делаю что то не так… Вопрос 1. Как мне сделать так что функция show_tree() извлекала все элементы? Ну и вообще подскажите где у меня ошибки

Пожалуйста, авторизуйтесь, чтобы написать комментарий!