|
|
|
|
# 1 |
|
חבר וותיק
|
קלי קלות..
רקורסיה (: אתה עושה טבלה כזאת id | cid | title | content עכשיו הPID מסמל את הID של התגובה שאליה מגיבה התגובה הנוכחית כאשר הPID = 0 מדובר בנושא אתה בהתחלה שולף מהטבלה בעזרת WHILE בכל מקום שבו PID=0 ואז בתוך הלולאת WHILE קורא לפונקציה רקורסיבית שבעבור כל הודעה שהPID אצלה שווה לID של הנושא הנוכחי תחפש הודעות שהPID שלהם שווה לID של התגובה זה נשמע קצת מסובך רקורסיה פשוטה אממ אני לא יודע אם זה הכי יעיל פשוט פעם אחרונה שכתבתי כזה עץ עשיתי את זה ככה, מן הסתם אם תחשוב על דרך להריץ את זה עם לולאות זה יהיה יותר יעיל שבת שלום ניצן עידכון סתם בגלל נחמדות יתרה הרצתי כאן שאילתא בתקיית עבודות שלי על זה הנה הפונקציה: קוד:
function rec_posts($pid, $padding = 0)
{
global $DB, $STD, $greendays, $posts_array;
$posts_q = $DB->query("SELECT * FROM `sk_forums_posts` WHERE `pid`='{$pid}'");
if ($DB->numRows($posts_q) > 0)
{
while ($posts_f = $DB->fetchArray($posts_q))
{
$z5 = $DB->query("SELECT `name` FROM `sk_users` WHERE `id`='{$posts_f['poster_id']}'");
$z6 = $DB->fetchArray($z5);
$posts_f['poster_name'] = $z6['name'];
if ((time()-$posts_f['post_date']) <= $greendays) $posts_f['d'] = 1;
$posts_f['padding'] = $padding;
$posts_f['date'] = $posts_f['post_date'];
$posts_f['post_date'] = $STD->fast_date("forum_post_date", $posts['post_date']);
$posts_array[$posts_f['date']] = $posts_f;
$padding++;
rec_posts($posts_f['id'], $padding);
}
}
}
קוד:
$topics_buffer = "";
while ($topics_f = $DB->fetchArray($topics_q))
{
$posts_array = Array();
rec_posts($topics_f['id']);
$posts_buffer = "";
if (count($posts_array) > 0)
{
ksort($posts_array);
foreach ($posts_array as $post_date => $parray)
{
$posts_buffer .= $SKIN->post($parray);
}
}
$topics_f['posts_content'] = $posts_buffer;
$z7 = $DB->query("SELECT `name` FROM `sk_users` WHERE `id`='{$topics_f['poster_id']}'");
$z8 = $DB->fetchArray($z7);
$topics_f['poster_name'] = $z8['name'];
if ((time()-$topics_f['post_date']) <= $greendays) $topics_f['d'] = 1;
$topics_f['post_date'] = $STD->fast_date("forum_post_date", $topics_f['post_date']);
$topics_buffer .= $SKIN->topic($topics_f);
unset($posts_buffer);
}
$num = $DB->numRows($DB->query("SELECT `id` FROM `sk_forums_posts` WHERE `pid`='0'"));
$lnkbuf = "";
for ($i=1; $i<=ceil($num/$perpage); $i++)
{
if ($INC['page'] == $i) $lnkbuf .= $SKIN->list_pagelink_current($i, $INC['id']);
else $lnkbuf .= $SKIN->list_pagelink($i, $INC['id']);
}
$output .= $SKIN->template(Array('posts' => $topics_buffer, 'page_links' => $lnkbuf, 'fid' => $INC['id'], 'name' => $forum_info['name']));
קוד:
CREATE TABLE `sk_forums` ( `id` INT(8) AUTO_INCREMENT, `posts` INT(8) NOT NULL, `name` TEXT NOT NULL, `description` TEXT, `rules` TEXT, `manager_id` INT(8), `perm` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `sk_forums_posts` ( `id` INT(8) AUTO_INCREMENT, `pid` INT(8) NOT NULL, `fid` INT(8) NOT NULL, `title` TEXT NOT NULL, `content` TEXT, `poster_id` INT(8) NOT NULL, `post_date` TEXT NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM; עדיפות למייל ניצן
__________________
Last edited by intercooler3819; 01-08-08 at 23:56.. |
|
![]() |
| חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|