X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Динамический select
zevilz
zevilz
Topic Starter сообщение 22.6.2010, 18:52; Ответить: zevilz
Сообщение #1


У меня на сайте в админке на странице добавления файла стоит динамический select: сначала выбираем раздел файла, после чего подгружаются категории этого раздела, выбираем раздел - подгружаются подкатегории выбранной категории. Затем выбираем подкатегорию, вносим данные файла и отправляем в базу. Все данные селектов берутся из базы, кроме разделов, их 4. Вот исходный код вывода селектов и скрипт:

new_file.php
[PHP]...........................
.................................
.............................
<html>
<head>
..................................
<script type="text/javascript" src="js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="js/jquery.depend.js"></script>
<script type="text/javascript">
jQuery(function($){
$('#cat').depend({ parent:'division'});
$('#subcat').depend({ parent:'cat'});
});
</script>
</head>

<body >
.....................................
......................................
....................................
<form name="add_file" method="post" action="add_file.php">
<p class="admin">Добавление нового файла</p>

<p><label>Раздел</label><br />
<select name="division" id="division" class="selectable clasamea">
<option value="">-- select --</option>
<option value="photoshop" title="photoshop">photoshop</option>
<option value="dreamweaver" title="dreamweaver">dreamweaver</option>
<option value="flash" title="flash">flash</option>
<option value="fireworks" title="fireworks">fireworks</option>
</select></p>

<p><label>Категория</label><br />
<select name="cat" id="cat" class="selectable">
<option value="">-- select --</option>
<?
/*-------------Вывод категорий---------------*/
$result_photo = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files",$db); /*Выборка данных из базы*/
$myrow_photo = mysql_fetch_array ($result_photo);
do
{
printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_photo["cat"],$myrow_photo["division"],$myrow_photo["cat"],$myrow_photo["cat"]);
}
while ($myrow_photo = mysql_fetch_array ($result_photo));
?>
</select></p>

<p><label>Подкатегория</label><br />
<select name="subcat" id="subcat" class="selectable">
<option value="">-- select --</option>
<?
$result_subcat = mysql_query ("SELECT cat,id,title FROM subcat_files",$db); /*Выборка данных из базы*/
$myrow_subcat = mysql_fetch_array ($result_subcat);
do
{
printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]);
}
while ($myrow_subcat = mysql_fetch_array ($result_subcat));

?>

</select></p>
........................
.......................
.......................[/PHP]

jquery_depend.js
// JavaScript Document
(function($) {
$.fn.depend = function(options) {
this.find('option').hide();
this.find('option:first').show();
var current = this;
$('#' + options.parent).find('option:first').each(function(){
     $(this).click(function(){
        current.find('option:not(:first)').hide();
        current.find('option:first').attr({selected:'selected'});
        current.find('option:first').click();
     })
})
$('#' + options.parent).find('option:not(:first)').each(function(){
    var cur = $(this);
    $(this).click(function(){
        current.find('option:not(:first)').hide();
        var text = cur.text().toLowerCase();
        current.find('option' + '.' + text).show();
        current.find('option:first').attr({selected:'selected'});
        current.find('option:first').click();
    })
})
}
})(jQuery);


Все работает отлично.

Есть в админке еще страница редактирования файла. Вылазит та же формочка, но уже заполненная. Решил приделать туда тоже подобный динамический select для того, чтобы можно было файл переместить в другой раздел, категорию или подкатегорию.
Вставил туда селекты. Из базы корректно достаются раздел, категория и подкатегория редактируемого файла и вставляются в селекты и выбраны по умолчанию. Вроде бы все работает, но вот с содержимым селекта хрень какая-то:
1. При выборе 1го раздела возможно выбрать только первую категорию и первую подкатегорию первого раздела
2. При выборе других разделов возможно выбрать категории и подкатегории выбранного раздела плюс первую категорию и первую подкатегорию первого раздела

Скрипт используется тот же, вот код php файла:

edit_file.php
[PHP].......................
...............................
if (isset ($_GET['id'])) {$id = $_GET['id']; }?>
....................................................
.....................................
<html>
<head>
.....................................
........................................
<script type="text/javascript" src="js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="js/jquery.depend1.js"></script>
<script type="text/javascript">
jQuery(function($){
$('#cat').depend({ parent:'division'});
$('#subcat').depend({ parent:'cat'});
});
</script>
</head>

