рекурсивный вывод меню

Статус
В этой теме нельзя размещать новые ответы.

garlian

Новичок
рекурсивный вывод меню

Хочу осуществить вывод меню, для этого написал функцию и использую рекурсию.
PHP:
function show_sitestructure($conn,$in){
    $query = "SELECT id, name_lt FROM `cms_menu` WHERE conn=$conn;";
    $result = mysql_query($query);       
    while($rows = mysql_fetch_array($result))
    {             
      $id = $rows['id'];
      $name = $rows['name_lt'];
      echo $tree = "$name<br>";
      show_sitestructure($id, $in);
    }
   return;
  }
Она мне выводит просто в столбец всё. А хотелось бы вывести нормально.
хотя бы так
пунк1
- подпункт1
-- подподпункт1
- подпукт2
пункт2
пункт3

Но никак не могу врубиться как реализоват...
 

Sokil.Dmytro

Новичок
ты бы сам чтолибо со своего поста понял? ни тебе структуры базы ни описания полей...

делай один запрос - выбрать все
формируй массив с вложенностью подменю в меню
рекурсией выводи меню
 

Фанат

oncle terrible
Команда форума
garlian
передавай глубину отступа в параметрах

-~{}~ 22.08.07 14:03:

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

Sokil.Dmytro

Новичок
Фaнат
если так то проблематично будет дропдаун-меню делать

гг я первый :)
 

Фанат

oncle terrible
Команда форума
только массив-то твоих проблем не решит.
он только уменьшит количество запросов а базе.
 

Jenius

Новичок
У пунк1, пункт2, пункт3 есть идентификатор родителя например нуль.

Тогда проверяй
($conn == 0)?print $name.'<br>': print '-'.$name; При условии что струкрута 2-ух уровневая... Для многоуроневой почти так же.

Но лучше, конечно же играться с массивом.
 

440hz

php.ru
PHP:
<?
      echo '<div style="margin-left: 25px">'.$name.'';
      show_sitestructure($id, $in);
      echo '</div>';
?>
 

garlian

Новичок
Автор оригинала: Jenius
У пунк1, пункт2, пункт3 есть идентификатор родителя например нуль.

Тогда проверяй
($conn == 0)?print $name.'<br>': print '-'.$name; При условии что струкрута 2-ух уровневая... Для многоуроневой почти так же.

Но лучше, конечно же играться с массивом.
Как быть с много уровневой?

Структура такая:

id ------- name ---------- conn

1 ------- пунк1 ------------ 0
2 ------- пункт2 ----------- 0
3 ------- пункт3 ----------- 0
4 ------ подпункт1 -------- 1
5 ------ подпукт2 ---------- 1
6 ----- подподпункт1 ------ 4
 

Фанат

oncle terrible
Команда форума
точно так же, как быть, когда мало уровней.
какие у тебя проблемы-то? ты можешь русским языком объяснить?
ты не знаешь, каким хтмл кодом отступ делать, или что?
 

Фанат

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

-~{}~ 22.08.07 15:35:

еще, очень сильно помогает думать, когда ты ЗНЩАЕШЬ, ЧТО ХОЧЕШЬ ПОЛУЧИТЬ.
в данном случае - готовый хтмл код твоего меню.
просто кусок хтмл, который рисует ровно ту картинку, которую тебе надо.

а пока ты себе его не представляешь, писать код на пхп - мягко говоря - бесполезно
 

garlian

Новичок
Я код на ХТМЛ имею. Ты написал как его передавать - параметром функции, но никак его получить.
 

Фанат

oncle terrible
Команда форума
что значит - "никак его получить"?
ты не можешь получить параметр функции? или что?
 

garlian

Новичок
Я не понимаю как мне установить какой уровень вложенности.
 
передавать его в функцию
function drawMenu(...., $level = 0)
{
....
проверяешь если $level == 0 тогда ничего не дописываешь,
иначе str_repeat('-', $level);
если есть вложенность drawMenu(..., $level+1);
}
 

garlian

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

Фанат

oncle terrible
Команда форума
так проблема была в том, чтобы написать $level+1???
куда катится этот мир
 

garlian

Новичок
Не совсем, вообщем структура ХТМЛ такая:

PHP:
<table id="block_1_inside" cellspacing="0" cellpadding="0" border="0">
                
                  <tr>
                    <td class="h">&nbsp;</td>
                    <td colspan="4">Main</td>
                  </tr>
                  
                  
                      <tr>
                        <td class="con">&nbsp;</td>
                        <td class="p">&nbsp;</td>
                         <td colspan="3">About</td>
                      </tr>
                      
                          <tr>
                            <td class="l"></td>
                            <td class="con"></td>
                            <td class="p"></td>
                            <td colspan="2">Firms</td>
                          </tr>
                          
                              <tr>
                                <td class="l"></td>
                                <td class="l"></td>
                                <td class="end"></td>
                                <td class="p"></td>
                                <td>ROS</td>
                              </tr>
                          
                          <tr>
                            <td class="l"></td>
                            <td class="end"></td>
                            <td class="p"></td>
                            <td colspan="2">Mission</td>
                          </tr>
                     
                      <tr>
                        <td class="con"></td>
                        <td class="p"></td>
                        <td colspan="3">Services</td>
                      </tr>
                       
                      <tr>
                        <td class="end"></td>
                        <td class="p"></td>
                        <td colspan="3">Contacts</td>
                      </tr>
                </table>
Отступами показал вложенность.

O Main
|- O About
| |- O Firms
| | |_ O ROS
| |_ O Mission
|- O Services
|_ O Contacts

Вот типо того классы эти вот эти всякие черточки. Вот такое надо сдлеать. Вложенность может быть любая.
Вот я думаю как мне определять где скока и какие td писать
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху