PHP.SU

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

Страниц (11): « 1 2 3 4 [5] 6 7 8 9 ... » В конец

> Найдено сообщений: 157
quinlena Отправлено: 29 Августа, 2012 - 11:11:38 • Тема: Hide/show jquery в зависимости от условия • Форум: JavaScript & VBScript

Ответов: 9
Просмотров: 2874
armancho7777777 пишет:
quinlena пишет:
На счет дерева, то вот оно

Вы прикалываетесь ?
Это дерево, или php код, который генерирует его ?

Да, это код, который его генерирует.
quinlena Отправлено: 29 Августа, 2012 - 10:51:44 • Тема: Hide/show jquery в зависимости от условия • Форум: JavaScript & VBScript

Ответов: 9
Просмотров: 2874
Я понимаю так, мне нужно прописать класс:

Ничего не изменилось, если у <li> прописать тоже этот класс, также ничего не изменилось...
На счет дерева, то вот оно
PHP:
скопировать код в буфер обмена
  1. <div id="derevo">
  2.          <form id="form2" name="form2" method="post" action="edit_cont1.php">
  3.     <input type="hidden" name="act" value="{action}" />
  4.       <table width="100%" border="0">
  5.        
  6.         <tr>
  7.           <td><label for="id_par_service"></label>
  8. <script type="text/javascript">
  9. $(document).ready(function(){
  10.         //jQuery('#add li ul ').show();
  11.         jQuery('#add li').css('cursor','pointer');
  12. var checkBox = $('input:checkbox');
  13. if(!checkBox.is(':checked'))
  14. {
  15.        checkBox.parents('.element:eq(0)').css('display','none');
  16. }
  17. })
  18.  
  19. jQuery(function()
  20. {  
  21. jQuery('#add').slideToggle(400);
  22. }
  23. );
  24.  
  25. function tgg_parent(el){
  26.         //.css({'list-style-image': 'url(/images/papka.png)'})
  27.         //$(el).parent().children("ul").slideToggle(400);
  28.          $(el).parent().children("ul").slideToggle(400);
  29.          $(el).parent().toggleClass('plus minus');
  30.  
  31. }
  32.  
  33.  
  34. </script>
  35. <div id="add" style="display:none;">
  36.  
  37. <?PHP
  38.   $a_tree=array();
  39.   $r=mysql_query("
  40.    select
  41.     id_service,   #идентификатор элемента
  42.     id_par_service, #идентификатор родительского элемента
  43.                    #   элементы верхнего уровня содержат здесь 0
  44.     name_service,
  45.     parent #название
  46.    from
  47.         dir_service
  48.     where ud_ser='0'",$link);
  49.           if(!$r) echo mysql_error();
  50.   //  списки дочерних элементов этого массива были отсортированы по этому полю.
  51.   for($i=0;$i<mysql_num_rows($r);$i++)
  52.   {
  53.     $f=mysql_fetch_assoc($r);
  54.     if(empty($a_tree[$f['id_par_service']]))
  55.       $a_tree[$f['id_par_service']]=array();
  56.     $a_tree[$f['id_par_service']][]=$f;
  57.    
  58.   }
  59. if ($tree==0){
  60.   //Выводим данные.
  61.  //$usl_check = mysql_query("SELECT * FROM `service_cl` WHERE `id_con` = '".$can['id_con']."' and `ud_s_cl`='0' and `dateser_can`='0000-00-00'");
  62.         //while ($usl_check=mysql_fetch_array($usl_check)){
  63.   function tree_print(&$a_tree,$id_par_service=0)
  64.   {
  65.     //условие завершения рекурсии
  66.  
  67.     if(empty($a_tree[$id_par_service])) {
  68.         return;}
  69.  
  70.  
  71.          
  72.        
  73.     echo "<ul class='element'>";
  74.  
  75. foreach ($a_tree[$id_par_service] as $value)
  76. {
  77.     $a_array[$value['id_service']]=$value['name_service'];
  78. }
  79. $arr = array();
  80. $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'");
  81.          $sum=mysql_num_rows($usl_check);
  82.  $blabla="";
  83.  $j=1;
  84.         while ($usl_checki=mysql_fetch_array($usl_check)){
  85.                 $blabla.=implode('',array($usl_checki['id_service']));
  86.                 if($j < $sum){
  87.                         $blabla .= ",";
  88. }
  89.                                                 $j++;
  90.         }
  91.         $bla= explode(',',$blabla);    
  92. foreach ($a_tree[$id_par_service] as $value)
  93.     {
  94.         if (in_array($value['id_service'],$bla)){$s='checked';
  95.  
  96.         } else {$s='';
  97.         }
  98.         if ($value['parent']==1){
  99.                 echo "<li class='minus element' onclick='tgg_parent(this);'><INPUT TYPE=checkbox  NAME=parent[] onClick='apply()' VALUE=".$value['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$a_array[$value['id_service']]."</span>";
  100.         }
  101.         if ($value['parent']==0){
  102.                 echo "<li class='non element' important!><INPUT TYPE=checkbox  NAME=parent[] onClick='apply()' VALUE=".$value['id_service']." ".$s."><span>".$a_array[$value['id_service']]."</span>";
  103.         }      
  104.         tree_print($a_tree,$value['id_service']);
  105.         echo "</li>";
  106.   }
  107.     echo "</ul>";
  108.   }    
  109.   tree_print($a_tree);
  110.  
  111. ?>
  112.  
  113. </div>
  114.           </td>
  115.         </tr>
  116.       </table>
  117.       <?
  118.  echo"  
  119.        </form></div>";
  120.   }
quinlena Отправлено: 29 Августа, 2012 - 10:24:08 • Тема: Hide/show jquery в зависимости от условия • Форум: JavaScript & VBScript

Ответов: 9
Просмотров: 2874
А eq -это что? Я поставила ваш код в document.ready, ничего не изменилось, выводится все дерево...
И еще... Нужно не чекбоксы не выводить, а просто, чтоб та ветка, где не отмечен чекбокс, чтоб она была свернута.
quinlena Отправлено: 29 Августа, 2012 - 07:03:32 • Тема: Hide/show jquery в зависимости от условия • Форум: JavaScript & VBScript

Ответов: 9
Просмотров: 2874
Последний раз у меня была проблема с выводом чекбоксов в дереве, но я разобралась с помощью in_array. Сейчас вот думаю, как сделать так, чтобы элементы дерева показывались не все, а лишь те, в которых есть отмеченный чекбокс, чтобы был виден путь до этого чекбокса, подскажите, с помощью чего можно сделать? Куда рыть?
quinlena Отправлено: 28 Августа, 2012 - 13:02:43 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

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

Выводит дерево
quinlena Отправлено: 28 Августа, 2012 - 13:01:29 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
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 услуги с ее описанием, если что то не так, пересматривайте условия, особенно что касается чекбоксов

Названия не выводит...
quinlena Отправлено: 28 Августа, 2012 - 12:25:02 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
мне в голову приходит только LEFT JOIN по id_con таблицы service_cl с той таблицей которая содержит наименование и id услуги сопоставимое с id услуги указанном в service_cl

А как потом checked проставлять?
(Добавление)
Дерево должно быть все выведено...
quinlena Отправлено: 28 Августа, 2012 - 11:58:47 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет: про это место я не говорил что надо изменять

В этом месте идет проверка, папка это или нет
(Добавление)
Я просто убрала $style и пометила все в
PHP:
скопировать код в буфер обмена
  1.    select
  2.     id_service,   #идентификатор элемента
  3.     id_par_service, #идентификатор родительского элемента
  4.                    #   элементы верхнего уровня содержат здесь 0
  5.     name_service,
  6.     parent #название
  7.    from
  8.         dir_service
  9.     where ud_ser='0'",$link);

Т.е. в общий массив
quinlena Отправлено: 28 Августа, 2012 - 11:57:57 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
то есть $usl_checki не содержит id услуги по которой ее можно идентифицировать в списке услуг?

Содержит, как раз и проверяется, если id одинаковые, то ставится checked
quinlena Отправлено: 28 Августа, 2012 - 11:55:32 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
Скажите мне как вывести названия услуги $a_tree[$id_par_service][$i]['name_service'] зная ее $usl_checki?

Нужно, чтоб выглядело вот так:
quinlena Отправлено: 28 Августа, 2012 - 11:52:53 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
Скажите мне как вывести названия услуги $a_tree[$id_par_service][$i]['name_service'] зная ее [b][/b]?

Никак. $usl_checki - это просто выбор услуг, которые есть в договоре, а первый массив - это все услуги. Вот, привожу полный кусок кода...
PHP:
скопировать код в буфер обмена
  1. <div id="derevo">
  2.          <form id="form2" name="form2" method="post" action="edit_cont1.php">
  3.     <input type="hidden" name="act" value="{action}" />
  4.       <table width="100%" border="0">
  5.        
  6.         <tr>
  7.          
  8.           <td><label for="id_par_service"></label>
  9. <script type="text/javascript">
  10. $(document).ready(function(){
  11.         jQuery('#add li ul ').hide();
  12.         jQuery('#add li').css('cursor','pointer');
  13.         $("#serv_edit").click(function(){
  14.                 window.location = 'edit_service.php?id='+ $("input:radio:checked").val();
  15.         });
  16.        
  17.  
  18.  
  19. })
  20.  
  21. jQuery(function()
  22. {  
  23. jQuery('#add').slideToggle(400);
  24. }
  25. );
  26.  
  27. function tgg_parent(el){
  28.         //.css({'list-style-image': 'url(/images/papka.png)'})
  29.         //$(el).parent().children("ul").slideToggle(400);
  30.          $(el).parent().children("ul").slideToggle(400);
  31.          $(el).parent().toggleClass('plus minus')
  32.  
  33. }
  34.  
  35.  
  36. </script>
  37. <div id="add" style="display:none;">
  38.  
  39. <?PHP
  40.   $a_tree=array();
  41.   //Ключ массива - идентификатор родительского элемента
  42.   // значение - список дочерних элементов
  43.  
  44.   //Загружаем сразу все дерево одним запросом
  45.   $r=mysql_query("
  46.    select
  47.     id_service,   #идентификатор элемента
  48.     id_par_service, #идентификатор родительского элемента
  49.                    #   элементы верхнего уровня содержат здесь 0
  50.     name_service,
  51.     parent #название
  52.    from
  53.         dir_service
  54.     where ud_ser='0'",$link);
  55.           if(!$r) echo mysql_error();
  56.   //  списки дочерних элементов этого массива были отсортированы по этому полю.
  57.   for($i=0;$i<mysql_num_rows($r);$i++)
  58.   {
  59.     $f=mysql_fetch_assoc($r);
  60.     if(empty($a_tree[$f['id_par_service']]))
  61.       $a_tree[$f['id_par_service']]=array();
  62.     $a_tree[$f['id_par_service']][]=$f;
  63.    
  64.   }
  65.  
  66.   //Выводим данные.
  67.  //$usl_check = mysql_query("SELECT * FROM `service_cl` WHERE `id_con` = '".$can['id_con']."' and `ud_s_cl`='0' and `dateser_can`='0000-00-00'");
  68.         //while ($usl_check=mysql_fetch_array($usl_check)){
  69.   function tree_print(&$a_tree,$id_par_service=0)
  70.   {
  71.     //условие завершения рекурсии
  72.     //Условие, при котором функция никогда не вызывает сама себя
  73.  
  74.     //функция empty() - вернет ложь во всех нужных нам случаях:
  75.     // - элемент массива не определен
  76.     // - элемент массива определен, но является пустым массивом
  77.     if(empty($a_tree[$id_par_service])) {
  78.         return;}
  79.  
  80.  
  81.          
  82.        
  83.     echo "<ul>";
  84.  
  85.  
  86.     foreach ($a_tree[$id_par_service] as $value)
  87.     {    // $style=mysql_query("select * from `dir_service` where `id_service`='".$value['id_service']."'");
  88.          // $style=mysql_fetch_assoc($style);
  89.        
  90.            $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'");
  91.         while ($usl_checki=mysql_fetch_array($usl_check)){
  92.        
  93.            if ($value['id_service']==$usl_checki['id_service']) {$s='checked'; } else $s='';}
  94.       if ($value['parent']==1){
  95.       echo "<li class='plus'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$value['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$value['name_service']."</span>";
  96.       }
  97.       if ($value['parent']==0){
  98.       echo "<li class='non'><INPUT TYPE=checkbox  NAME=parent onClick='apply()' VALUE=".$value['id_service']." ".$s."><span onclick='tgg_parent(this);'>".$value['name_service']."</span>";
  99.       }
  100.        
  101.       //рекурсивный вызов - список всех дочерних элементов нужно вставить
  102.       //  именно в этом месте:
  103.       //  <li>название
  104.       //     ** тут список дочерних элементов, он показывается рекурсивным вызовом **
  105.       //  </li>
  106.       tree_print($a_tree,$value['id_service']);
  107.       echo "</li>";
  108.   }
  109.     echo "</ul>";
  110.                
  111.   }
  112.    
  113.   //Показываем все дерево:
  114.   tree_print($a_tree);
  115.  
  116. ?>
  117.  
  118. </div>
  119.           </td>
  120.         </tr>
  121.       </table>
  122.    
  123.     </form></div>
quinlena Отправлено: 28 Августа, 2012 - 11:46:31 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
Раз вы выбираете список услуг в массив $style, почему бы в нем не пытаться найти подходящую?
То есть вместо
PHP:
скопировать код в буфер обмена
  1. $a_tree[$id_par_service][$i]['id_service']

должно быть
PHP:
скопировать код в буфер обмена
  1. $style[$usl_checki['id_service']]

$usl_checki['name_service'] - такого быть не может, в service_cl нет поля name_service
quinlena Отправлено: 28 Августа, 2012 - 11:39:24 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
непонятно какая вообще взаимосвязь между $a_tree[$id_par_service][$i]['name_service'] и массивом $usl_checki

$a_tree[$id_par_service][$i]['name_service'] - это вывод названия услуги.
А $usl_checki - это услуги в контракте, если услуга в контракте = услуге в дереве, то checked="checked"
quinlena Отправлено: 28 Августа, 2012 - 11:35:02 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
Просто топчемся на одном месте, вы выбираете список услуг из таблицы `service_cl` с их id и описанием (как я понял), далее проходите циклом (while) по этому списку, но на выводе (между <li> и </li>) id услуги и описание услуги у вас выходит всегда одно и тоже, а лишь меняется параметр checked, почему так происходит? Потому что всегда идет одно и тоже значение из $a_tree[$id_par_service][$i]['id_service'] и $a_tree[$id_par_service][$i]['name_service'] , поэтому, просто необходимо с помощью $usl_checki передавать индекс в массив $a_tree[$id_par_service][$i] чтоб на выходе список услуг (строк) не дублировался

Из таблицы service_cl я выбираю id_service, где id_con=определенное значение, потом захожу в таблицу dir_service и вывожу оттуда все услуги, но, необходимо чтобы те, которые есть в service_cl с id_con, были при выводе отмечены галочками.
quinlena Отправлено: 28 Августа, 2012 - 11:26:10 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД

Ответов: 34
Просмотров: 283
Bartezz пишет:
Посмотрите сообщение мое от "28 Августа, 2012 - 12:01:49" если я правильно понял структуру массива $a_tree, то это должно помочь. В таблице `service_cl` есть же столбец 'name_service' и 'id_service'???

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

Страниц (11): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB