PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (11): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
Найдено сообщений: 157
quinlena
Отправлено: 29 Августа, 2012 - 10:51:44 • Тема: Hide/show jquery в зависимости от условия • Форум: JavaScript & VBScript
Ответов: 9 Просмотров: 2874
Я понимаю так, мне нужно прописать класс:
Ничего не изменилось, если у <li> прописать тоже этот класс, также ничего не изменилось...
На счет дерева, то вот оно
PHP:
скопировать код в буфер обмена
<div id="derevo">
<form id="form2" name="form2" method="post" action="edit_cont1.php">
<input type="hidden" name="act" value="{action}" />
<table width="100%" border="0">
<tr>
<td><label for="id_par_service"></label>
<script type="text/javascript">
$(document).ready(function(){
//jQuery('#add li ul ').show();
jQuery('#add li').css('cursor','pointer');
var checkBox = $('input:checkbox');
if(!checkBox.is(':checked'))
{
checkBox.parents('.element:eq(0)').css('display','none');
}
})
jQuery(function()
{
jQuery('#add').slideToggle(400);
}
);
function tgg_parent(el){
//.css({'list-style-image': 'url(/images/papka.png)'})
//$(el).parent().children("ul").slideToggle(400);
$(el).parent().children("ul").slideToggle(400);
$(el).parent().toggleClass('plus minus');
}
</script>
<div id="add" style="display:none;">
<?PHP
select
id_service, #идентификатор элемента
id_par_service, #идентификатор родительского элемента
# элементы верхнего уровня содержат здесь 0
name_service,
parent #название
from
dir_service
where ud_ser='0'" , $link ) ;
// списки дочерних элементов этого массива были отсортированы по этому полю.
for ( $i = 0 ; $i < mysql_num_rows( $r ) ; $i ++ )
{
if ( empty ( $a_tree [ $f [ 'id_par_service' ] ] ) ) $a_tree [ $f [ 'id_par_service' ] ] = array ( ) ; $a_tree [ $f [ 'id_par_service' ] ] [ ] = $f ;
}
if ( $tree == 0 ) {
//Выводим данные.
//$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'");
//while ($usl_check=mysql_fetch_array($usl_check)){
function tree_print( & $a_tree , $id_par_service = 0 )
{
//условие завершения рекурсии
if ( empty ( $a_tree [ $id_par_service ] ) ) { return ; }
echo "<ul class='element'>" ;
foreach ( $a_tree [ $id_par_service ] as $value )
{
$a_array [ $value [ 'id_service' ] ] = $value [ 'name_service' ] ;
}
$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'" ) ; $blabla = "" ;
$j = 1 ;
if ( $j < $sum ) {
$blabla .= "," ;
}
$j ++;
}
foreach ( $a_tree [ $id_par_service ] as $value )
{
if ( in_array ( $value [ 'id_service' ] , $bla ) ) { $s = 'checked' ;
} else { $s = '' ;
}
if ( $value [ 'parent' ] == 1) {
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>" ;
}
if ( $value [ 'parent' ] == 0) {
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>" ;
}
tree_print( $a_tree , $value [ 'id_service' ] ) ;
echo "</li>" ;
}
echo "</ul>" ;
}
tree_print( $a_tree ) ;
?>
</div>
</td>
</tr>
</table>
<?
echo "
</form></div>" ;
}
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: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:
скопировать код в буфер обмена
foreach ( $a_tree [ $id_par_service ] as $value )
{
$a_array [ $value [ 'id_service' ] ] = $value [ 'name_service' ] ;
}
foreach ( $a_tree [ $id_par_service ] as $value )
{ // $style=mysql_query("select * from `dir_service` where `id_service`='".$value['id_service']."'");
// $style=mysql_fetch_assoc($style);
$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'" ) ;
if ( $value [ 'id_service' ] == $usl_checki [ 'id_service' ] ) { $s = 'checked' ; } else $s = '' ; }
if ( $value [ 'parent' ] == 1) {
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>" ;
}
if ( $value [ 'parent' ] == 0) {
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>" ;
}
//рекурсивный вызов - список всех дочерних элементов нужно вставить
// именно в этом месте:
// <li>название
// ** тут список дочерних элементов, он показывается рекурсивным вызовом **
// </li>
tree_print( $a_tree , $usl_checki [ 'id_service' ] ) ;
echo "</li>" ;
}
echo "</ul>" ;
}
(Добавление)
По идеи это должно работать, и правильно расставляться чекбоксы и правильно выводиться 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:
скопировать код в буфер обмена
select
id_service, #идентификатор элемента
id_par_service, #идентификатор родительского элемента
# элементы верхнего уровня содержат здесь 0
name_service,
parent #название
from
dir_service
where ud_ser='0'" , $link ) ;
Т.е. в общий массив
quinlena
Отправлено: 28 Августа, 2012 - 11:57:57 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД
Ответов: 34 Просмотров: 283
Bartezz пишет: то есть $usl_checki не содержит id услуги по которой ее можно идентифицировать в списке услуг?
Содержит, как раз и проверяется, если id одинаковые, то ставится checked
quinlena
Отправлено: 28 Августа, 2012 - 11:52:53 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД
Ответов: 34 Просмотров: 283
Bartezz пишет: Скажите мне как вывести названия услуги $a_tree[$id_par_service][$i]['name_service'] зная ее [b][/b]?
Никак. $usl_checki - это просто выбор услуг, которые есть в договоре, а первый массив - это все услуги. Вот, привожу полный кусок кода...
PHP:
скопировать код в буфер обмена
<div id="derevo">
<form id="form2" name="form2" method="post" action="edit_cont1.php">
<input type="hidden" name="act" value="{action}" />
<table width="100%" border="0">
<tr>
<td><label for="id_par_service"></label>
<script type="text/javascript">
$(document).ready(function(){
jQuery('#add li ul ').hide();
jQuery('#add li').css('cursor','pointer');
$("#serv_edit").click(function(){
window.location = 'edit_service.php?id='+ $("input:radio:checked").val();
});
})
jQuery(function()
{
jQuery('#add').slideToggle(400);
}
);
function tgg_parent(el){
//.css({'list-style-image': 'url(/images/papka.png)'})
//$(el).parent().children("ul").slideToggle(400);
$(el).parent().children("ul").slideToggle(400);
$(el).parent().toggleClass('plus minus')
}
</script>
<div id="add" style="display:none;">
<?PHP
//Ключ массива - идентификатор родительского элемента
// значение - список дочерних элементов
//Загружаем сразу все дерево одним запросом
select
id_service, #идентификатор элемента
id_par_service, #идентификатор родительского элемента
# элементы верхнего уровня содержат здесь 0
name_service,
parent #название
from
dir_service
where ud_ser='0'" , $link ) ;
// списки дочерних элементов этого массива были отсортированы по этому полю.
for ( $i = 0 ; $i < mysql_num_rows( $r ) ; $i ++ )
{
if ( empty ( $a_tree [ $f [ 'id_par_service' ] ] ) ) $a_tree [ $f [ 'id_par_service' ] ] = array ( ) ; $a_tree [ $f [ 'id_par_service' ] ] [ ] = $f ;
}
//Выводим данные.
//$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'");
//while ($usl_check=mysql_fetch_array($usl_check)){
function tree_print( & $a_tree , $id_par_service = 0 )
{
//условие завершения рекурсии
//Условие, при котором функция никогда не вызывает сама себя
//функция empty() - вернет ложь во всех нужных нам случаях:
// - элемент массива не определен
// - элемент массива определен, но является пустым массивом
if ( empty ( $a_tree [ $id_par_service ] ) ) { return ; }
echo "<ul>" ;
foreach ( $a_tree [ $id_par_service ] as $value )
{ // $style=mysql_query("select * from `dir_service` where `id_service`='".$value['id_service']."'");
// $style=mysql_fetch_assoc($style);
$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'" ) ;
if ( $value [ 'id_service' ] == $usl_checki [ 'id_service' ] ) { $s = 'checked' ; } else $s = '' ; }
if ( $value [ 'parent' ] == 1) {
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>" ;
}
if ( $value [ 'parent' ] == 0) {
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>" ;
}
//рекурсивный вызов - список всех дочерних элементов нужно вставить
// именно в этом месте:
// <li>название
// ** тут список дочерних элементов, он показывается рекурсивным вызовом **
// </li>
tree_print( $a_tree , $value [ 'id_service' ] ) ;
echo "</li>" ;
}
echo "</ul>" ;
}
//Показываем все дерево:
tree_print( $a_tree ) ;
?>
</div>
</td>
</tr>
</table>
</form></div>
quinlena
Отправлено: 28 Августа, 2012 - 11:46:31 • Тема: Дублирование при выводе в дерево • Форум: SQL и Архитектура БД
Ответов: 34 Просмотров: 283
Bartezz пишет: Раз вы выбираете список услуг в массив
$style , почему бы в нем не пытаться найти подходящую?
То есть вместо
должно быть
$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 ExBB FM 1.0 RC1. InvisionExBB