<body >
if (!isset($id)) /*Если не существует параметра id в адресе страницы, то...*/
{
echo ("<p class='admin'>Редактирование файла</p><p>Выберите файл для редактирования:</p>");

/*Photoshop*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='photoshop' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo ("<p style='text-align:center;color:blue;'>Photoshop</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));

/*Dreamweaver*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='dreamweaver' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo ("<p style='text-align:center;color:blue;'>Dreamweaver</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));

/*Flash*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='flash' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo ("<p style='text-align:center;color:blue;'>Flash</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));

/*Fireworks*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='fireworks' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo ("<p style='text-align:center;color:blue;'>Fireworks</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));

}
else /*Если параметр id существует в адресе страницы, то...*/
{
$result_id = mysql_query ("SELECT * FROM files_demo WHERE id=$id");
if (!$result_id) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_id) > 0) {$myrow_id = mysql_fetch_array ($result_id);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo "<p class='admin'>Редактирование файла</p>
<form name='update_file' method='post' action='update_file.php'>";

/*Вывод разделов в цикле с автоматическим выбором реального раздела редактируемого файла*/
$result_div = mysql_query ("SELECT DISTINCT division FROM subcat_files");
if (!$result_div) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_div) > 0) {$myrow_div = mysql_fetch_array ($result_div);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo "<p>Выберите раздел<br><select name='division' id='division' class='selectable clasamea'>";
do
{
if ($myrow_id['division'] == $myrow_div['division']) {printf ("<option value='%s' title='%s' selected>%s</option>",$myrow_div["division"],$myrow_div["division"],$myrow_div["division"]);} /*default*/
else {printf ("<option value='%s' title='%s'>%s</option>",$myrow_div["division"],$myrow_div["division"],$myrow_div["division"]); }
}
while ($myrow_div = mysql_fetch_array ($result_div));

echo "</select></p>";


/*Вывод категорий в цикле с автоматическим выбором реальной категории редактируемого файла*/
$result_cat = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files");
if (!$result_cat) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_cat) > 0) {$myrow_cat = mysql_fetch_array ($result_cat);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo "<p>Выберите категорию<br><select name='cat' id='cat' class='selectable'>";
do
{
if ($myrow_id['cat'] == $myrow_cat['cat']) {printf ("<option value='%s' class='%s' title='%s' selected>%s</option>",$myrow_cat["cat"],$myrow_cat["division"],$myrow_cat["cat"],$myrow_cat["cat"]);} /*default*/
else {printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_cat["cat"],$myrow_cat["division"],$myrow_cat["cat"],$myrow_cat["cat"]); }
}
while ($myrow_cat = mysql_fetch_array ($result_cat));

echo "</select></p>";

/*Вывод подкатегорий в цикле с автоматическим выбором реальной подкатегории редактируемого файла*/
$result_subcat = mysql_query ("SELECT * FROM subcat_files");
if (!$result_subcat) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_subcat) > 0) {$myrow_subcat = mysql_fetch_array ($result_subcat);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/

echo "<p>Выберите подкатегорию<br><select name='subcat' id='subcat' class='selectable'>";
do
{
if ($myrow_id['subcat'] == $myrow_subcat['id']) {printf ("<option value='%s' class='%s' selected>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]);} /*default*/
else {printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]); }
}
while ($myrow_subcat = mysql_fetch_array ($result_subcat));

echo "</select></p>";
....................................
......................................
......................................
......................................
[/PHP]

Перековырял весь код, но понять не могу, в чем проблема:wacko: Скорее всего проблема в скрипте

Ссылки на примеры (работает только в Firefox):
добавление нового файла
редактирование файла
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 23.6.2010, 10:05; Ответить: ZhukV
Сообщение #2


Не плох.
А на чем именно построен? На БД?

Если что, кому то нужно, то вот есть пример использование моего динамического селекта:
http://freeboard.km.ua/add/

Работает на jQuery, вместе с плагином Selected (создавал сам)
Весь рубрикатор описывается в XML файле:
http://freeboard.km.ua/other/rubrickator.xml
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
zevilz
zevilz
Topic Starter сообщение 23.6.2010, 19:43; Ответить: zevilz
Сообщение #3


(ZhukV @ 23.6.2010, 13:05) *
Не плох.
А на чем именно построен?


на БД

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Thumbs up Thunder 3. Современный динамический ALL-IN-ONE генератор дорвеев на PHP.
2 GrizzLey 3204 8.9.2020, 18:12
автор: bolyk
Открытая тема (нет новых ответов) серые пункты form-select-option (помогите написать более стабильный код)
0 deFISH 5359 15.4.2014, 11:41
автор: -deFISH-
Открытая тема (нет новых ответов) стиль select
5 www3_hb 9050 20.5.2010, 15:34
автор: -ottaviano-
Открытая тема (нет новых ответов) z-index и select
3 romlex_hb 10894 28.4.2008, 18:47
автор: -Exterior-


 



RSS Текстовая версия Сейчас: 26.4.2024, 6:27
Дизайн