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 :: HTML в PHP

 PHP.SU

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


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

> Без описания
jovani
Отправлено: 14 Февраля, 2013 - 21:14:40
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2012  


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




Привет всем! Ребята имею нижеследующий html код. Хочу выводить его на PHP, чтоб в дальнейшем связать с базой, но что не делал не удается (( Пытался через циклы, но не получается. Помогите пожалуйста, как можно его вывести на PHP
CODE (htmlphp):
скопировать код в буфер обмена
  1. <ul>
  2. <li><a href="#">Item 1</a></li>
  3. <li><a href="#">Folder 2.1</a>
  4.     <ul>
  5.         <li><a href="#">Folder 2.1.1</a>
  6.                 <ul>
  7.                 <li><a href="#">Sub Item 2.1.1.1</a></li>
  8.                 <li><a href="#">Sub Item 2.1.1.2</a></li>
  9.                 <li><a href="#">Sub Item 2.1.1.3</a></li>
  10.                 <li><a href="#">Sub Item 2.1.1.4</a></li>
  11.                 <li><a href="#">Sub Item 2.1.1.5</a></li>
  12.                 </ul>
  13.     </li>
  14.     <li><a href="#">Sub Item 2.1.2</a></li>
  15.     <li><a href="#">Sub Item 2.1.3</a></li>
  16.    
  17.     <li><a href="#">Sub Item 2.1.4</a></li>
  18.     </ul>
  19.   </li>
  20. <li><a href="#">Item 2</a></li>
  21. <li><a href="#">Folder 1</a>
  22.   <ul>
  23.   <li><a href="#">Sub Item 1.1</a></li>
  24.   <li><a href="#">Sub Item 1.2</a></li>
  25.   </ul>
  26. </li>
  27. <li><a href="#">Item 3</a></li>
  28. <li><a href="#">Item 4</a></li>
  29. </ul>
Заранее всем спасибо
 
 Top
DelphinPRO
Отправлено: 14 Февраля, 2013 - 22:11:33
Post Id



Активный участник


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


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3. // Входные данные
  4. $data = array (
  5.    array('title' => 'Item 1'),
  6.    array('title' => 'Item 2', 'children' => array(
  7.        array('title' => 'Item 2.1', 'children' => array(
  8.            array('title' => 'Item 2.1.1'),
  9.            array('title' => 'Item 2.1.2'),
  10.            array('title' => 'Item 2.1.3'),
  11.            array('title' => 'Item 2.1.4'),
  12.            array('title' => 'Item 2.1.5'),
  13.        )),
  14.        array('title' => 'Item 2.2'),
  15.        array('title' => 'Item 2.3'),
  16.        array('title' => 'Item 2.4'),
  17.    )),
  18.    array('title' => 'Item 3'),
  19.    array('title' => 'Item 4', 'children' => array(
  20.        array('title' => 'Item 4.1'),
  21.        array('title' => 'Item 4.2'),
  22.        array('title' => 'Item 4.3'),
  23.    )),
  24.    array('title' => 'Item 5'),
  25. );
  26.  
  27. // функция рекурсивного вывода дерева
  28. function recursiveMenu($rgTree, $sClass = '')
  29. {
  30.    $s = $sClass ? '<ul class="'.$sClass.'">' : '<ul>';
  31.    foreach ($rgTree as $rgNode) {
  32.        $s .= '<li><a href="#">'.$rgNode['title'].'</a>';
  33.        if (isset($rgNode['children'])) {
  34.            $s .= recursiveMenu($rgNode['children']);
  35.        }
  36.        $s .= '</li>';
  37.    }
  38.    $s .= '</ul>';
  39.  
  40.    return $s;
  41. }
  42. ?><!DOCTYPE html>
  43. <html>
  44. <head>
  45.     <title>demo</title>
  46.     <style type="text/css">
  47.        ul {margin-left: 50px;}
  48.    </style>
  49. </head>
  50. <body>
  51.     <?= recursiveMenu($data, 'topmenu') ?>
  52. </body>
  53. </html>
  54.  


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
jovani
Отправлено: 14 Февраля, 2013 - 22:14:01
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2012  


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




DelphinPRO Спасибо большое
 
 Top
DelphinPRO
Отправлено: 14 Февраля, 2013 - 22:14:29
Post Id



Активный участник


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


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




UPD
объявляется конкурс на решение задачи: как построить дерево $data из линейного массива, полученного из БД Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
jovani
Отправлено: 14 Февраля, 2013 - 22:54:48
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Март 2012  


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




надо будет постараться Улыбка
 
 Top
KApriS
Отправлено: 15 Февраля, 2013 - 10:15:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Май 2010  


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




DelphinPRO пишет:
UPD
объявляется конкурс на решение задачи: как построить дерево $data из линейного массива, полученного из БД Улыбка

я на днях этим занималась)
бд стандартной схемы: ид, название, родитель ид, подмав добавила еще level. выстроила дерево без рекурсии за два обращения в бд. но здесь нюанс: испоьзовала в работе систему шаблонов.
поробую попорядку.
1) есть шаблон - comment_item.tpl
CODE (html):
скопировать код в буфер обмена
  1. <li class="even comment_$level>
  2.         <div class="icon">
  3.                 <div class="c">$comment_text</div>
  4.                 <span class="posted">
  5.                         <span style="display:block"></span>
  6.                         $icons $comment_author в <span class="when">$comment_time</span>
  7.                         &nbsp &nbsp &nbsp &nbsp| <a href="#" class="answer"><i>Ответить</i></a>
  8.                 </span>
  9.                 <div style="clear: both"></div>
  10.                 <div class="add_comment" style="display : none">
  11.                         $unic_add_comment[$comment_id]
  12.                 </div>
  13.         </div>
  14. </li>
  15.         $child[$comment_id]

