לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 13-04-2007, 22:21
  משתמש זכר davidman davidman אינו מחובר  
 
חבר מתאריך: 27.04.05
הודעות: 441
פורום עץ

אני מנסה לעשות הצגה כמו שעושים בפורום עץ
הרעיון שלי הוא כזה יש לי PARENT_ID כאשר הוא "0" זה אומר שהאשכול הוא הודעה חדשה(POST חדש) ,עם המספר שלו שונה מ "0" זה תגובה לאשכול והמספר שיהיה ב PARENT_ID הוא בעצם ה ID של האשכול שאליו מופנה התגובה .
התחלתי בכתיבת הקוד , זה מה שיש לי בנתיים :
קוד PHP:
<?php
####Mysql Connect####
$user "root";
$pass "";
$db "Tree";
$connect mysql_connect("localhost","$user","$pass");
if ( ! 
$connect )
        die (
"mysql_error()");
mysql_select_db($db,$connect) or die ( "mysql_error()");
####Tree Function####
function parent($parent_id_num)
{
$query mysql_query("SELECT * FROM parent_posts WHERE parent_id='$parent_id_num'");
while(
$toza mysql_fetch_array($query)) 
{
echo 
"<br>" $toza['conntent'];
}
}
parent("0");
?>

מה שהקוד עושה בנתיים הוא מדפיס רק את האשכולות שה PARENT_ID שלהם 0 , שבמקרה שלי זה הפוסטים הראשיים .
השאלה שלי בעצם איך אני ממשיך מפה איך אני מדפיס מתחתם את התגובות שלהם ?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 14-04-2007, 09:35
  משתמש זכר דָן דָן אינו מחובר  
 
חבר מתאריך: 29.03.07
הודעות: 316
שלח הודעה דרך MSN אל דָן
בתגובה להודעה מספר 1 שנכתבה על ידי davidman שמתחילה ב "פורום עץ"

בלולאה אתה עושה עוד שאילתה ושולף את כל ההודעות שהparentID שלהם זהה לID של ההודעה הנוכחית.
משהו כזה:
קוד PHP:
 function getRelevant($pid){
$parents mysql_query("SELECT parent_posts.* FROM `parent_posts` WHERE parent_posts.parent_id = '".(int) $pid."'");
 
while(
$parent mysql_fetch_object($parents)){
$var[$parent->id] = $parent->content;
 
$childs mysql_query("SELECT parent_posts.* FROM `parent_posts` WHERE parent_posts.parent_id = '".(int) $parent->id."'");
 
while(
$child mysql_fetch_object($childs)){
$var[$parent->id][$child->id] = $child->content;
}
}
 
return 
$var;



לא עבר בדיקה. זה יכול לעבוד וזה יכול לא.

כל מה שעשיתי זה סה"כ עוד שאילתה בלולאה שכל פעם שולפת את הילדים של ההורה הנוכחי.

( למה תמיד כשאני מדביק פה קודים - ההזחות נהרסות? )

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

נערך לאחרונה ע"י דָן בתאריך 14-04-2007 בשעה 09:47.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 14-04-2007, 11:20
  משתמש זכר davidman davidman אינו מחובר  
 
חבר מתאריך: 27.04.05
הודעות: 441
בתגובה להודעה מספר 2 שנכתבה על ידי דָן שמתחילה ב "בלולאה אתה עושה עוד שאילתה..."

דן תודה על העזרה ! .
בעזרת הקוד שלך הגעתי לקוד הבא :
קוד PHP:
<?php
####Mysql Connect####
$user "root";
$pass "";
$db "Tree";
$connect mysql_connect("localhost","$user","$pass");
if ( ! 
$connect )
        die (
"mysql_error()");
mysql_select_db($db,$connect) or die ( "mysql_error()");
####Tree Function####
function Tree($pid){
$parents mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$pid' ");
 
while(
$parent mysql_fetch_array($parents)){
echo 
"<br>" $parent['conntent'];
$child_id $parent['id'];
$childs mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$child_id' ");
while(
$child mysql_fetch_array($childs)){
echo 
"<br>" $child['conntent'];
}
}
}  
Tree("0");
?>

עכשיו הקוד מציג לי את האב ואת הבן שלו .
קוד:
main 1 sub main 2 sub post for 2 main 3 main 243

עכשיו צריך לעבור לשלב הבא , איך להציג את כול הבנים של כול האבות (הכוונה לתגובה של התגובה ושל התגובה ) , לפי דעתי אני צריך להיכנס לאיזה לולאה , אבל אני לא בטוח בזה אתה יכול
להסביר לי איך להמשיך ?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 14-04-2007, 14:13
  משתמש זכר davidman davidman אינו מחובר  
 
חבר מתאריך: 27.04.05
הודעות: 441
בתגובה להודעה מספר 4 שנכתבה על ידי Alpha Leader שמתחילה ב "תחשוב בצורה רקורסיבית, משהו..."

אוקיי עכשיו הפונקציה באמת קוראת לעצמה ( קוראים לזה רקורסיה ?)
קוד PHP:
<?php
####Mysql Connect####
$user "root";
$pass "";
$db "Tree";
$connect mysql_connect("localhost","$user","$pass");
if ( ! 
$connect )
        die (
"mysql_error()");
mysql_select_db($db,$connect) or die ( "mysql_error()");
####Tree Function####
function Tree($pid){
$parents mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$pid' ");
 while(
$parent mysql_fetch_array($parents)){
echo 
"<br>" $parent['conntent'];
$child_id $parent['id'];
$childs mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$child_id' ");
while(
$child mysql_fetch_array($childs)){
echo 
"<br>" $child['conntent'];
}
Tree($child_id);
}
}  
Tree("0");
?>

זה כן מציג עכשיו את התגובה של התגובה ושל התגובה עם צריך , אבל יש מין באג זה מציג לי כול דבר פעמיים חוץ מהתגובות הראשונות :
קוד:
main 1 sub sub main 2 sub post for 2 sub post for 2 sub post for sub post 2 sub post for sub post 2 sub sub for 2 sub sub for 2 main 3 main 243

אני מניח שזה נובע משום שאני צריך עוד משתנה בפונקציה שיהיה כמו מונה , אבל אני לא ממש בטוח מה אני צריך לעשות , אפשר עוד קצת עזרה ?

תודה רבה !@
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 14-04-2007, 14:52
צלמית המשתמש של Alpha Leader
  Alpha Leader Alpha Leader אינו מחובר  
 
חבר מתאריך: 26.10.04
הודעות: 827
שלח הודעה דרך ICQ אל Alpha Leader
בתגובה להודעה מספר 5 שנכתבה על ידי davidman שמתחילה ב "אוקיי עכשיו הפונקציה באמת..."

קוד PHP:
<?php
 
####Mysql Connect####
$user "root";
$pass "";
$db "Tree";
$connect mysql_connect("localhost","$user","$pass");
if ( ! 
$connect )
        die (
"mysql_error()");
mysql_select_db($db,$connect) or die ( "mysql_error()");
####Tree Function####
function Tree($pid){
$parents mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$pid' ");
 while(
$parent mysql_fetch_array($parents)){
echo 
"<br>" $parent['conntent'];
$child_id $parent['id'];
$childs mysql_query("SELECT * FROM `parent_posts` WHERE parent_id = '$child_id' ");
while(
$child mysql_fetch_array($childs)){
echo 
"<br>" $child['conntent']; // <-----------------------------------
}
Tree($child_id);
}
}  
Tree("0");
?>


השורה שסימנתי מיותרת, הרי הפונצקציה עצמה תדפיס את התוכן של הילד, כשהיא תקרא לעצמה, אז למה להדפיס את זה שוב?

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


נערך לאחרונה ע"י Alpha Leader בתאריך 14-04-2007 בשעה 14:56.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 14-04-2007, 16:09
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 2 שנכתבה על ידי דָן שמתחילה ב "בלולאה אתה עושה עוד שאילתה..."

הערה דיי חשובה על הדרך הזאת:
רקורסיה זו שיטה שידועה כדורשת משאבים רבים, הוספת 2 שאילתות לכל קריאה בפונקציה זה מעשה מאוד לא יעיל, אפשר להגיע ככה בקלות ל-50 שאילתות בדף, נניח ש- 10 גולשים נכנסים לדף בו זמנית, משהו שהוא דיי סביר, המסד נתונים יצטרך להתמודד עם 500 שאילתות, ובכלל אם השרת כולל עוד אתרים נוצר עומס גדול על השרת.

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

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

הפלט שיוצא הוא בעצם מחרוזת עם כל העמודות מופרדות ב- '*' וככה אני עושה את זה ב- JS:
קוד PHP:
 function showMessage(indexdeep)
{    
    if(
deep == 1)
    {
        
finalText += '<div class="msg" onclick="showNhide(\'linking_'+recArray[index+4]+'\');">';
        
finalText += '<img src="images/mn.gif" width="20" height="20" alt="mes" />';
        
finalText += recArray[index+1];
        
finalText += '<\/div>';
        
finalText += '<div id="linking_'+recArray[index+4]+'" style="display: none;">';
        
finalText += '<div class="msgcont">'+recArray[index+2]+'<\/div>';
        
finalText += '<div class="btn_bar"><img src="images/quick.gif" width="120" height="19" alt="" /><img src="images/full.gif" width="119" height="19" alt="" /><img src="images/edit.gif" width="48" height="19" alt="" /><img src="images/earse.gif" width="56" height="19" alt="" /><\/div>';
        for (var 
a=0;a<recArray.length;a+=cntFields)
        {
            if (
recArray[a]==recArray[index+3])
                
showMessage(a2);
        }
        
finalText += '<\/div>';
    }
    else
    {
        var 
ped = (deep 1) * 20;
        
        
finalText += '<div class="msg" style="margin-right : '+ped+'px;" onclick="showNhide(\'mess_'+recArray[index+3]+'\');">';    
        if(
recArray[index+2].length == 0//if the string is empty..
        
{
            
finalText += '<img src="images/me.gif" width="20" height="20" alt="" />';
            
finalText += recArray[index+1];
            
finalText += '<\/div>';
            
finalText += '<div style="display: none;" id="mess_'+recArray[index+3]+'">';
            
finalText += '<div style="margin-right : '+ped+'px;" class="msgcont">-ללא תוכן-<\/div>';
            
finalText += '<div style="margin-right : '+ped+'px;" class="btn_bar"><img src="images/quick.gif" width="120" height="19" alt="" /><img src="images/full.gif" width="119" height="19" alt="" /><img src="images/edit.gif" width="48" height="19" alt="" /><img src="images/earse.gif" width="56" height="19" alt="" /><\/div><\/div>';
            
        }
        else
        {
            
finalText += '<img src="images/mf.gif" width="20" height="20" alt="" />';
            
finalText += recArray[index+1];
            
finalText += '<\/div>';
            
finalText += '<div style="display: none;" id="mess_'+recArray[index+3]+'">';
            
finalText += '<div style="margin-right : '+ped+'px;" class="msgcont">'+recArray[index+2]+'<\/div>';
            
finalText += '<div style="margin-right : '+ped+'px;" class="btn_bar"><img src="images/quick.gif" width="120" height="19" alt="" /><img src="images/full.gif" width="119" height="19" alt="" /><img src="images/edit.gif" width="48" height="19" alt="" /><img src="images/earse.gif" width="56" height="19" alt="" /><\/div><\/div>';            
        }
        for (var 
a=0;a<recArray.length;a+=cntFields)
        {
            if (
recArray[a]==recArray[index+3])
                
showMessage(adeep 1);
        }
    }

_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:43

הדף נוצר ב 0.12 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר