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 :: Дублирование при выводе в дерево [3]

 PHP.SU

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


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

> Без описания
Bartezz
Отправлено: 28 Августа, 2012 - 12:52:26
Post Id



Гость


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


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




В общем можно сделать так: сначала получить ассоциативный массив где id услуги это ключ а наименование услуги это, соотвественно, значение, после чего в цикле while заменить $value['id_service'] на $usl_checki['id_service'], а $value['name_service'] заменить на $a_array[$usl_checki['id_service']], чтоб в итоге получилось:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($a_tree[$id_par_service] as $value)
  3. {
  4.     $a_array[$value['id_service']]=$value['name_service'];
  5. }
  6.  
  7.  
  8. foreach ($a_tree[$id_par_service] as $value)
  9.     {    // $style=mysql_query("select * from `dir_service` where `id_service`='".$value['id_service']."'");
  10.          // $style=mysql_fetch_assoc($style);
  11.        
  12.            $usl_check = mysql_query("SELECT * FROM `service_cl` WHERE `id_con` = '".(int)$_GET['id']."' and `ud_s_cl`='0' and `dateser_can`='0000-00-00'");
  13.         while ($usl_checki=mysql_fetch_array($usl_check)){
  14.            
  15.            if ($value['id_service']==$usl_checki['id_service']) {$s='checked'; } else $s='';}
  16.       if ($value['parent']==1){
  17.       echo "<li class='plus'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$usl_checki['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_array[$usl_checki['id_service']]."</span>";
  18.       }
  19.       if ($value['parent']==0){
  20.       echo "<li class='non'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$usl_checki['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_array[$usl_checki['id_service']]."</span>";
  21.       }
  22.        
  23.       //рекурсивный вызов - список всех дочерних элементов нужно вставить
  24.       //  именно в этом месте:
  25.       //  <li>название
  26.       //     ** тут список дочерних элементов, он показывается рекурсивным вызовом **
  27.       //  </li>
  28.       tree_print($a_tree,$usl_checki['id_service']);
  29.       echo "</li>";
  30.   }
  31.     echo "</ul>";
  32.                
  33.   }

(Добавление)
По идеи это должно работать, и правильно расставляться чекбоксы и правильно выводиться id услуги с ее описанием, если что то не так, пересматривайте условия, особенно что касается чекбоксов

(Отредактировано автором: 28 Августа, 2012 - 12:57:08)

 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 13:01:29
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
В общем можно сделать так: сначала получить ассоциативный массив где id услуги это ключ а наименование услуги это, соотвественно, значение, после чего в цикле while заменить $value['id_service'] на $usl_checki['id_service'], а $value['name_service'] заменить на $a_array[$usl_checki['id_service']], чтоб в итоге получилось:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($a_tree[$id_par_service] as $value)
  3. {
  4.     $a_array[$value['id_service']]=$value['name_service'];
  5. }
  6.  
  7.  
  8. foreach ($a_tree[$id_par_service] as $value)
  9.     {    // $style=mysql_query("select * from `dir_service` where `id_service`='".$value['id_service']."'");
  10.          // $style=mysql_fetch_assoc($style);
  11.        
  12.            $usl_check = mysql_query("SELECT * FROM `service_cl` WHERE `id_con` = '".(int)$_GET['id']."' and `ud_s_cl`='0' and `dateser_can`='0000-00-00'");
  13.         while ($usl_checki=mysql_fetch_array($usl_check)){
  14.            
  15.            if ($value['id_service']==$usl_checki['id_service']) {$s='checked'; } else $s='';}
  16.       if ($value['parent']==1){
  17.       echo "<li class='plus'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$usl_checki['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_array[$usl_checki['id_service']]."</span>";
  18.       }
  19.       if ($value['parent']==0){
  20.       echo "<li class='non'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$usl_checki['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_array[$usl_checki['id_service']]."</span>";
  21.       }
  22.        
  23.       //рекурсивный вызов - список всех дочерних элементов нужно вставить
  24.       //  именно в этом месте:
  25.       //  <li>название
  26.       //     ** тут список дочерних элементов, он показывается рекурсивным вызовом **
  27.       //  </li>
  28.       tree_print($a_tree,$usl_checki['id_service']);
  29.       echo "</li>";
  30.   }
  31.     echo "</ul>";
  32.                
  33.   }

(Добавление)
По идеи это должно работать, и правильно расставляться чекбоксы и правильно выводиться id услуги с ее описанием, если что то не так, пересматривайте условия, особенно что касается чекбоксов

Названия не выводит...
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 13:02:02
Post Id



Гость


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


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




возможно в конце в функции tree_print не надо менять передаваемое значение, я попросту не знаю чем занимается эта функция
 
 Top
quinlena
Отправлено: 28 Августа, 2012 - 13:02:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2012  
Откуда: Казахстан


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




Bartezz пишет:
возможно в конце в функции tree_print не надо менять передаваемое значение, я попросту не знаю чем занимается эта функция

Выводит дерево
 
 Top
Bartezz
Отправлено: 28 Августа, 2012 - 13:06:32
Post Id



Гость


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


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




посмотрите var_dump массива a_array содержит ли он то что должен содержать?

(Отредактировано автором: 28 Августа, 2012 - 13:06:45)

 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB