Skip to content

Instantly share code, notes, and snippets.

@DKepov
Last active November 17, 2015 09:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DKepov/b1ba6785a4f4092efc0e to your computer and use it in GitHub Desktop.
Save DKepov/b1ba6785a4f4092efc0e to your computer and use it in GitHub Desktop.
creating an array for custom pagination
<?php
// пагинация для страницы
protected function pagination($setting)
{
  	//$setting = array('count_page'=>100, 'this_page'=>1, 'item_link'=>7);
	$page_this     = $setting['this_page'];    // текущая страница
	$page_count    = $setting['count_page'];   // максимальное кол-во страниц
	$item_count    = $setting['item_link'];    // кол-во элементов на страницу, нечетное
	$item_step     = ceil(($item_count-1)/2);  // (шаг) кол-во элементов справа и слева от текущего
	$page_result   = array();                  // массив для возврата результата
	// если страниц не одна
	if ($page_count != 1) {
		// текущая в первом шаге
		if ($page_this < $item_step+1) {
			// начиная с первого до количества элементов
			$page_near = range(1, $item_count);
		} 
		// текущая в последнем шаге
		elseif ($page_this > $page_count-$item_step) {
			// с последней минус количество элементов, до конца
			$page_near = range($page_count-$item_count+1, $page_count); 
		}
		// текущая в серединных элементах
		else {
			// элементы равномерно от текущей справа и слева на величину шага
			$page_near = range($page_this-$item_step, $page_this+$item_step);
		}
		// заменяем первый и последний элементы на первую и последнюю страницы
		$page_near[0] = 1;
		$page_near[$item_count-1] = $page_count;
	}
	// если страниц меньше чем элементов, то выводим все страницы
	elseif ($page_count <= $item_count) { 
		$page_near = range(1, $page_count);
	}
	// если страниц всего одна, то возвращаем пустоту
	elseif ($page_count == 1) {
		return $page_result = array();
	}
	// проходимся по всем элементам, чтобы сформировать результат и пометить элементы в выводе
	foreach($page_near as $page) {
		$page_result[] = array('page'=>$page, 'this_page'=> ($page_this == $page) ? 1 : 0);
	}
	
	return $page_result;
}
@DKepov
Copy link
Author

DKepov commented Aug 31, 2015

<?php
// пагинация для страницы
protected function pagination($setting)
{
    //$setting = array('count_page'=>100, 'this_page'=>1, 'item_link'=>7);
    $page_this     = $setting['this_page'];    // текущая страница
    $page_count    = $setting['count_page'];   // максимальное кол-во страниц
    $item_count    = $setting['item_link'];    // кол-во элементов на страницу, нечетное
    $item_step     = ceil(($item_count-1)/2);  // (шаг) кол-во элементов справа и слева от текущего
    $page_result   = array();                  // массив для возврата результата
    // если страниц не одна
    if ($page_count != 1) {
        // текущая в первом шаге
        if ($page_this < $item_step+1) {
            // начиная с первого до количества элементов
            $page_near = range(1, $item_count);
        } 
        // текущая в последнем шаге
        elseif ($page_this > $page_count-$item_step) {
            // с последней минус количество элементов, до конца
            $page_near = range($page_count-$item_count+1, $page_count); 
        }
        // текущая в серединных элементах
        else {
            // элементы равномерно от текущей справа и слева на величину шага
            $page_near = range($page_this-$item_step, $page_this+$item_step);
        }
        // заменяем первый и последний элементы на первую и последнюю страницы
        $page_near[0] = 1;
        $page_near[$item_count-1] = $page_count;
    }
    // если страниц меньше чем элементов, то выводим все страницы
    elseif ($page_count <= $item_count) { 
        $page_near = range(1, $page_count);
    }
    // если страниц всего одна, то возвращаем пустоту
    elseif ($page_count == 1) {
        return $page_result = array();
    }
    // проходимся по всем элементам, чтобы сформировать результат и пометить элементы в выводе
    foreach($page_near as $page) {
        $page_result[] = array('page'=>$page, 'this_page'=> ($page_this == $page) ? 1 : 0);
    }

    return $page_result;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment