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

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

  • smv

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

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


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


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

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

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



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


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

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

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

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


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

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

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

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

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

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

    // Функция для чтения переменной из cookie
    function getCookie(name) {
    var cookie = &quot; &quot; + document.cookie;
    var search = &quot; &quot; + name + &quot;=&quot;;
    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(&quot;;&quot;, 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(&quot;А вот теперь страница обновилась и мы видим только первый уровень… так как переменная i=&quot; + i);
    alert(&quot;Значение куки&quot; + getCookie(&quot;tree_view&quot;));
    t = setInterval(show, 5); // развертываем/сворачиваем с заданным интервалом
    }


    function show() {
    var el;

    if(el = document.getElementById(lit + &quot;.&quot; + i)) {

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

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


    include (&quot;connect_bd.php&quot;);

    $sql_pid = &quot;SELECT DISTINCT pid FROM menu&quot;;
    $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[&#39;pid&#39;];
    }

    function ShowTree($ParentID, $lvl) {

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

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

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

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

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

    echo(&quot;<span &quot;.$style1.&quot; title=&#39;&quot;.$row[&quot;name&quot;].&quot;&#39;>&quot;.$b1.$row[&quot;name&quot;].$b2.&quot; </span> \n&quot;);

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


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

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

    и вот это

    el.style.display = (el.style.display == &#39;block&#39;)?&#39;none&#39;:&#39;block&#39;;
    i++;

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

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

  • NRG

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

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

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

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

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


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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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