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

Hyper

Active Member
با سلام

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

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

کد:
<?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);
?>

خروجي اين فايل عنوان آخرين مطالب ارسال شده به همراه نويسنده مطلب است ...



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

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

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

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

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

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

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

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

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

کد:
// 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 است
يعني اين :

کد:
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>";

خوب كافيست اين دستورات رو در جاي لازم درج كنيم :

کد:
        "</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 به اين شكل خواهد بود :

کد:
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 و پيش از كد

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

دستور :

کد:
        "</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 است
براي جلوگيري از نمايش تاپيك هاي اين انجمن كافيست از اين شكل دستور استفاده كنيد :

کد:
if  ($forum_no <> 92) 
{
دستور echo
}

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

کد:
if  (($forum_no <> 92) and ($forum_no <> 2 ) and ($forum_no <> 16 ))
{
دستور echo
}

همونطور كه مي بينيد من در اينجا از نمايش تاپيك هاي انجمنهاي شماره 92 و 2 و 16 جلوگيري كرده ام

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

کد:
if  (($forum_no == 92)
{
دستور echo
}

و يا براي تعدادي انجمن :

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


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

با تشكر
 
ميشه بگين كدي كه بايد براي فعال سازي اين اسكرول توي صفحه اول انجمن هامون چه كدي را بزاريم ؟ منظورم همون كد فراخواني اين اسكروله
 

Hyper

Active Member
در فايل index.php بعد از خطوط زير

کد:
//
// Generate the page
//

اين دستور را وارد كنيد

کد:
include($phpbb_root_path . scroll..$phpEx);
 

f_mostafa_f

Active Member
نمیدونم سوالم بیربطه یا نه...آخه من در phpbb تازه کارم.....

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

ممنون میشم از پاسختون
 

reza_pa48

Active Member
سلام.ممنون که این همه کمک میکنید .من تمام کارهایی که شما گفتین کردم.آخرین پستها رو هم نشون می ده.ولی 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-مثلا اگه بخوام تو صفحه اول سایتم آخرین پستها رو نشون بده نه توی صفحه اول انجمنها.چی کار باید بکنم؟
ممنون که جواب می دین.
 

Hyper

Active Member
سوال اول :

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

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

آدرس سايت خودتون رو جايگزين كنيد
مثلا http://www.pptforum.com/

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

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



سوال دوم :

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

مگر شما از پورتال استفاده ميكنيد ... ؟
 

reza_pa48

Active Member
سلام.
ممنون که جواب دادید.مشکل اول حل شد و اما درباره مشکل دوم
مثال سایت یک صفحه ایندیکس داره که از اونجا می شه به فوم هم رفت.مثل مجید آنلاین.من می خوام که مثل مجید آنلاین آخرین پستها در صفحه ایندیکس هم نشون داده بشه.ممنون
 

Hyper

Active Member
دوست عزیز

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

دستور include را به فایل مورد نظرتون اضافه کنید ...
 

bache +

Well-Known Member
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
 

shahnameh

Member
سلام دستد درد نكنه بابت آموزش خوبت
اگه ميشه آموزش نشان دادن همين فايل scroll را روي صفحه اول بديد مثلا گر صفحه index.htm باشه

چاكر همتون شاهنامه
 

ramphp

New Member
يك سوعال داشتم اگه كسي مي دونه لطفاْ جواب بده يك ماه هست كه دنبال جوابش مي گردم
دنبال راحي مي گردم كه مثلاْ وقتي يك شرط برقرار بود بره يك صفحه
php
ديگه را باز بكند بدون فشاردادن هيچ لينكي

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

از تابع incude() ,incule_once() ,require() ,require_once()
استفاده كردم صفحه جديد را باز مي كند اما تصاوير را نشان نمي دهد
لطفاْ يك تابع يا يك راه بگيد كه به جواب برسم ؟ متشكرم
 

Hyper

Active Member
دوست عزیز ramphp

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

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

رضا
 

egold4ucom

New Member
من این خط را به 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
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا