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]   

> Без описания
Alex_57_php
Отправлено: 09 Марта, 2014 - 16:25:26
Post Id


Новичок


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


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




Всем привет!
Есть таблица
Таблица категорий (Отобразить)


Есть скрипт который рекурсивно выводит категории в виде дерева

PHP:
скопировать код в буфер обмена
  1.  
  2. $cat_p = filter_input_var($_GET['cprod']);
  3.  
  4. //Выбираем данные из БД
  5. $result=do_query("SELECT * FROM  tovars_categories");
  6. //Если в базе данных есть записи, формируем массив
  7. if   (mysql_num_rows($result) > 0){
  8.     $cats = array();
  9. //В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
  10.     while($cat =  mysql_fetch_assoc($result)){
  11.         $cats_ID[$cat['id']][] = $cat;
  12.         $cats[$cat['parent_id']][$cat['id']] =  $cat;
  13.     }
  14. }
  15. // echo '<pre>';
  16. // print_r($cats);
  17. // echo '</pre>';
  18.  
  19. function build_tree($cats,$parent_id,$only_parent = false){
  20.     if(is_array($cats) and isset($cats[$parent_id])){
  21.        
  22.      
  23.            
  24.         if($only_parent==false){
  25.                 $tree = '<ul>';
  26.             foreach($cats[$parent_id] as $cat){  
  27.                             $tree .= '<li class="custom_id'.$cat['id'].'"><a class="" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';
  28.                 $tree .=  build_tree($cats,$cat['id']);
  29.                 $tree .= '</li>';
  30.                                  }
  31.                 $tree .= '</ul>';
  32.         }elseif(is_numeric($only_parent)){
  33.             $cat = $cats[$parent_id][$only_parent];
  34.             $tree = '<li class="custom_id'.$cat['id'].'"><a class="" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';
  35.             $tree .=  build_tree($cats,$cat['id']);
  36.             $tree .= '</li>';
  37.         }
  38.        
  39.     }
  40.     else return null;
  41.     return $tree;
  42. }
  43.  
  44. function find_parent ($tmp, $cur_id){
  45.     if($tmp[$cur_id][0]['parent_id']!=0){
  46.         return find_parent($tmp,$tmp[$cur_id][0]['parent_id']);
  47.     }
  48.     return (int)$tmp[$cur_id][0]['id'];
  49. }
  50.  


Вот так вывожу в темплейте
CODE (html):
скопировать код в буфер обмена
  1.  
  2.  <div class="box">
  3.           <div class="box-heading">Категории</div>
  4.           <div class="box-content box-category">
  5.             <ul id="cat_accordion">
  6.            
  7.  <?  echo build_tree($cats,0,find_parent($cats_ID,$cat_p)); ?>
  8.  </ul>
  9.           </div>
  10.         </div>
  11.  
  12.  


Скрипт не мой брал на просторах(немного лишь подправил)

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

Момент первый (просьба о помощи)

Определить что пользователь находится в текущей категории и добавить класс CSS для элемента <a>
Иначе говоря если GET совпадает с ID категории, нужно добавить класс

Я пробовал так:

PHP:
скопировать код в буфер обмена
  1. if($cat_p == $cat['id']){
  2.            $active = 'active';
  3.            }else{
  4.            $active = '';
  5.            }


PHP:
скопировать код в буфер обмена
  1. $tree .= '<li class="custom_id'.$cat['id'].'"><a class="'.$active.'" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';


Но не получается, пробовал еще вариантов 5, та же фигня, моск кипит ??? Непонял!

Момент второй и снова прошу о помощи Улыбка

Как не выводить самую главную категорию у которой parent_id равен нулю?

пробовал что-то типа этого

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if($cat['parent_id'] != 0){
  4.  
  5. }
  6.  


не фига не выходит Огорчение


Как выводит сейчас:

+Все для мужчин
+---Аксессуары и Сумки
+---Подкатегория
+---Подкатегория
+---Подкатегория
+---Мужская одежда
+---Подкатегория
+---Подкатегория
+---Подкатегория
+---Обувь
+---Подкатегория
+---Подкатегория
+---Подкатегория

Что я хочу сделать, при нахождении в любой подкатегории раздела "для мужчин"

+Аксессуары и Сумки
+---Подкатегория
+---Подкатегория
+---Подкатегория
+Мужская одежда
+---Подкатегория
+---Подкатегория
+---Подкатегория
+Обувь
+---Подкатегория
+---Подкатегория
+---Подкатегория

Т.е. без самой родительской категории с parent_id = 0

PS Заранее спасибо всем откликнувшимся и помогающим мне в этих вопросах

(Отредактировано автором: 09 Марта, 2014 - 16:44:06)

 
 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