הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 01-08-08, 23:30   # 1
phpyo
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jan 2007
הודעות: 180

phpyo לא מחובר  

פורום עץ

שלום.
אני מנסה לבנות פורום בסגנון של תפוז וכדומה.
ניסיתי כמה רעיונות, אך לא מצאתי את הדרך לסדר את הקטע של מיקום כותרת ההודעה ביחס לתגובה לה הגיבו, כמו שנגיד בתפוז:

כותרת לתגובה
התגובה ל"כותרת לתגובה"
התגובה להתגובה ל"כותרת לתגובה"

האם למישהו יש רעיון איך אני מפיק את האפקט הזה?
  Reply With Quote
ישן 01-08-08, 23:51   # 2
intercooler3819
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Jul 2008
הודעות: 1,056

intercooler3819 לא מחובר  

קלי קלות..
רקורסיה (:
אתה עושה טבלה כזאת
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..
  Reply With Quote
ישן 02-08-08, 11:29   # 3
Daniel
אחראי פורום
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 2,875

Daniel לא מחובר  

ד"א, עדיף להשתמש ב-UL ו-LI ו-UL בתוך LI במקום padding.
  Reply With Quote
ישן 02-08-08, 12:38   # 4
phpyo
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jan 2007
הודעות: 180

phpyo לא מחובר  

לא ממש הבנתי את התשובה שלך.
מצאתי את האשכול הזה: http://www.hosts.co.il/forums/showthread.php?p=243590
אך לא הבנתי את התשובה של אלעד.
אשמח להסבר נוסף.
  Reply With Quote
ישן 02-08-08, 15:08   # 5
intercooler3819
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Jul 2008
הודעות: 1,056

intercooler3819 לא מחובר  

ציטוט:
נכתב במקור על ידי MasterT צפה בהודעה
ד"א, עדיף להשתמש ב-UL ו-LI ו-UL בתוך LI במקום padding.
אממ כן אבל זה לא כ'כ עקרוני

ובקשר לתשובה של אלעד - הכל תלוי בכמה טבלאות מדובר
בהנחה שאנחנו מדברים על 10 מיליון שורות כפול עוד עמודת LEVEL נניח בגודל קבוע של 4 בתים? גדול מידי לטעמי - עדיף לעשות רקורסיה וCACHE לתוצאות, אחת לX זמן לעשות קאשינג מחדש - יותר יעיל

כמובן שאם אתה עובד עם עמודים לא מדובר ברקורסיה מטורפת, אחרי הכל כמה תת-רמות יכולות להיות לתגובה אחת? נניח 500 תגובות? עדיין משתלם לחסוך עמודת LEVEL ולעשות CACHE-ING לתוצאות

ובנוגע לקוד עם הרקורסיה - הגשתי לך בכפית לפה - קרא בשנית את ההודעה כאן למעלה

שבת שלום

ניצן
__________________
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 08:21.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