چطور در ماژول نیوک صفحه بندی ایجاد کنیم

نمایه کاربر
iman64
مدیر کل سایت
مدیر کل سایت
پست: 3461
تاریخ عضویت: شنبه 18 اسفند 1386, 8:30 pm
محل اقامت: ایران سرافراز - بوشهر - دلوار
تشکر کرده: 389 دفعه
تشکر شده: 4741 دفعه

چطور در ماژول نیوک صفحه بندی ایجاد کنیم

پست توسط iman64 »

در ماژولهایی که آیتمهای جهت نمایش دارن و نیاز هست که این آیتم ها به صورت صفحه بندی شده در بیان به این شکل عمل میکتیم.
تابعی که برای این منظور استفاده میشه تابع 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'];
link_to : لینک پیشفرض برای همه صفحات. این لینک باید با لینک اصلی ماژول شروع بشه. به عنوان مثال

کد: انتخاب همه

http://www.phpnuke.ir/index.php?modname=test
این تابع دو آرگومان دیگه هم داره که اختیاریه و در موردشون بعداً صحبت میکنم
اگه link_to حاوی متغیرهای دیگه ای باشه میشه بهش اضافه کرد مثلا:

کد: انتخاب همه

http://www.phpnuke.ir/index.php?modname=test&post_status=draft
نکته اینکه هر مقداری در نهایت برای link_to به تابع داده بشه نتیجه چیزی مثل این میشه

کد: انتخاب همه

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
به اعداد اضافه شده به کلمه page در نتیجه دقت کنید.
موفق باشید.


Phpnuke.ir

بازگشت به “آموزش های نیوک”