PDA

View Full Version : ایجاد یک حلقه ی تو در توی بینهایت



masiha68
یک شنبه 18 خرداد 1393, 11:43 صبح
سلام دوستان
من می خوام یه حلقه بسازم که پیغام های یک کاربر رو نمایش بده و اگه اون پیغام فیلد parnt ش هم پر بود بره و اون رو هم نمایش بده و اگه فیلد parnt اونی که نمایش داده میشه هم پر بود بره و اون رو هم پیدا کنه و نمایش بده و الخ
راه منطقی این کار چیه و چطوری میشه همچین کاری رو انجام داد .... مثلا فرض کنید یک پیغام صدتا صدتا پاسخ داشته باشه چجوری اونها رو نمایش بدم ؟
یه چیزی شبیه این
::
120005

omidabedi
یک شنبه 18 خرداد 1393, 13:28 عصر
در دیتابیس یک فیلدی بزارید بنام depth که میزان تو رفتگی رو توش ذخیره کنید از پست اصلی یا بسته بکارتون از پست قبلیش و بعد بمیزان depth با css اینارو تنظیم کنید

این تصویری هم که گذاشتید ک اینجور شده اینا quote هستن که اینجوری افتاده

masiha68
یک شنبه 18 خرداد 1393, 13:36 عصر
فهمیدم قضیه اش چطوریه
اما اگه امکانش باشه یه مثال بزنین ... نمونه کد

omidabedi
یک شنبه 18 خرداد 1393, 15:37 عصر
ببینید میتونید یه table جداگانه ایجاد کنید برای اینکه بدونید هر کامنت مربوط به کدم کامنت دیگه هست با ای دی و relation ها

میتونید یکار دیگه ای کنید که در table کامنت ها یک فیلد بنام مثلا cm_position مکان هر کامنت رو اینگونه مشخص کنید مثلا


کامنت 1 ===> 1

کامنت 2 ===>2

پاسخ اول کامنت 2 ===> 2.1

پاسخ دوم کامنت 2 ===> 2.2

پاسخ سوم کامنت 2===>2.3

پاسخ کامنت سوم کامنت دوم والد ===> 2.3.1

پاسخ 2وم کامنت 3وم کامنت 2وم والد ===> 2.3.2

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

بعدش تو css با php مثلا بگو به ازای هر عدد 30px margin بده به فلان کامنت و ...

نمونه کد ندارم ولی برات پیدا میکنم

marys_farahani
یک شنبه 18 خرداد 1393, 18:28 عصر
سوالی بود که ذهن من خیلی درگیر کرد رفتم نشستم کدش نوشتم امیدوارم به دردتون بخوره .

http://up.p30parsi.com/out.php/i200487_untitled-1.jpg (http://up.p30parsi.com)


اینم یه دیتابیس ساده اگه خواستی خودت فیلدهاش بیشتر کن



DROP TABLE IF EXISTS `tbl_comment`;
CREATE TABLE IF NOT EXISTS `tbl_comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` text NOT NULL,
`parent_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;



اینم محتوای اولیه برای اینکه تست کنی


INSERT INTO `tbl_comment` (`id`, `title`, `parent_id`) VALUES
(1, 'سوال اول', 0),
(2, 'سوال دوم', 0),
(3, 'سوال سوم', 0),
(4, 'پاسخ سوال اول', 1),
(5, 'پاسخ سوال اولپاسخ', 4),
(6, 'پاسخ پاسخ پاسخ سوال اول ', 5),
(7, 'پاسخ سوال دوم پاسخ', 2);

ایجاد فایل core.php برای وصل شدن به دیتابیس



<?php
$conn = new PDO('mysql:host=localhost;dbname=press',"root", "");
$conn -> exec("set names utf8");
$table = 'tbl_comment';
?>



ایجاد فایل index.php برای خروجی برنامه



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>حلقه بی نهایت</title>
</head>
<body>
<?php
include("core.php");

$sth =$conn->prepare("SELECT * FROM $table WHERE `parent_id`='0' ORDER BY id ASC");
$sth->execute();

function generate_tree_list($table,$id_com)
{
global $conn;
$Output = "";
$ul_sub = "";
$sth_sub = $conn->prepare("SELECT * FROM $table WHERE `parent_id`=$id_com ORDER BY id DESC");
$sth_sub->execute();
foreach($sth_sub->fetchAll() as $row_sub)
{
if(!empty($row_sub["id"]))
{
$ulul2 = generate_tree_list('tbl_comment',$row_sub["id"]);
$ul_sub .= '<li>'.$row_sub["title"].$ulul2.'</li>';
}
}
return $Output = '<ol style="padding-left:40px">'.$ul_sub.'</ol>';
}

$ul = "";
$ulul = "";
foreach($sth->fetchAll() as $row)
{
$id = $row["id"];
$name = $row["title"];
$post = $row["parent_id"];

//print $id;
//print "<br/>";
$ulul = generate_tree_list('tbl_comment',$id);
$ul .= '<li>'.$name.$ulul.'</li>';

}
echo '<ul>'.$ul.'</ul>';
?>
</body>
</html>




موفق باشید

bagherok
یک شنبه 18 خرداد 1393, 22:47 عصر
اینجا (http://barnamenevis.org/showthread.php?443119-%D9%BE%DA%A9%DB%8C%D8%AC-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-PHP&p=2024017&viewfull=1#post2024017)رو ببینید.