![]() |
# 1 |
חבר בקהילה
|
פורום עץ
שלום.
אני מנסה לבנות פורום בסגנון של תפוז וכדומה. ניסיתי כמה רעיונות, אך לא מצאתי את הדרך לסדר את הקטע של מיקום כותרת ההודעה ביחס לתגובה לה הגיבו, כמו שנגיד בתפוז: כותרת לתגובה התגובה ל"כותרת לתגובה" התגובה להתגובה ל"כותרת לתגובה" האם למישהו יש רעיון איך אני מפיק את האפקט הזה? |
![]() |
![]() |
# 2 |
חבר וותיק
|
קלי קלות..
רקורסיה (: אתה עושה טבלה כזאת 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.. |
![]() |
![]() |
# 3 |
אחראי פורום
|
ד"א, עדיף להשתמש ב-UL ו-LI ו-UL בתוך LI במקום padding.
|
![]() |
![]() |
# 4 |
חבר בקהילה
|
לא ממש הבנתי את התשובה שלך.
מצאתי את האשכול הזה: http://www.hosts.co.il/forums/showthread.php?p=243590 אך לא הבנתי את התשובה של אלעד. אשמח להסבר נוסף. |
![]() |
![]() |
# 5 |
חבר וותיק
|
אממ כן אבל זה לא כ'כ עקרוני
ובקשר לתשובה של אלעד - הכל תלוי בכמה טבלאות מדובר בהנחה שאנחנו מדברים על 10 מיליון שורות כפול עוד עמודת LEVEL נניח בגודל קבוע של 4 בתים? גדול מידי לטעמי - עדיף לעשות רקורסיה וCACHE לתוצאות, אחת לX זמן לעשות קאשינג מחדש - יותר יעיל כמובן שאם אתה עובד עם עמודים לא מדובר ברקורסיה מטורפת, אחרי הכל כמה תת-רמות יכולות להיות לתגובה אחת? נניח 500 תגובות? עדיין משתלם לחסוך עמודת LEVEL ולעשות CACHE-ING לתוצאות ובנוגע לקוד עם הרקורסיה - הגשתי לך בכפית לפה - קרא בשנית את ההודעה כאן למעלה שבת שלום ניצן
__________________
![]() |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|