تابعی که برای این منظور استفاده میشه تابع clean_pagination با آرگومانهای زیر هست:
total_rows : کل رکوردهایی که قراره تو صفحات مختفلف نمایش داده بشن. این عدد باید در همه صفحات ثابت باشه. میتونین این عدد هنگامی که دارین کوئری اصلی رو میگیرین تو یه ساب کوئری فراخونی کنین با حذف شرط تعداد محدود. به این مثال دقت کنید:
کد: انتخاب همه
$result = $db->query("SELECT sid, title, (SELECT COUNT(sid) FROM nuke_posts WHERE post_type = 'Articles') AS total_rows FROM nuke_posts WHERE post_type = 'Articles' ORDER BY sid DESC LIMIT 0,20");
کد: انتخاب همه
SELECT COUNT(sid) FROM nuke_posts WHERE post_type = 'Articles'
یا میتونین این متغیر رو در یک کوئری جدا مقدار دهی کنید. این بسته به نوع کوئری اصلی شما داره.
entries_per_page : تعداد قابل نمایش در هر صفحه. میتونین از مقداری که در اطلاعات متغیر nuke_configs نیوک تحت عنوان home_pagination استفاده کنین یا در تنظیمات ماژولتون مقدار جدیدی برای در نظر بگیرین. یا یه مقدار ثابت مثل 20 رو براش اختصاص بدین.
current_page : شماره صفحه ای که در حال حاضر داخلش هستیم.
در صفحه بندی متغیری به نام page در هر صفحه ارسال میشه که شماره اون صفحه رو داره. برای صفحه اول با یه شرط ساده در صورتی که این متغیر فراخونی نشده باشه مقدار دهیش میکنیم.
در صورتی که متغیر page رو global کرده باشیم:
کد: انتخاب همه
$current_page = (empty($page)) ? 1 : $page;
کد: انتخاب همه
$current_page = (empty($_GET['page'])) ? 1 : $_GET['page'];
کد: انتخاب همه
http://www.phpnuke.ir/index.php?modname=test
اگه link_to حاوی متغیرهای دیگه ای باشه میشه بهش اضافه کرد مثلا:
کد: انتخاب همه
http://www.phpnuke.ir/index.php?modname=test&post_status=draft
کد: انتخاب همه
http://www.phpnuke.ir/index.php?modname=test&page=2
کد: انتخاب همه
http://www.phpnuke.ir/index.php?modname=test&post_status=draft&page=2
حالا نوبت اینه که این لینکها رو در فایل GT-test.php معادل سازی کنیم. به عنوان مثال میشه
کد: انتخاب همه
$rewrite_rule["test"] = array(
"test/page/([0-9]*)/$" => 'index.php?modname=test&page=$1',
"test/(draft|publish|pending)/page/([0-9]*)/$" => 'index.php?modname=test&post_type=$1page=$2',
"surveys/$" => 'index.php?modname=Surveys',
);
$friendly_links = array(
"index.php\?modname=test&post_type=(draft|publish|pending)&page=([0-9]*)$" => "test/$1/page/$2/",
"index.php\?modname=test&page=([0-9]*)$" => "test/page/$1/",
);
در نهایت خروجی این تابع رو میتونیم به محتوای اصلی اضافه کنیم.
کد: انتخاب همه
$pagination_contents = '';
if($entries_per_page < $total_rows)
{
$pagination_contents .= "<div id=\"pagination\">";
$pagination_contents .= clean_pagination($total_rows, $entries_per_page, $current_page, $link_to);
$pagination_contents .= "</div>";
}
$contents .= $pagination_contents;
در مورد صفحه بندی در مدیریت سایت هم کلیت کار به همین شکل هست ولی اسم تابعش admin_pagination هست.
نکته این تابع استفاده از دو صفحه بندی در یک صفحه هست. آرگومان پنجم این تابع رو اختصاص میدیم به صفحه بندی بعدی
مثلا:
کد: انتخاب همه
admin_pagination($total_rows, $entries_per_page, $current_page, $link_to, $pageid);
کد: انتخاب همه
admin_pagination($total_rows, $entries_per_page, $current_page, $link_to);
کد: انتخاب همه
admin_pagination($total_rows, $entries_per_page, $current_page, $link_to, 1);
کد: انتخاب همه
admin_pagination($total_rows, $entries_per_page, $current_page, $link_to, 2);
کد: انتخاب همه
admin.php?op=test_admin&page=3
کد: انتخاب همه
admin.php?op=test_admin&page1=3
کد: انتخاب همه
admin.php?op=test_admin&page2=5
موفق باشید.