Обратите внимание на $child[$comment_id] - он и позволил при участии шаблонов выстроить линейное дерево иерархически
2)первый запрос в бд
PHP:
скопировать код в буфер обмена
  1. $sql1 = "SELECT * FROM `forum_comments` WHERE `article_id` = $article_id and  `reply_to` <>0 order by level desc";
  2. ...
  3. while ($row1 = mysql_fetch_array($query1)) {
  4. $tmpl_file = $_SERVER['DOCUMENT_ROOT']."/2013/templates/comment_item.tpl";
  5.                         $thefile = implode("", file($tmpl_file));
  6.                         $thefile = addslashes($thefile);
  7.                         $thefile = "\$child[$reply_to].=\"".$thefile."\";";
  8.                         eval($thefile);
  9. }

ТАким образом, все дочерние сообщения отфильтрованные во обратном порядке, заранее формируются и потом используются в дочерних элементах верхнего уровня.
3) второй запрос в бд
PHP:
скопировать код в буфер обмена
  1. $sql = "SELECT * FROM `forum_comments` WHERE `article_id` = $article_id and  `reply_to` = 0 order by comment_id";
  2. ...
  3. while ($row = mysql_fetch_array($query)) {
  4. $tmpl_file = "templates/comment_item.tpl";
  5.                         $thefile = implode("", file($tmpl_file));
  6.                         $thefile = addslashes($thefile);
  7.                         $thefile = "\$comment_item.=\"".$thefile."\";";
  8.                         eval($thefile);
  9. }
  10.  

В итоге получаем переменную $comment_item, которая содержит структурированный вывод сообщений в топе) по level редактирую css по отступам. полчилось симпатишно
Считаю своим ноухау)))) и безмерно им горжусь))))
к сожалению иерархию еще нигде не наговорили. но пару сообщений здесь уже есть, и можно, прикинувшись знатоком, оставить сообщение в ответ, чтобы посмотреть, как это выглядит вот здесь http://www.scienceforum.ru/2013/discus/44/2229

(Отредактировано автором: 15 Февраля, 2013 - 10:16:13)

 
 Top
DelphinPRO
Отправлено: 15 Февраля, 2013 - 11:05:04
Post Id



Активный участник


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


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




я использую выборку всех пунктов меню (один запрос)
таблица стандартная ID, PARENT_ID

и рекурсивная функция построения дерева

PHP:
скопировать код в буфер обмена
  1. private function getTreeNode($array, $id = 0)
  2. {
  3.     $child_array = array();
  4.  
  5.     foreach ($array as $item) {
  6.         if ($item['parent_id'] == $id) { // 2 уровень найден
  7.             $children = $this->getTreeNode($array, $item['id']);
  8.             if ($children !== false)
  9.                 $item['children'] = $children;
  10.             $child_array[] = $item; // добавить 2 уровень
  11.         }
  12.     }
  13.  
  14.     return !empty($child_array) ? $child_array : false;
  15. }


что меня смущает - это двойной перебор массива
1 раз при построении дерева
2 раз при построении разметки из дерева.

Вот если бы как-то сразу из линейного массива из БД одним проходом сформировать разметку (вложенные UL-списки)...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
KApriS
Отправлено: 15 Февраля, 2013 - 12:35:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 133
Дата рег-ции: Май 2010  


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




DelphinPRO пишет:

Вот если бы как-то сразу из линейного массива из БД одним проходом сформировать разметку (вложенные UL-списки)...

насколько я пролопатила в тот момент инет - мне кажется при схеме id, parent_id одним проходом точно не сформировать.
для этого какую то умную систему координат надо иметь в таблице для - забыла как называется система построения (4 координаты, определяющие вершины обхода графа) - вот там за один проход все встает на места...
а рекурсия, к сожалению, тоже невсегда может быть уместна, собсно по этой причине и изобретала велосипед...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB