نمایش نتایج 1 تا 9 از 9

نام تاپیک: کلاس صفحه بندی سایت

  1. #1

    کلاس صفحه بندی سایت pagination

    سلام.
    کلاسی برای صفحه بندی آماده کردم.ممنون میشم نظرتونو بگید.
    کلاسو میذارم و فایلو هم ضمیمه میکنم(همراه با یه استایل) با یه نمونه مثال که البته بستگی داره شما چطور از کلاس و آیتم هاش بخواین استفاده کنید.ابتکار عمل دست خودتونه.


    /**
    * @author Mohsen Movahed <l3iidak@yahoo.com>
    * @copyright 2014 Mohsen Movahed
    * @date 19 May 2014 - 1393/2/28
    * @version 1.0
    * @license GPL
    * @link http:// www .bidakplus.ir
    */
    class Pagination
    {
    private $items;
    private $output;


    /**
    * construct method
    */
    public function __construct($params = null)
    {
    $this->items = array(
    'items_per_page' => 5, // Records per page to display
    'total_records' => 0, // Total records in database
    'total_pages' => 0, // Total number of pages
    'url_address' => '', // For example: http: //www .mysite.com/?page=
    'concat_to_url' => '', // This comes after page value - [optional]
    'current_page' => 1, // Number of current page
    'page_num_per_section' => 5, // Total number of pages to display - for example CurrentPage=16 :=> [first][next]...,14,15,[16],17,18,...[prev][last]
    'mode' => false, // Mode = true or anything => Display:: 1,...,14,15,[16],17,18,...,20
    );


    // set values
    if (isset($params) && count($params) > 0)
    {
    if (is_array($params))
    {
    foreach ($params as $key => $value)
    {
    if (!empty($value))
    {
    $this->$key = $value;
    }
    }
    }
    }


    // run paginate method
    $this->paginate();
    }


    /**
    * get values
    * @param string $key Must be index of items array
    * @return mixed|boolean if there is $key, returns array value otherwise returns false.
    */
    public function __get($key)
    {
    if (isset($this->items[$key]))
    {
    return $this->items[$key];
    }
    return false;
    }


    /**
    * set values
    * @param string $key Index of items array
    * @param mixed $value a value for set
    */
    public function __set($key, $value)
    {
    if (isset($this->items[$key]))
    {
    $this->items[$key] = $value;
    }
    }


    /**
    * get total pages
    * @return integer Return the total pages
    */
    private function getTotalPages()
    {
    $this->items_per_page = ($this->items_per_page <= 0 ? 1 : $this->items_per_page);


    $total = ceil($this->total_records / $this->items_per_page);
    if ($total <= 0)
    {
    $total = abs($total) + 1;
    }
    return $total;
    }


    /**
    * this manages to display pagination
    */
    private function paginate()
    {
    $this->total_pages = $this->getTotalPages(); // set total pages
    $check = $this->checkItems(); // check item values and page number


    if ($check)
    {
    // start of section
    $start = $this->current_page - floor($this->page_num_per_section / 2);
    // maximum start
    $max = $this->total_pages - floor($this->page_num_per_section / 2);
    if($start <= 0 || $start > $max)
    {
    if ($start > $max)
    $this->current_page = 1;
    $start = 1;
    }


    // end of section
    $end = $start + $this->page_num_per_section - 1;
    if($end > $this->total_pages)
    {
    $end = $this->total_pages;
    }




    $this->output .= '<ul class="paging">' . PHP_EOL;


    // print first page button
    if ($this->mode == false && $this->current_page != 1)
    {
    $this->output .= '<li><a href="'. $this->url_address . 1 . $this->concat_to_url .'">نخست</a></li>' . PHP_EOL;
    }


    // print next page button
    if ($this->current_page < $this->total_pages && $this->mode == false)
    {
    $this->output .= '<li><a href="'. $this->url_address . $this->nextPage() . $this->concat_to_url .'">بعدی</a></li>' . PHP_EOL;
    }


    // print page number
    for ($i = $start; $i <= $end ; $i++)
    {
    // print dots in right
    if ($i == $start && $start > 1 && $i != 1)
    {
    // print page one
    if ($this->mode)
    {
    $this->output .= '<li><a href="'. $this->url_address . 1 . $this->concat_to_url .'">1</a></li>' . PHP_EOL;
    }
    $this->output .= '<li class="dot-paginator">...</li>' . PHP_EOL;
    }


    // print pages number
    $this->output .= '<li><a class="'. ($i == $this->current_page ? 'current-page' : '') .'" href="'. $this->url_address . $i .'">'. $i .'</a></li>' . PHP_EOL;

    // print dots in left
    if ($i <= $this->total_pages && $i == $end && $i != $this->total_pages)
    {
    $this->output .= '<li class="dot-paginator">...</li>' . PHP_EOL;
    }
    }


    // print prev page button
    if ($this->current_page > 1 && $this->mode == false)
    {
    $this->output .= '<li><a href="'. $this->url_address . $this->prevPage() . $this->concat_to_url .'">قبلی</a></li>' . PHP_EOL;
    }


    // print last page number
    if ($this->mode && $this->total_pages != $this->current_page && $this->total_pages != $end)
    {
    $this->output .= '<li><a href="'. $this->url_address . $this->total_pages . $this->concat_to_url .'">'. $this->total_pages .'</a></li>' . PHP_EOL;
    }


    // print last page button
    if ($this->mode == false && $this->current_page != $this->total_pages)
    {
    $this->output .= '<li><a href="'. $this->url_address . $this->total_pages . $this->concat_to_url .'">آخرین</a></li>' . PHP_EOL;
    }

    $this->output .= '</ul><br>' . PHP_EOL;
    }
    }


    /**
    * check item values
    * @return boolean The result true if item values is not empty, false otherwise
    */
    private function checkItems()
    {
    foreach ($this->items as $key => $value)
    {
    if (empty($value))
    {
    settype($key, 'string');
    switch ($key)
    {
    case 'current_page':
    $this->$key = 1; // not required beacause by default equal to 1
    break;
    case 'concat_to_url':
    break;
    case 'mode':
    break;
    default:
    return false;
    break;
    }
    }
    }


    if ($this->total_pages == 1)
    {
    return false;
    }


    $this->checkPageNumber();
    return true;
    }


    /**
    * check page number
    */
    private function checkPageNumber()
    {
    $this->current_page = intval($this->current_page);
    if ($this->current_page > $this->total_pages)
    {
    $this->current_page = $this->total_pages;
    }
    elseif ($this->current_page <= 0)
    {
    $abs = abs($this->current_page);
    $this->current_page = ($this->current_page < 0 ? $abs : $abs + 1);
    }
    }


    /**
    * previous page
    * @return integer
    */
    private function prevPage()
    {
    return $this->current_page - 1;
    }


    /**
    * next page
    * @return integer
    */
    private function nextPage()
    {
    return $this->current_page + 1;
    }


    /**
    * show part of the records => for example: 1 - 10 of 200
    */
    public function recordsInfo()
    {
    $var = $this->current_page * $this->items_per_page;
    $sectionEnd = $var;
    $sectionStart = $sectionEnd - $this->items_per_page + 1;
    $sectionEnd = ($var > $this->total_records ? $this->total_records : $var);


    echo 'Showing ' . $sectionStart . ' to ' . $sectionEnd . ' of ' . $this->total_records . ' entries';
    }


    /**
    * show current page of all pages
    */
    public function pagesInfo()
    {
    echo 'Page ' . $this->current_page . ' of ' . $this->total_pages;
    }


    /**
    * get query limit
    * @return array Return start and end section for query limit
    */
    public function limit()
    {
    $start = $this->items_per_page * ($this->current_page - 1);
    $limit = $this->items_per_page;
    return array('start' => $start, 'limit' => $limit);
    }


    /**
    * show paging
    */
    public function display()
    {
    echo $this->output;
    }
    }

    =================================

    یه نمونه مثال:

    $paging = new Pagination(
    array(
    'items_per_page' => 5,
    'total_records' => $result['total'],
    'url_address' => 'http://localhost/pagination/?page=',
    'current_page' => (isset($_GET['page']) ? $_GET['page'] : 1),
    //'mode' => true,
    )
    );


    $section = $paging->limit();


    $start = $section['start'];
    $limit = $section['limit'];
    $result = mysql_query("select * from posts LIMIT $start, $limit");
    while($row = mysql_fetch_assoc($result))
    {
    echo '<strong>' . $row['title'] . '</strong><hr>';
    }

    ترتیب ایندکس ها اهمیتی نداره.
    متد limit ابتدا و انتهای یک سلکتو برمیگردونه.
    ایندکس mode اگر مقدار دهی نشه بطور پیشفرض false هست که یک نوع نمایش داره و اگر بغیر از false مقدار دهی بشه نمایشش فرق میکنه و دکمه هایی مثل قبلی و بعدی و ... حذف میشن.
    در ادامه صفحه بندی رو هر کجا خواستید نمایش بدید از متد display استفاده کنید:


    $paging->display();

    در ادامه میتونید اطلاعاتی از صفحه هم نمایش بدید. مثلا در چه صفحه ای هستید و اطلاعاتی در مورد نمایش پستها:


    $paging->recordsInfo();
    echo '<hr>';
    $paging->pagesInfo();


    کلاس اعتبار سنجی های لازم برای شماره صفحه و نمایش انجام میده و فقط کافیه زمان ساخت شی ء ورودی های مورد نیازو وارد کنید => (total_records, url_address, current_page)
    نمایش دمو

    یا علی مدد
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله ***BiDaK*** : یک شنبه 17 اسفند 1393 در 11:44 صبح دلیل: تغییر لینک دمو

  2. #2

    نقل قول: کلاس صفحه بندی سایت

    به کلاس سه تا متد limit و pagesInfo و recordsInfo اضافه کردم.
    فایل ضمیمه آپدیت شد.
    دوستان تست کنید نظر بدید پلیز.

  3. #3
    کاربر دائمی آواتار masiha68
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    نقطه ی صفر مرزی
    پست
    816

    نقل قول: کلاس صفحه بندی سایت

    جالبه ... کلاس خوبیه ... ازش ایده گرفتم واسه ساخت کلاس پیجینگ خودم
    البته فک کنم یکم زیادی گسترده ست ... همین رو با یه کلاس دیتاگرید ویو مخلوط کن ... چیزی جالبی می شه و البته اگه اجاکس رو هم بهش اضافه کنی که دیگه رو دست نداره
    موفق باشی

  4. #4
    کاربر دائمی آواتار plague
    تاریخ عضویت
    آبان 1388
    محل زندگی
    اهواز
    پست
    2,360

    نقل قول: کلاس صفحه بندی سایت

    پیشنهاد میکنم یه آیتم هم برای اضافه کردن پارمتر های اضافی GET در لینک بزاری
    مثلا فرض کن تو یک صفحه مثلا امکان سرچ کاربر ها رو داریم میخایم کاربر هایی که نامشون ALI هست رو سرچ کنیم (معمولا 99 درصد مواقع با GET انجام میشه )
    ملا 3 صفحه نتیجه به دست میاد که صفحه اول میشه


    http://localhost/pagination/?name=ALI


    صفحه دوم میشه
    http://localhost/pagination/?page=2


    یعنی رو صفحه دوم که کلیک بکنی کلا نتایج سرچ میپره ! و صفحه 2 از ل مطالب رو نشون میده

  5. #5

    نقل قول: کلاس صفحه بندی سایت

    نقل قول نوشته شده توسط plague مشاهده تاپیک
    پیشنهاد میکنم یه آیتم هم برای اضافه کردن پارمتر های اضافی GET در لینک بزاری
    مثلا فرض کن تو یک صفحه مثلا امکان سرچ کاربر ها رو داریم میخایم کاربر هایی که نامشون ALI هست رو سرچ کنیم (معمولا 99 درصد مواقع با GET انجام میشه )
    ملا 3 صفحه نتیجه به دست میاد که صفحه اول میشه


    http://localhost/pagination/?name=ALI


    صفحه دوم میشه
    http://localhost/pagination/?page=2


    یعنی رو صفحه دوم که کلیک بکنی کلا نتایج سرچ میپره ! و صفحه 2 از ل مطالب رو نشون میده
    کافیه آدستونو فرمت دلخواهو بدید و پارامترهارو با & یا هر فرمت دیگه مثل تکنیکهای htacsess جدا کنید.
    این url صرفا جهت تشخیص ادرس های صفحاته.
    مثلا:

    /?key=$key&page=

  6. #6
    کاربر دائمی آواتار plague
    تاریخ عضویت
    آبان 1388
    محل زندگی
    اهواز
    پست
    2,360

    نقل قول: کلاس صفحه بندی سایت

    درست میگید من حواسم نبود url_address رو به عنوان پارامتر ورودی میگیره کلاس

  7. #7
    کاربر دائمی
    تاریخ عضویت
    بهمن 1392
    محل زندگی
    Earth
    پست
    144

    نقل قول: کلاس صفحه بندی سایت

    سلام
    اول ممنون بابت این کلاس دوم این که یه چیزی که خیلی عجیب بود برام اینه که تو هیچ یک از فایل های pagination.php و index.php عکس paging-1.jpg فراخانی نشده بود!
    یعنی از کجا ما به کد میگیم این عکس رو برای شماره صفحه ها استفاده کنه؟ من الان میخام اسم عکس یا مکان عکس رو تغیر بدم نمیدونم باید کجای کد رو تغیر داد؟

  8. #8

    نقل قول: کلاس صفحه بندی سایت

    به نظرم اگه صفحه بندیتو ایجکس کنی خیلی بهتره
    از ajax بیشتر استقبال میشه

  9. #9

    نقل قول: کلاس صفحه بندی سایت

    نقل قول نوشته شده توسط DelDard مشاهده تاپیک
    سلام
    اول ممنون بابت این کلاس دوم این که یه چیزی که خیلی عجیب بود برام اینه که تو هیچ یک از فایل های pagination.php و index.php عکس paging-1.jpg فراخانی نشده بود!
    یعنی از کجا ما به کد میگیم این عکس رو برای شماره صفحه ها استفاده کنه؟ من الان میخام اسم عکس یا مکان عکس رو تغیر بدم نمیدونم باید کجای کد رو تغیر داد؟
    عکس فقط یک دمو از نمایش صفحه بندیه.ارتباطی با کد نداره.
    نقل قول نوشته شده توسط ali.webdesign مشاهده تاپیک
    به نظرم اگه صفحه بندیتو ایجکس کنی خیلی بهتره
    از ajax بیشتر استقبال میشه
    فعلا حسو حال نیست

تاپیک های مشابه

  1. سوال: نیازمند یک کلاس صفحه بندی ساده با توضیحات
    نوشته شده توسط pirmard66 در بخش PHP
    پاسخ: 6
    آخرین پست: جمعه 11 اسفند 1391, 01:42 صبح
  2. حرفه ای: کار با کلاس صفحه بندی
    نوشته شده توسط mohsen6500 در بخش PHP
    پاسخ: 6
    آخرین پست: پنج شنبه 03 اسفند 1391, 15:05 عصر
  3. صفحه بندی سایت با sp های مختلف
    نوشته شده توسط farzad3333 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: سه شنبه 01 اسفند 1391, 21:08 عصر
  4. سوال: ای جکسی کردن صفحه بندی سایت pagination
    نوشته شده توسط maysam.m در بخش PHP
    پاسخ: 2
    آخرین پست: پنج شنبه 15 اردیبهشت 1390, 21:57 عصر
  5. سوال: مشکل در کد صفحه بندی سایت
    نوشته شده توسط shahinshyd در بخش PHP
    پاسخ: 4
    آخرین پست: دوشنبه 22 فروردین 1390, 11:22 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •