Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Древовидные меню

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Плиззз помогите
focus
Отправлено: 29 Мая, 2008 - 16:06:06
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




Добрый день! Сегодня раешился написать древовидное меню. Преткнулся на этом шаге.
PHP:
скопировать код в буфер обмена
  1. <?
  2.         function submenu()
  3.         {
  4.                 $result = mysql_query("SELECT * FROM submenu WHERE id='1'", $db);
  5.                 $myrow = mysql_fetch_array($result);
  6.                 echo "<ul>";
  7.                 echo "<li>";
  8.                 echo $myrow["subline"];
  9.                 echo"</li>";
  10.                 echo "</ul>";
  11.         }
  12.  ?>
  13.  
  14. <div class="left-cont">
  15.                         <?PHP
  16.                                 $db     = mysql_connect("localhost","focus","123");
  17.                                 mysql_query("SET NAMES 'cp1251'");
  18.                                 mysql_select_db("focus",$db);
  19.                         ?>
  20.                         <ul class="menu">
  21.                                 <li><a href="#">
  22.                                         <?PHP
  23.                                                 $result = mysql_query("SELECT * FROM menu WHERE id='1'", $db);
  24.                                                 $myrow = mysql_fetch_array($result);
  25.                                                 echo $myrow["line"];
  26.                                         ?></a>
  27.                                 </li>
  28.                                 <li><a href="#">
  29.                                         <?PHP
  30.                                                 $result = mysql_query("SELECT * FROM menu WHERE id='2'", $db);
  31.                                                 $myrow = mysql_fetch_array($result);
  32.                                                 echo $myrow["line"];
  33.                                         ?></a>
  34.                                 </li>
  35.                                 <li><a href="" id="file" name="file">
  36.                                         <?PHP
  37.                                                 $result = mysql_query("SELECT * FROM menu WHERE id='3'", $db);
  38.                                                 $myrow = mysql_fetch_array($result);
  39.                                                 echo $myrow["line"];
  40.                                                 if(isset($file))
  41.                                                 {
  42.                                                         echo submenu();
  43.                                                 }
  44.                                         ?></a>
  45.                                 </li>
  46.                         </ul>
  47.                 </div>
  48.  


предлжите пожалуйсто свои альтернативы. Буду благодарен!
 
 Top
scuter
Отправлено: 29 Мая, 2008 - 17:55:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




я тоже сталкиваля с такой проблемой,
переписывал функции несколько раз,
PHP:
скопировать код в буфер обмена
  1. class menu
  2. {
  3.         var $menu_list;
  4.         var $menu_tree;
  5.         // инициализируем меню
  6.         function __construct($list = null)
  7.         {
  8.                 if(!is_null($list))
  9.                 {
  10.                         if(is_array($list))
  11.                         {
  12.                                 $this->menu_list = $list;
  13.                         }
  14.                 }
  15.         }
  16.         // проверяем какие узлы не имеют родителя
  17.         function detect($list)
  18.         {
  19.                 if(is_array($list))
  20.                 {
  21.                         foreach ($list as $key => $val)
  22.                         {
  23.                                 if(!isset($list[$val['vid']]) || ($val['vid'] == $val['id']))
  24.                                 {
  25.                                         $out[$val['vid']] = $val['vid'];
  26.                                 }
  27.                         }
  28.                         if(isset($out))
  29.                         {
  30.                                 return $out;
  31.                         }
  32.                         else
  33.                         {
  34.                                 return true;
  35.                         }
  36.                 }
  37.                 else
  38.                 {
  39.                         return true;
  40.                 }
  41.         }
  42.         // собираем массив тоесть дерево
  43.         function tree($list, $start=0)
  44.         {
  45.                 if(is_array($list))
  46.                 {
  47.                         foreach($list as $key => $val)
  48.                         {
  49.                                 if(isset($val['vid']))
  50.                                 {
  51.                                         if($val['vid'] == $start)
  52.                                         {
  53.                                                 $tree[$key]['node'] = $val;
  54.                                                 $nodes = $this->tree($list, $key);
  55.                                                 if(is_array($nodes))
  56.                                                 {
  57.                                                         $tree[$key]['menu'] = $nodes;
  58.                                                         $tree[$key]['ico'] = true;
  59.                                                 }
  60.                                                 else
  61.                                                 {
  62.                                                         $tree[$key]['ico'] = false;
  63.                                                 }
  64.                                         }
  65.                                 }
  66.                         }
  67.                         if(isset($tree))
  68.                         {
  69.                                 $this->menu_tree = $tree;
  70.                                 return $tree;
  71.                         }
  72.                         else
  73.                         {
  74.                                 return false;
  75.                         }
  76.                 }
  77.         }
  78.         // шаблонизация менюшки
  79.         function tpl_return()
  80.         {
  81.                
  82.         }
  83. }


соответственно шаблонизацию я не написал,
но поидее она делается просто рекурсивно.
тоесть для того чтобы собрать менюшку
делаем запрос и закидываем это всё в массив
примерно так
PHP:
скопировать код в буфер обмена
  1. //делаем запрос
  2. $result = mysql_query("SELECT * FROM submenu", $db);
  3. // собираем масссив
  4. while($myrow = mysql_fetch_array($result))
  5. {
  6.         $tree[$myrow['id']] = $myrow;
  7. }
  8. // создаём обьект меню
  9. $menu = new menu($tree);
  10. //собираем меню
  11. $menu->tree($menu->menu_list);
  12. //шаблонизируем меню
  13. $html_menu = $menu->tpl_return($menu->menu_tree);
  14. //выводим меню
  15. print $html_menu;
 
 Top
focus
Отправлено: 29 Мая, 2008 - 18:58:17
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




и как работает?
 
 Top
scuter
Отправлено: 29 Мая, 2008 - 22:14:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




у меня работаеть,
но тот скрипт который я дал отправмяется скрипту через JSON,
там скрипт сам выдаёт менюшку,
в принципе ты можеш сам написать,
тоже самое только по своему,
главное это собрать данные в многомерный массив,
я это сделал рекурсивно,
гдето на php.su написано как сделать дерево без рекурсии,
единственное что я в этой штуке не предусмотрел это сортировку страниц.
 
 Top
Вездеход
Отправлено: 30 Мая, 2008 - 07:49:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




2 focus
совет - не стоит делать столько запросов для создания лиш менюшки...
лучше написать одни но правельный. и все данные загнать в массив ккоторый уже и обрабатывать как захочется.


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
focus
Отправлено: 30 Мая, 2008 - 08:28:55
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




Вездеход пишет:
2 focus
совет - не стоит делать столько запросов для создания лиш менюшки...
лучше написать одни но правельный. и все данные загнать в массив ккоторый уже и обрабатывать как захочется.


спасибо! об этом уже подумал!
 
 Top
scuter
Отправлено: 30 Мая, 2008 - 14:47:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




если хочешь могу написать готовую функцию которая берёт запрс sql,
и выдаёт готовый html менюшки.
 
 Top
focus
Отправлено: 30 Мая, 2008 - 20:19:46
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




scuter пишет:
если хочешь могу написать готовую функцию которая берёт запрс sql,
и выдаёт готовый html менюшки.

Буду очень благодарен! У тебя аська есть?
 
 Top
scuter
Отправлено: 30 Мая, 2008 - 23:01:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




Цитата:
Буду очень благодарен! У тебя аська есть?

да конечно у меня их две, включаю их по мере нобходимости.
393333145
284330569
сейчас буду на связи.
ну вот и функция
PHP:
скопировать код в буфер обмена
  1. function menu($menu /*само меню*/, $root /*от куда наченать*/)
  2. {
  3.         // ели меню строка значит это SQL запрос
  4.         if(is_string($menu))
  5.         {
  6.                 //делаем запрос
  7.                 $q = mysql_query($menu);
  8.                 //собираем массив
  9.                 while ($sql = mysql_fetch_array($q))
  10.                 {
  11.                         $list[$q['id']] = $sql;
  12.                 }
  13.                 //возвращаем готовое меню(или не возвращаем)
  14.                 if(isset($list))
  15.                 {
  16.                         return menu($list, $root);
  17.                 }
  18.                 else
  19.                 {
  20.                         return false;
  21.                 }
  22.         }
  23.         //если это массив значит его надо обработать
  24.         elseif(is_array($menu))
  25.         {
  26.                 foreach ($menu as $key => $val)
  27.                 {
  28.                         if($val['vid'] == $root)
  29.                         {
  30.                                 $children_menu = menu($menu, $key);
  31.                                 $tree[] = '<li><a href="'.$val['link'].'">'.$val['name'].'</a>'.$children_menu.'</li>';
  32.                         }
  33.                 }
  34.                 if(isset($tree))
  35.                 {
  36.                         return '<ul>'.implode('<hr>', $tree).'</ul>';
  37.                 }
  38.                 else
  39.                 {
  40.                         return '';
  41.                 }
  42.         }
  43.         //если там что то не понятное
  44.         else
  45.         {
  46.                 return false;
  47.         }
  48. }

(Отредактировано автором: 31 Мая, 2008 - 01:17:41)

 
 Top
focus
Отправлено: 31 Мая, 2008 - 09:19:34
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




Прикольно спасибо за код. Буду сейчас над ним думать! Спасибо.
P.S. да я тебе кинул сообщение в асю!
 
 Top
focus
Отправлено: 02 Июня, 2008 - 13:35:13
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2008  
Откуда: Украина


Помог: 0 раз(а)




А как правильно выводить в html данные sql таблицы?

(Отредактировано автором: 02 Июня, 2008 - 13:37:42)

 
 Top
scuter
Отправлено: 02 Июня, 2008 - 16:20:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




просто
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT `subline`, `text`, `coll` FROM submenu WHERE id='1'", $db);
  2. while ($myrow = mysql_fetch_array($result))
  3. {
  4.         print $myrow["subline"];
  5.         print $myrow["text"];
  6.         print $myrow["coll"];
  7. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB