همه چيز در مورد scroll.php

شروع موضوع توسط Hyper ‏17 آوریل 2005 در انجمن مقالات آموزشی phpBB

  1. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    با سلام

    در اين مقاله سعي خواهم كرد تا بطور مفصل امكانات موجود در فايل scroll.php رو مورد بررسي قرار بدم
    همونطور كه ميدونيد بيشتر انجمنها براي نمايش عناوين جديد ارسال شده از اين فايل استفاده ميكنند
    در اين بحث به چگونگي سفارشي كردن اين فايل و ايجاد تغييرات لازم در آن مي پردازيم ...

    فرمت اوليه اين فايل به شكل زير است :

    کد (Text):
    <?php
    //
    // Basic Configuration
    // How Many Topics you want to display?
    $topicnumber = 20;
    // Scrolling towards up or down?
    $scroll = "up";
    // Change this to your phpBB path


    $urlPath = "http://127.0.0.1/phpBB2.10R/";



    // Database Configuration (Where your phpBB config.php file is located
    include config.php;

    // Connecting & Selecting Databases
    $table_topics = $table_prefix. "topics";
    $table_forums = $table_prefix. "forums";
    $table_posts = $table_prefix. "posts";
    $table_users = $table_prefix. "users";
    $link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd") or die("Could not connect");
    mysql_select_db("$dbname") or die("Could not select database");

    // Perform Sql Query
    $query = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
    FROM $table_topics t, $table_forums f, $table_posts p, $table_users u
    WHERE t.topic_id = p.topic_id AND
    f.forum_id = t.forum_id AND
    t.topic_status <> 2 AND
    t.forum_id <> 30 AND
    t.forum_id <> 41 AND
    p.post_id = t.topic_last_post_id AND
    p.poster_id = u.user_id
    ORDER BY p.post_id DESC LIMIT $topicnumber";
    $result = mysql_query($query) or die("Query failed");

    // Outcome of the HTML
    // Be carefull when you edit these!


    print "<marquee dir="rtl" align="center" id="recent_topics" behavior="scroll" direction="$scroll" height="150" width="100%"  scrolldelay="100" scrollamount="2" onMouseOver="document.all.recent_topics.stop()" onMouseOut="document.all.recent_topics.start()">";
    print "<div align="center">";
    print "<table cellpadding=3 cellSpacing=2 >";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo  "<tr valign=top><td><font face="Tahoma" size="1"><font color="#FFCC00"><b> <a href="$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]"> <span style="text-decoration: none">" .
    $row["topic_title"] .
    "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#C0C0C0">by : <a href="$urlPath/profile.php?mode=viewprofile&u=$row[user_id]">" .
    $row["username"] .
    "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

    "</td></tr></font>";
    }
    print "</table></div></marquee>";


    // Free Result
    mysql_free_result($result);

    // Close the Connection
    mysql_close($link);
    ?>
    خروجي اين فايل عنوان آخرين مطالب ارسال شده به همراه نويسنده مطلب است ...



    و اما گزينه هايي كه مي بايست مورد توجه ما قرار گيرند ، عبارتند از :

    کد (Text):
    $topicnumber = 20;
    تعداد عناوين جديد قابل نمايش در اسكرول
    اين مقدار ميتواند بر اساس نياز تغيير يابد

    کد (Text):
    $scroll = "up";
    جهت حركت اسكرول
    اين مقدار ( up ) ميتواند down ، left و right باشد كه طبق تجربه مقادير left و right چندان خوشايند نيستند

    کد (Text):
    $urlPath = "http://127.0.0.1/phpBB2.10R/";
    آدرس سايت مورد نظر
    مثلا بنده اين رو بروي http://www.pptforum.com تنظيم كرده ام

    ساير موارد ، مقاديري هستند كه در مراحل پيشرفته تري نياز به تغيير دارند كه البته بحث ما دقيقا به هم دليل است

    من تصميم دارم علاوه بر نام تاپيك جديد و نويسنده آن ، اين امكانات رو به اين فايل اضافه كنم :

    1. نمايش انجمن مربوطه
    2. نمايش تعداد بازديد ها
    3. نمايش تعداد پاسخها

    اگر به ابتداي فايل نگاهي بندازيد ( قسمت Connecting & Selecting Databases ) متوجه خواهيد شد كه متغيرهاي لازم در اين قسمت از ديتابيس phpBB خوانده شده و در اختيارمون قرار ميگيره . مقاديري مثل topics و forums و ...
    ما با استفاده از همين مقادير و بدون نياز به افزودن متغييرهاي ديگري ميتونيم اطلاعات لازم رو جمع آوري كنيم
    ( ناگفته نماند كه درصورت نياز به استفاده از مقاديري غير از متغيرهاي موجود ، ميبايست تغييراتي در فراخواني اطلاعات از ديتابيس انجام داد كه البته از بحث ما خارج است ... )

    همونطور كه گفتم خروجي اين فايل شامل نام تاپيك جديد و نويسنده اون هست كه در اين قسمت توليد ميشه :

    کد (Text):
    // Outcome of the HTML
    // Be carefull when you edit these!

    print "<marquee dir="rtl" align="center" id="recent_topics" behavior="scroll" direction="$scroll" height="150" width="100%"  scrolldelay="100" scrollamount="2" onMouseOver="document.all.recent_topics.stop()" onMouseOut="document.all.recent_topics.start()">";
    print "<div align="center">";
    print "<table cellpadding=3 cellSpacing=2 >";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo  "<tr valign=top><td><font face="Tahoma" size="1"><font color="#FFCC00"><b> <a href="$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]"> <span style="text-decoration: none">" .
    $row["topic_title"] .
    "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#C0C0C0"> by : <a href="$urlPath/profile.php?mode=viewprofile&u=$row[user_id]">" .
    $row["username"] .
    "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

    "</td></tr></font>";
    }
    print "</table></div></marquee>";
    ما با دستورات قسمت هاي print كاري نداريم و منظور نظر اصلي ما قسمت echo است
    يعني اين :

    کد (Text):
    echo  "<tr valign=top><td><font face="Tahoma" size="1"><font color="#FFCC00"><b> <a href="$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]"> <span style="text-decoration: none">" .
    $row["topic_title"] .
    "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#C0C0C0">by : <a href="$urlPath/profile.php?mode=viewprofile&u=$row[user_id]">" .
    $row["username"] .
    "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

    "</td></tr></font>";
    خوب كافيست اين دستورات رو در جاي لازم درج كنيم :

    کد (Text):
            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981"> Forum :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["forum_name"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981"> Views :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["topic_views"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Replies :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["topic_replies"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .
    يعني در نهايت كل قسمت echo به اين شكل خواهد بود :

    کد (Text):

    echo
        "<tr valign=top>
            <td><font face="Tahoma" size="1"><font color="#FFCC00"><b> </b><font color="#978981">  Topic :
            <a href="$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]">
            <span style="text-decoration: none">" . $row["topic_title"] .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Forum :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["forum_name"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Views :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["topic_views"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Replies :
            <font color="#978981">
            <$urlPath/viewtopic.php?p=$row[topic_last_post_id]#$row[topic_last_post_id]>" . $row["topic_replies"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Last Poster ( by ) :
            <a href="$urlPath/profile.php?mode=viewprofile&u=$row[user_id]">" . $row["username"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .

            "</td></tr></font>";
     
    تا اينجا خروجي فايل رو به شكل دلخواه در آورده و گزينه هاي مورد نظر رو در اون قرار داده ايم

    هنوز كارمون تموم نشده !
    2 قسمت ديگه مونده ، فرض كنيم تمايل داشته باشيم كه تاپيك هاي جديد از انجمن خاصي در ليست اسكرول نمايش داده نشه و يا فقط تاپيك هاي انجمن خاصي نمايش داده بشه . پس دو تا پروژه داريم :

    1. جلوگيري از نمايش تاپيك هاي انجمني خاص
    2. فقط نمايش تاپيك هاي انجمني خاص

    براي اين كار در وهله اول نياز به شماره انجمن مورد نظ داريم
    همونطور كه حتما ميدونيد ، phpBB به هر انجمن شماره منحصر به فردي اختصاص ميده . استخراج اين شماره هم راههاي متفاوتي داره كه ساده ترينش استفاده از همين scroll.php است !
    كافيست دستور زير رو در پايان قسمت echo و پيش از كد

    کد (Text):
     "</td></tr></font>";
    اضافه كنيد :

    دستور :

    کد (Text):
            "</span></a></td></font></b><td><font face="Tahoma" size="1"><font color="#978981">  Forum No :
            <a href="$urlPath/profile.php?mode=viewprofile&u=$row[user_id]">" . $row["forum_id"] .
            "</td><td><font face="Tahoma" size="1"><font color="#C0C0C0">" .
    حالا اگر به خروجي اسكرول نگاهي بندازيد خواهيد ديد كه شماره انجمن هم در ليست تاپيك هاي جديد نمايش داده ميشه ...
    ( فراموش نكنيد كه پس از استخراج شماره مورد نظر اين قسمت رو حذف كنيد ، مگر اينكه خودتون تمايل داشته باشيد نمايش داده بشه ... )

    به اين ترتيب حالا ما شماره هاي دلخواه را داريم
    پس ميتونيم شروع كنيم

    بر اساس قواعد اوليه برنامه نويسي ، براي جلوگيري از انجام موردي خاص ميبايست ( و همينطور انجام مواردي خاص ) ميبايست از دستورهاي شرطي استفاده كنيم
    ساختار شرطي IF رو هم حتما ميشناسيد
    براي رسيدن به هدفمون كافيه كه از اين دستور شرطي استفاده كنيم
    و در واقع خروجي نهايي رو ( اگه خاطرتون باشه دستور echo بود ) در اين ساختار اجرا كنيم
    فرض كنيد شماره انجمن مورد نظر من 92 است
    براي جلوگيري از نمايش تاپيك هاي اين انجمن كافيست از اين شكل دستور استفاده كنيد :

    کد (Text):
    if  ($forum_no <> 92)
    {
    دستور echo
    }
    در صورتي كه تمايل داريد به تعداد اين انجمنها بيفزايد ميتونيد پس از استخراج شماره هاي مورد نظر به ترتيب زير عمل كنيد :

    کد (Text):
    if  (($forum_no <> 92) and ($forum_no <> 2 ) and ($forum_no <> 16 ))
    {
    دستور echo
    }
    همونطور كه مي بينيد من در اينجا از نمايش تاپيك هاي انجمنهاي شماره 92 و 2 و 16 جلوگيري كرده ام

    براي نمايش تاپيك هاي انجمني خاص هم باز به همين شكل عمل ميكنيد
    با استفاده از اين دستور شرطي :

    کد (Text):
    if  (($forum_no == 92)
    {
    دستور echo
    }
    و يا براي تعدادي انجمن :

    کد (Text):
    if  (($forum_no == 5) and ($forum_no == 98 ) and ($forum_no == 94 ))
    {
    دستور echo
    }

    اميدوارم اين بحث مفيد واقع شده باشه
    در مباحث آينده به نحوه استخراج مقدار خاصي از ديتابيس و همچنين نمايش تاپيكي خاص به صورت ثابت ( دائم ) در scroll.php مي پردازيم ...

    با تشكر
     
    نوشته شده توسط Hyper در ‏17 آوریل 2005
  2. goldenteach

    goldenteach New Member

    ارسال‌ها:
    16
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    اگه بخوایم تو یه صفحه دیگه نشون بدیم از چه کدی باید استفاده کنیم؟
     
    نوشته شده توسط goldenteach در ‏17 آوریل 2005
  3. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    تو يه صفحه ديگه يعني چي ؟
    متوجه نميشم ...
     
    نوشته شده توسط Hyper در ‏18 آوریل 2005
  4. mahmoud_ghoochani

    mahmoud_ghoochani Member

    ارسال‌ها:
    57
    تشکر شده:
    0
    امتیاز دستاورد:
    6
    ميشه بگين كدي كه بايد براي فعال سازي اين اسكرول توي صفحه اول انجمن هامون چه كدي را بزاريم ؟ منظورم همون كد فراخواني اين اسكروله
     
    نوشته شده توسط mahmoud_ghoochani در ‏27 آوریل 2005
  5. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    در فايل index.php بعد از خطوط زير

    کد (Text):
    //
    // Generate the page
    //
    اين دستور را وارد كنيد

    کد (Text):
    include($phpbb_root_path . scroll..$phpEx);
     
    نوشته شده توسط Hyper در ‏28 آوریل 2005
  6. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    اين هم scroll.php تكامل يافته ... !
     
    نوشته شده توسط Hyper در ‏29 آوریل 2005
  7. f_mostafa_f

    f_mostafa_f Active Member

    ارسال‌ها:
    1,067
    تشکر شده:
    16
    امتیاز دستاورد:
    38
    نمیدونم سوالم بیربطه یا نه...آخه من در phpbb تازه کارم.....

    این فایل در کجا باید آپلود بشه...

    ممنون میشم از پاسختون
     
    نوشته شده توسط f_mostafa_f در ‏1 می 2005
  8. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36

    اينجا ... !
     
    نوشته شده توسط Hyper در ‏2 می 2005
  9. reza_pa48

    reza_pa48 Active Member

    ارسال‌ها:
    580
    تشکر شده:
    29
    امتیاز دستاورد:
    28
    سلام.ممنون که این همه کمک میکنید .من تمام کارهایی که شما گفتین کردم.آخرین پستها رو هم نشون می ده.ولی 2 تا سوال داشتم
    1-وقتی روی پستهای آخر که نشون میده کلیک میکنم میگه :
    Not Found
    The requested URL /phpBB2.10R//viewtopic.php was not found on this server.

    Apache/1.3.27 Server at 127.0.0.1 Port 80

    2-مثلا اگه بخوام تو صفحه اول سایتم آخرین پستها رو نشون بده نه توی صفحه اول انجمنها.چی کار باید بکنم؟
    ممنون که جواب می دین.
     
    نوشته شده توسط reza_pa48 در ‏10 می 2005
  10. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    سوال اول :

    اشکال اینجاست

    کد (Text):
    $urlPath = "http://127.0.0.1/phpBB2.10R/";
    آدرس سايت خودتون رو جايگزين كنيد
    مثلا http://www.pptforum.com/

    كه نهايت اين ميشه :

    کد (Text):
    $urlPath = "http://www.pptforum.com/";


    سوال دوم :

    صفحه اول سايت و انجمن ؟!

    مگر شما از پورتال استفاده ميكنيد ... ؟
     
    نوشته شده توسط Hyper در ‏11 می 2005
  11. reza_pa48

    reza_pa48 Active Member

    ارسال‌ها:
    580
    تشکر شده:
    29
    امتیاز دستاورد:
    28
    سلام.
    ممنون که جواب دادید.مشکل اول حل شد و اما درباره مشکل دوم
    مثال سایت یک صفحه ایندیکس داره که از اونجا می شه به فوم هم رفت.مثل مجید آنلاین.من می خوام که مثل مجید آنلاین آخرین پستها در صفحه ایندیکس هم نشون داده بشه.ممنون
     
    نوشته شده توسط reza_pa48 در ‏13 می 2005
  12. reza_pa48

    reza_pa48 Active Member

    ارسال‌ها:
    580
    تشکر شده:
    29
    امتیاز دستاورد:
    28
    کسی نیست؟
     
    نوشته شده توسط reza_pa48 در ‏15 می 2005
  13. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    دوست عزیز

    من که قبلا گفتم

    دستور include را به فایل مورد نظرتون اضافه کنید ...
     
    نوشته شده توسط Hyper در ‏16 می 2005
  14. bache +

    bache + Active Member

    ارسال‌ها:
    1,615
    تشکر شده:
    76
    امتیاز دستاورد:
    36
    Parse error: parse error, unexpected '.' in /home/topolmop/public_html/phpbb/index.php on line 459

    Parse error: parse error, unexpected T_STRING in /home/topolmop/public_html/phpbb/scroll.php on line 43
     
    نوشته شده توسط bache + در ‏5 ژانویه 2006
  15. shahnameh

    shahnameh Member

    ارسال‌ها:
    91
    تشکر شده:
    23
    امتیاز دستاورد:
    6
    سلام دستد درد نكنه بابت آموزش خوبت
    اگه ميشه آموزش نشان دادن همين فايل scroll را روي صفحه اول بديد مثلا گر صفحه index.htm باشه

    چاكر همتون شاهنامه
     
    نوشته شده توسط shahnameh در ‏13 آگوست 2006
  16. shahnameh

    shahnameh Member

    ارسال‌ها:
    91
    تشکر شده:
    23
    امتیاز دستاورد:
    6
    يعني كسي بلد نيست!!!!
     
    نوشته شده توسط shahnameh در ‏20 آگوست 2006
  17. ramphp

    ramphp New Member

    ارسال‌ها:
    1
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    يك سوعال داشتم اگه كسي مي دونه لطفاْ جواب بده يك ماه هست كه دنبال جوابش مي گردم
    دنبال راحي مي گردم كه مثلاْ وقتي يك شرط برقرار بود بره يك صفحه
    php
    ديگه را باز بكند بدون فشاردادن هيچ لينكي

    if(a>b)
    {.....برو صفحه جديد را باز بكن..}

    از تابع incude() ,incule_once() ,require() ,require_once()
    استفاده كردم صفحه جديد را باز مي كند اما تصاوير را نشان نمي دهد
    لطفاْ يك تابع يا يك راه بگيد كه به جواب برسم ؟ متشكرم
     
    نوشته شده توسط ramphp در ‏20 آگوست 2006
  18. Hyper

    Hyper Active Member

    ارسال‌ها:
    1,478
    تشکر شده:
    286
    امتیاز دستاورد:
    36
    دوست عزیز ramphp

    این تاپیک چه ارتباطی به مشکل شما داره ؟!

    سوالتون رو در انجمن PHP/MySQL مطرح کنید ...

    رضا
     
    نوشته شده توسط Hyper در ‏22 آگوست 2006
  19. egold4ucom

    egold4ucom New Member

    ارسال‌ها:
    4
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    من این خط را به index.php اضافه کردم ولی این خطا را دریافت کردم:
    Parse error: syntax error, unexpected '.' in /home/egold4u/public_html/forum/index.php on line 466
    بعد دوباره اون خط را (که در همین خط 466 بود) را هم پاک کردم ولی کماکان همین error را میگیرم:
    http://forum.e-gold4u.com
     
    آخرین ویرایش: ‏29 سپتامبر 2006
    نوشته شده توسط egold4ucom در ‏29 سپتامبر 2006

به اشتراک بگذارید