soheilyou
سه شنبه 25 فروردین 1394, 21:20 عصر
سلام دوستان شاید این سوال خیلی کلی باشه ! ولی در نگاهی عمیق تر میتونه یه دیدِ بسیار مناسب برای یه اصل مهم(به نظر من البته ) بهم بده !
مشکل اصلی من نمایشِ کامنت ها یا دسته های تو در توعه (یعنی مثلا کامنتی که جواب یه کامنت دیگه س یا دسته ای که زیر دسته ی یه دسته ی دیگه ست ) مثلا توی ورد پرس شما میتونید برای هر دسته ای یه دسته ی مادر انتخاب کنید و موقع نمایش اون ها رو به صورت تو در تو نمایش میده !
حال من به عنوان مثال کامنت ها رو شروع میکنم
من در پروژه ی خودم table ای شبیه به این table رو برای ذخیره سازی کامنت ها در نظر گرفتم :
130338
parent_id ینی اینکه این کامن در پاسخ به کامنتی با فلان آیدی است ! (parent_id = 0 یعنی که کامنت مستقله و مادر نداره )
حالا فرض کنید من میخوام تمام کامنت ها رو نشون بدم و اگر کامنتی پاسخی داشت ، پاسخش به صورت فرو رفته و پایینش نشون داده بشه و به همین ترتیب اگر پاسخشم ، پاسخ داشته دوباره یه فرو رفتگی دیگه داشته باشه و .... مثه این شکل :
130339
حالا برای این کار من یه select میزنم و کل جدول رو میگیرم و تو آرایه ی
$database ذخیره میکنم : برای مثال وقتی اونو print_r میکنم این خروجی رو میده :
Array
(
[0] => Array
(
[id] => 1
[content] => co1
[author_id] => 2
[date] => 1
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[content] => co2
[author_id] => 2
[date] => 2
[parent_id] => 0
)
[2] => Array
(
[id] => 3
[content] => co3
[author_id] => 3
[date] => 3
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[content] => co4
[author_id] => 4
[date] => 4
[parent_id] => 0
)
[4] => Array
(
[id] => 5
[content] => co5
[author_id] => 5
[date] => 5
[parent_id] => 3
)
[5] => Array
(
[id] => 6
[content] => co6
[author_id] => 6
[date] => 6
[parent_id] => 1
)
[6] => Array
(
[id] => 7
[content] => co7
[author_id] => 7
[date] => 7
[parent_id] => 3
)
[7] => Array
(
[id] => 8
[content] => co8
[author_id] => 8
[date] => 8
[parent_id] => 5
)
)
خوب دوستن برای نمایش تو در توعه اینها این فکر به ذهنم رسید که یه حلقه ی foreach میزنم و چک میکنم اگه parent_id ش 0 صفر نبود بره چک کنه و ..... ولی خوب ایده ش آسون بود ولی تو اجراش گیر کردم !
این کد رو نوشتم ولی ارور میده و خودمم میدونم مشکل داره ولی چون آرایه ها هی تو در تو میشن گیج میشم !
این کد منه که اشتباهه :
<?php/**comments*/class Comment extends CI_Controller{ function index() { $this->load->model('comment_model'); $database = $this->comment_model->All() ; echo "<pre>"; print_r($database); echo "</pre>"; $this_main = array() ; $first_total = array() ; foreach ($database as $key => $main_v) { $id = $main_v['id'] ; $this_main[$id] = array() ;
$this_main[$id]['id'] = $main_v['id'] ; $this_main[$id]['content'] = $main_v['content'] ; $this_main[$id]['author_id'] = $main_v['author_id'] ; $this_main[$id]['date'] = $main_v['date'] ; $this_main[$id]['parent_id'] = $main_v['parent_id'] ; $this_main[$id]['type'] = $main_v['type'] ; $this_main[$id]['childs'] = array();
$first_id = $this_main[$id]['id'] ; $first_parent = $this_main[$id]['parent_id'] ; $first_childs = array() ; $first_total = $this_main[$id] ;
if ($first_parent != 0) { $second_childs = array() ; $second_parent = $this_main[$first_parent]['parent_id'] ; //----- if ($second_parent != 0) { $third_childs = array() ; $third_parent = $this_main[$second_parent]['parent_id'] ; //----- if ($third_parent != 0) { $fourth_childs = array() ; $fourth_parent = $this_main[ $third_parent]['parent_id'] ; //----- if ($fourth_parent != 0) { $fifth_parent = $this_main[ $fourth_parent]['parent_id'] ; array_push($fourth_childs,$this_main[$id]) ; } else { array_push($third_childs,$this_main[$id]) ; } } else { array_push($second_childs,$this_main[$id]) ; } } else { array_push($first_childs,$second_childs) ; } } array_push($this_main[$id]['childs'] ,$first_childs) ;
echo "<hr><pre>"; print_r($this_main[$id]);
}
}}?>
میشه دوستان با تجربه یه کد روش تر و تمیز بهم بگید که خودتونم ازش جواب گرفته باشد ! لطف راهنمایی کلی نفرمایید چون توش گیر میکنم متاسفانه !
اگرم یه کد بنویسید که کانسپت کار رو بگیرم عالی میشه !
ممنونم
مشکل اصلی من نمایشِ کامنت ها یا دسته های تو در توعه (یعنی مثلا کامنتی که جواب یه کامنت دیگه س یا دسته ای که زیر دسته ی یه دسته ی دیگه ست ) مثلا توی ورد پرس شما میتونید برای هر دسته ای یه دسته ی مادر انتخاب کنید و موقع نمایش اون ها رو به صورت تو در تو نمایش میده !
حال من به عنوان مثال کامنت ها رو شروع میکنم
من در پروژه ی خودم table ای شبیه به این table رو برای ذخیره سازی کامنت ها در نظر گرفتم :
130338
parent_id ینی اینکه این کامن در پاسخ به کامنتی با فلان آیدی است ! (parent_id = 0 یعنی که کامنت مستقله و مادر نداره )
حالا فرض کنید من میخوام تمام کامنت ها رو نشون بدم و اگر کامنتی پاسخی داشت ، پاسخش به صورت فرو رفته و پایینش نشون داده بشه و به همین ترتیب اگر پاسخشم ، پاسخ داشته دوباره یه فرو رفتگی دیگه داشته باشه و .... مثه این شکل :
130339
حالا برای این کار من یه select میزنم و کل جدول رو میگیرم و تو آرایه ی
$database ذخیره میکنم : برای مثال وقتی اونو print_r میکنم این خروجی رو میده :
Array
(
[0] => Array
(
[id] => 1
[content] => co1
[author_id] => 2
[date] => 1
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[content] => co2
[author_id] => 2
[date] => 2
[parent_id] => 0
)
[2] => Array
(
[id] => 3
[content] => co3
[author_id] => 3
[date] => 3
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[content] => co4
[author_id] => 4
[date] => 4
[parent_id] => 0
)
[4] => Array
(
[id] => 5
[content] => co5
[author_id] => 5
[date] => 5
[parent_id] => 3
)
[5] => Array
(
[id] => 6
[content] => co6
[author_id] => 6
[date] => 6
[parent_id] => 1
)
[6] => Array
(
[id] => 7
[content] => co7
[author_id] => 7
[date] => 7
[parent_id] => 3
)
[7] => Array
(
[id] => 8
[content] => co8
[author_id] => 8
[date] => 8
[parent_id] => 5
)
)
خوب دوستن برای نمایش تو در توعه اینها این فکر به ذهنم رسید که یه حلقه ی foreach میزنم و چک میکنم اگه parent_id ش 0 صفر نبود بره چک کنه و ..... ولی خوب ایده ش آسون بود ولی تو اجراش گیر کردم !
این کد رو نوشتم ولی ارور میده و خودمم میدونم مشکل داره ولی چون آرایه ها هی تو در تو میشن گیج میشم !
این کد منه که اشتباهه :
<?php/**comments*/class Comment extends CI_Controller{ function index() { $this->load->model('comment_model'); $database = $this->comment_model->All() ; echo "<pre>"; print_r($database); echo "</pre>"; $this_main = array() ; $first_total = array() ; foreach ($database as $key => $main_v) { $id = $main_v['id'] ; $this_main[$id] = array() ;
$this_main[$id]['id'] = $main_v['id'] ; $this_main[$id]['content'] = $main_v['content'] ; $this_main[$id]['author_id'] = $main_v['author_id'] ; $this_main[$id]['date'] = $main_v['date'] ; $this_main[$id]['parent_id'] = $main_v['parent_id'] ; $this_main[$id]['type'] = $main_v['type'] ; $this_main[$id]['childs'] = array();
$first_id = $this_main[$id]['id'] ; $first_parent = $this_main[$id]['parent_id'] ; $first_childs = array() ; $first_total = $this_main[$id] ;
if ($first_parent != 0) { $second_childs = array() ; $second_parent = $this_main[$first_parent]['parent_id'] ; //----- if ($second_parent != 0) { $third_childs = array() ; $third_parent = $this_main[$second_parent]['parent_id'] ; //----- if ($third_parent != 0) { $fourth_childs = array() ; $fourth_parent = $this_main[ $third_parent]['parent_id'] ; //----- if ($fourth_parent != 0) { $fifth_parent = $this_main[ $fourth_parent]['parent_id'] ; array_push($fourth_childs,$this_main[$id]) ; } else { array_push($third_childs,$this_main[$id]) ; } } else { array_push($second_childs,$this_main[$id]) ; } } else { array_push($first_childs,$second_childs) ; } } array_push($this_main[$id]['childs'] ,$first_childs) ;
echo "<hr><pre>"; print_r($this_main[$id]);
}
}}?>
میشه دوستان با تجربه یه کد روش تر و تمیز بهم بگید که خودتونم ازش جواب گرفته باشد ! لطف راهنمایی کلی نفرمایید چون توش گیر میکنم متاسفانه !
اگرم یه کد بنویسید که کانسپت کار رو بگیرم عالی میشه !
ممنونم