PDA

View Full Version : سوال: مجموعه و زیر مجموعه در لیست باز شو



reza_101010
دوشنبه 01 مهر 1392, 21:26 عصر
سلام و خسته نباشید
لیست باز شو که همه می دونند چیه منظور تگ <select>

اگه یه لیست باز شو داشته باشیم و یه جدول داشته باشیم با فیلد های
id, parent_id,title چه طوری می شه داخل یه لیست باز شو این جوری مجموعه ها و زیر مجموعه ها را فراخونی کرد؟؟؟

http://www.up.kfesfahan.com/?di=LJP5


می دونم تابع بازگشتی می خواد و...
من اینا پیدا کردم






<?php

mysql_connect("localhost",'root','usbw');
mysql_select_db('test');
// Get listing of base categories
$sql="SELECT cat_id, cat_name FROM cat_table where cat_parent='0' ORDER BY cat_name asc";
$basecat = mysql_query($sql) or die($sql);
print"<select style='width: 400px;' name=\"category\">";
while($cat_list=mysql_fetch_array($basecat)){
if ($cat_list[0]==$cur_cat){$test= ' selected';}else{$test='';}
print '<option value="'.$cat_list[0].'"'.$test.'>'.$cat_list[1].'</option>';
sub_cat($cat_list[0]);// this calls the function for sub cats
}
print'</select>';
// ************************************************** *********************
// Sub-Category Function
function sub_cat($cat_num){
$subcat = mysql_query("SELECT cat_id, cat_name FROM cat_table where cat_parent='$cat_num' ORDER BY cat_name asc");
while($sub_cat_list = mysql_fetch_array($subcat)){
if ($sub_cat_list[0]==$cur_cat){$test=' selected';}else{$test='';}
print '<option value="'.$sub_cat_list[0].'"'.$test.'>&nbsp;&nbsp;&nbsp;'.$sub_cat_list[1].'</option>';
}
}
// ***********


?>








ولی فقط یه زیر مجموعه را می ده


اما یه کد نوشتم تویه کلاس و چک می کنه اگر پرنت از 0 بزرگتر باشه حلقه while اجرا شه که همتون استادین اما نمی دونم چرا حلقه بی نهایت می شه ؟؟!!!!!


لطفا اگه می شه کد این رو بزارید من که هرچی می گردم نمی تونم پیدا کنم


واقعا سرچ کردنم استادی می خواد


راستی اگه بخواهیم عمق زیر مجموعه های را با خط فاصله عین شکل ایجاد کنیم باید چیکار کنیم

SadeghPro19
دوشنبه 01 مهر 1392, 23:07 عصر
من از این استفاده میکنم..البته این کد رو توی نت پیدا کردم و با کلی دردسر تونستم مشکلاتش رو برطرف کنم اما الان راحت میتونید ازش استفاده کنید..

<?php
mysql_connect("localhost",'root','usbw');
mysql_select_db('test');

$refs = array();
$list = array();

$query = mysql_query("SELECT * FROM table");
while($data = mysql_fetch_array($query)) {
$thisref = &$refs[ $data['id'] ];

$thisref['parent_id'] = $data['parent_id'];
$thisref['id'] = $data['id'];
$thisref['title'] = $data['title'];

if ($data['parent_id'] == 0) {
$list[ $data['id'] ] = &$thisref;
} else {
$refs[ $data['parent_id'] ]['children'][ $data['id'] ] = &$thisref;
}
}
function space($val){
return str_repeat('┘--->&nbsp;',$val);
}
function cat($arr,$sp=0){
$html = '';
foreach ($arr as $v){
if($v['parent_id']==0){
$html .= '<option style="font-weight:bold;" value="'.$v['id'].'">'.$v['title'].'</option>'."\r\n";
$sp=0;
}else{
$html .= '<option value="'.$v['id'].'">'.space($sp).$v['title'].'</option>'."\r\n";
}
if (array_key_exists('children', $v)){
$html .= cat($v['children'], $sp+1);
}
}
return $html;
}

// build the list and output it
echo "<select style='width: 400px;' name=\"category\">";
echo cat($list);
echo '</select>';
?>

reza_101010
سه شنبه 02 مهر 1392, 12:17 عصر
ممنون از شما دوست عزیز کد بسیار جالب کار میکنه

درخواستی دارم آیا برای شما امکان داره که یک توضیح مختصری بنویسید سپاسگذارم

متغیر اشارگر $thisref و نیز خط 19 را اصلا متوجه نمی شم