Hyper
Active Member
با سلام
در اين مقاله سعي خواهم كرد تا بطور مفصل امكانات موجود در فايل scroll.php رو مورد بررسي قرار بدم
همونطور كه ميدونيد بيشتر انجمنها براي نمايش عناوين جديد ارسال شده از اين فايل استفاده ميكنند
در اين بحث به چگونگي سفارشي كردن اين فايل و ايجاد تغييرات لازم در آن مي پردازيم ...
فرمت اوليه اين فايل به شكل زير است :
خروجي اين فايل عنوان آخرين مطالب ارسال شده به همراه نويسنده مطلب است ...
و اما گزينه هايي كه مي بايست مورد توجه ما قرار گيرند ، عبارتند از :
تعداد عناوين جديد قابل نمايش در اسكرول
اين مقدار ميتواند بر اساس نياز تغيير يابد
جهت حركت اسكرول
اين مقدار ( up ) ميتواند down ، left و right باشد كه طبق تجربه مقادير left و right چندان خوشايند نيستند
آدرس سايت مورد نظر
مثلا بنده اين رو بروي http://www.pptforum.com تنظيم كرده ام
ساير موارد ، مقاديري هستند كه در مراحل پيشرفته تري نياز به تغيير دارند كه البته بحث ما دقيقا به هم دليل است
من تصميم دارم علاوه بر نام تاپيك جديد و نويسنده آن ، اين امكانات رو به اين فايل اضافه كنم :
1. نمايش انجمن مربوطه
2. نمايش تعداد بازديد ها
3. نمايش تعداد پاسخها
اگر به ابتداي فايل نگاهي بندازيد ( قسمت Connecting & Selecting Databases ) متوجه خواهيد شد كه متغيرهاي لازم در اين قسمت از ديتابيس phpBB خوانده شده و در اختيارمون قرار ميگيره . مقاديري مثل topics و forums و ...
ما با استفاده از همين مقادير و بدون نياز به افزودن متغييرهاي ديگري ميتونيم اطلاعات لازم رو جمع آوري كنيم
( ناگفته نماند كه درصورت نياز به استفاده از مقاديري غير از متغيرهاي موجود ، ميبايست تغييراتي در فراخواني اطلاعات از ديتابيس انجام داد كه البته از بحث ما خارج است ... )
همونطور كه گفتم خروجي اين فايل شامل نام تاپيك جديد و نويسنده اون هست كه در اين قسمت توليد ميشه :
ما با دستورات قسمت هاي print كاري نداريم و منظور نظر اصلي ما قسمت echo است
يعني اين :
خوب كافيست اين دستورات رو در جاي لازم درج كنيم :
يعني در نهايت كل قسمت echo به اين شكل خواهد بود :
تا اينجا خروجي فايل رو به شكل دلخواه در آورده و گزينه هاي مورد نظر رو در اون قرار داده ايم
هنوز كارمون تموم نشده !
2 قسمت ديگه مونده ، فرض كنيم تمايل داشته باشيم كه تاپيك هاي جديد از انجمن خاصي در ليست اسكرول نمايش داده نشه و يا فقط تاپيك هاي انجمن خاصي نمايش داده بشه . پس دو تا پروژه داريم :
1. جلوگيري از نمايش تاپيك هاي انجمني خاص
2. فقط نمايش تاپيك هاي انجمني خاص
براي اين كار در وهله اول نياز به شماره انجمن مورد نظ داريم
همونطور كه حتما ميدونيد ، phpBB به هر انجمن شماره منحصر به فردي اختصاص ميده . استخراج اين شماره هم راههاي متفاوتي داره كه ساده ترينش استفاده از همين scroll.php است !
كافيست دستور زير رو در پايان قسمت echo و پيش از كد
اضافه كنيد :
دستور :
حالا اگر به خروجي اسكرول نگاهي بندازيد خواهيد ديد كه شماره انجمن هم در ليست تاپيك هاي جديد نمايش داده ميشه ...
( فراموش نكنيد كه پس از استخراج شماره مورد نظر اين قسمت رو حذف كنيد ، مگر اينكه خودتون تمايل داشته باشيد نمايش داده بشه ... )
به اين ترتيب حالا ما شماره هاي دلخواه را داريم
پس ميتونيم شروع كنيم
بر اساس قواعد اوليه برنامه نويسي ، براي جلوگيري از انجام موردي خاص ميبايست ( و همينطور انجام مواردي خاص ) ميبايست از دستورهاي شرطي استفاده كنيم
ساختار شرطي IF رو هم حتما ميشناسيد
براي رسيدن به هدفمون كافيه كه از اين دستور شرطي استفاده كنيم
و در واقع خروجي نهايي رو ( اگه خاطرتون باشه دستور echo بود ) در اين ساختار اجرا كنيم
فرض كنيد شماره انجمن مورد نظر من 92 است
براي جلوگيري از نمايش تاپيك هاي اين انجمن كافيست از اين شكل دستور استفاده كنيد :
در صورتي كه تمايل داريد به تعداد اين انجمنها بيفزايد ميتونيد پس از استخراج شماره هاي مورد نظر به ترتيب زير عمل كنيد :
همونطور كه مي بينيد من در اينجا از نمايش تاپيك هاي انجمنهاي شماره 92 و 2 و 16 جلوگيري كرده ام
براي نمايش تاپيك هاي انجمني خاص هم باز به همين شكل عمل ميكنيد
با استفاده از اين دستور شرطي :
و يا براي تعدادي انجمن :
اميدوارم اين بحث مفيد واقع شده باشه
در مباحث آينده به نحوه استخراج مقدار خاصي از ديتابيس و همچنين نمايش تاپيكي خاص به صورت ثابت ( دائم ) در scroll.php مي پردازيم ...
با تشكر
در اين مقاله سعي خواهم كرد تا بطور مفصل امكانات موجود در فايل 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 مي پردازيم ...
با تشكر