[درس في برمجة الهاكات] (تعدد الصفحات) للـــــــvb3
تحدثنا سابقا عن عمل صفحه والتعامل مع التمبلت في درس
http://www.swalif.net/softs/showthre...threadid=49122
والان سوف نتحدث عن درس بسيط وهو تعدد الصفحات وتقسيم النتائج على عدة الصفحة
فل نفرض اننا قمنا بعمل ملف صغير يعرض اسم كل عضو وعدد مشاركاته
كود PHP:
<?php
require_once('./global.php');
$vb = $DB_site->query("
SELECT userid,username,posts
FROM " . TABLE_PREFIX . "user ORDER BY user.userid");
while($all_the_vb = $DB_site->fetch_array($vb)) {
eval('$vbulletin .= "' . fetch_template('userpostsbits') . '";');
}
eval('print_output("' . fetch_template('userposts') . '");');
?>
والتمبلت userposts فيه
كود PHP:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle] - all-the-vb</title>
$headinclude
</head>
<body>
$header
$navbar
<br />
<table class="tborder" cellpadding="$stylevar[cellspacing]" cellspacing="$stylevar[cellspacing]" border="0" width="50%" align="center">
<td class="tcat">الاعضاء,والمشاركات</td>
$vbulletin
</table>
$footer
</body>
</html>
والتمبلت userpostsbit فيه
كود PHP:
<tr><td class="alt1"><a href="member.php?$session[sessionurl]u=$all_the_vb[userid]"> $all_the_vb[username]</a> $all_the_vb[posts]</td></tr>
لو اردنا تقسيم هذه النتائج على عدة صفحات
نضيف
كود PHP:
globalize($_REQUEST, array('perpage' => INT, 'pagenumber' => INT));
وعمله تمرير المتغرين $pagenumber و $perpage
واخباره انهما عددين صحيحين
ومن هناك سوف يتم تمريرهما عبر الداله intval();
بما انهما عددين صحيحين وعملها اخذ الرقم من المتغير للمزيد عن هذه الدالة.
http://php.net/intval
والان نحدد
الحد الاقصى للصفحات
مثلا نسمى المتغير max
$max=4;
والحد الاقصى للاسماء بالصفحه
مثلا نسمى المتغير inpage
$inpage=2;
والان نضع هذا الكود
كود PHP:
if(isset($perpage)) {
if($perpage >$max) {
$perpage = $max;
}
} else {
$perpage = $inpage;
}
وعمله
اذا تحقق الشرط وهو ان المتغير $perpage غير فارق
ويتم التاكد من ذلك بالدالة isset();
ومن ثم شرط اخر
اذا كان الحد الاقصى للاسماء بالصفحه الواحد اكبر من الحد الاقصى للصفحات
يعطى المتغير $perpage
قيمة المتغير $max
ومن بعد اذ لم يتحقق الشرط الاول
يعطى المتغير $perpage
قيمة المتغير $inpage
وهو الحد الاقصى للاسماء بالصفحه
والان نضيف استعلام
كود PHP:
$pagequery = $DB_site->query_first("SELECT COUNT(*)AS alluser FROM " . TABLE_PREFIX . "user");
للتعرف على عدد الاسماء الكلى.
والان نضيف الكود التالى
كود PHP:
if ($pagenumber < 1)
{
$pagenumber = 1;
}
else if ($pagenumber > ceil(($pagequery['alluser']+ 1) / $perpage))
{
$pagenumber = ceil(($pagequery['alluser'] + 1) / $perpage);
}
وعمله اذا كان $pagenumber اصغر من واحد يعطيه القيمه 1
ومن بعد اذا لم يتحقق الشرط يعمل شرط اخر وهو
ان يكون المتغير $pagenumber
اكبر من العدد الكلى للاسماء زائد واحد تقسيم عدد الاسماء بكل صفحه
وتم تمرير (اكبر من العدد الكلى للاسماء زائد واحد) بالدالة ceil();
وعملها تقريب العدد الى العدد الصحيح الاكبر
للمزيد حول هذه الدالة
http://php.net/ceil
والان نضيف التالى
كود PHP:
$limitlower = ($pagenumber - 1) * $perpage;
اى رقم الصفحه ناقص واحد ضرب عدد الاسماء بكل صفحه
والان نحدد عدد الاسماء التى ستخرج لكل صفحه
من الاستعلام
الذى كتبناه سابقا
كود PHP:
$vb = $DB_site->query("
SELECT userid,username,posts
FROM " . TABLE_PREFIX . "user ORDER BY user.userid");
نضيف اليه
كود PHP:
LIMIT $limitlower, $perpage
ليصبح
كود PHP:
$vb = $DB_site->query("
SELECT userid,username,posts
FROM " . TABLE_PREFIX . "user ORDER BY user.userid LIMIT $limitlower, $perpage");
والان نضيف
التالى
كود PHP:
$pages = construct_page_nav($pagequery['alluser'], "m.php?","&pp=$perpage");
تمرير العدد الكلى للاسماء واسم الملف عدد الاسماء لكل صفحه
عبر دالة الvb
construct_page_nav
وهي الى تختص بعمل تعدد الصفحات بالفي بي 3
للمزيد حول هذه الداله
راجع ملف functions.php الموجود بمجلد includes
عند السطر 1686 تقريبا
واسندنا هذه العمل الى المتغير $pages
والان بقى ان نضيف المتغير $pages
الى تمبلت userposts
باى مكان تود ان تظهر لك تعدد الصفحات
والان بعد نهاية التعديلات
كود PHP:
<?php
require_once('./global.php');
globalize($_REQUEST, array('perpage' => INT, 'pagenumber' => INT));
$max=4;
$inpage=2;
if(empty($page)){
$page=1;
}
if(isset($perpage)) {
if($perpage >$max) {
$perpage = $max;
}
} else {
$perpage = $inpage;
}
$pagequery = $DB_site->query_first("SELECT COUNT(*)AS alluser FROM " . TABLE_PREFIX . "user");
// set page number
if ($pagenumber < 1)
{
$pagenumber = 1;
}
else if ($pagenumber > ceil(($pagequery['alluser']+ 1) / $perpage))
{
$pagenumber = ceil(($pagequery['alluser'] + 1) / $perpage);
}
$limitlower = ($pagenumber - 1) * $perpage;
$vb = $DB_site->query("
SELECT userid,username,posts
FROM " . TABLE_PREFIX . "user ORDER BY user.userid LIMIT $limitlower, $perpage");
while($all_the_vb = $DB_site->fetch_array($vb)) {
eval('$vbulletin .= "' . fetch_template('userpostsbits') . '";');
}
$pages = construct_page_nav($pagequery['alluser'], "m.php?","&pp=$perpage");
eval('print_output("' . fetch_template('userposts') . '");');
?>
والتمبلت userposts فيه
كود PHP:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle] - all-the-vb</title>
$headinclude
</head>
<body>
$header
$navbar
<br />
<table class="tborder" cellpadding="$stylevar[cellspacing]" cellspacing="$stylevar[cellspacing]" border="0" width="50%" align="center">
<td class="tcat">الاعضاء,والمشاركات</td>
$vbulletin
</table>
$pages
$footer
</body>
</html>
والتمبلت userpostsbit فيه
كود PHP:
<tr><td class="alt1"><a href="member.php?$session[sessionurl]u=$all_the_vb[userid]"> $all_the_vb[username]</a> $all_the_vb[posts]</td></tr>
الموضوع في فيبيولتين عرب:
http://vbulletin-arab.com/forums/sho...6772#post16772
والسلام عليكم
All-the-vb