Скрин:
Дамп для пробы(в настройках БД - paginator)
Свернутый текст
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Apr 26, 2011 at 12:06 PM
-- Server version: 5.1.40
-- PHP Version: 5.2.12
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `move_string`
--
-- --------------------------------------------------------
--
-- Table structure for table `test`
--
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=101 ;
--
-- Dumping data for table `test`
--
INSERT INTO `test` (`id`, `text`) VALUES
(1, 'text:1'),
(2, 'text:2'),
(3, 'text:3'),
(4, 'text:4'),
(5, 'text:5'),
(6, 'text:6'),
(7, 'text:7'),
(8, 'text:8'),
(9, 'text:9'),
(10, 'text:10'),
(11, 'text:11'),
(12, 'text:12'),
(13, 'text:13'),
(14, 'text:14'),
(15, 'text:15'),
(16, 'text:16'),
(17, 'text:17'),
(18, 'text:18'),
(19, 'text:19'),
(20, 'text:20'),
(21, 'text:21'),
(22, 'text:22'),
(23, 'text:23'),
(24, 'text:24'),
(25, 'text:25'),
(26, 'text:26'),
(27, 'text:27'),
(28, 'text:28'),
(29, 'text:29'),
(30, 'text:30'),
(31, 'text:31'),
(32, 'text:32'),
(33, 'text:33'),
(34, 'text:34'),
(35, 'text:35'),
(36, 'text:36'),
(37, 'text:37'),
(38, 'text:38'),
(39, 'text:39'),
(40, 'text:40'),
(41, 'text:41'),
(42, 'text:42'),
(43, 'text:43'),
(44, 'text:44'),
(45, 'text:45'),
(46, 'text:46'),
(47, 'text:47'),
(48, 'text:48'),
(49, 'text:49'),
(50, 'text:50'),
(51, 'text:51'),
(52, 'text:52'),
(53, 'text:53'),
(54, 'text:54'),
(55, 'text:55'),
(56, 'text:56'),
(57, 'text:57'),
(58, 'text:58'),
(59, 'text:59'),
(60, 'text:60'),
(61, 'text:61'),
(62, 'text:62'),
(63, 'text:63'),
(64, 'text:64'),
(65, 'text:65'),
(66, 'text:66'),
(67, 'text:67'),
(68, 'text:68'),
(69, 'text:69'),
(70, 'text:70'),
(71, 'text:71'),
(72, 'text:72'),
(73, 'text:73'),
(74, 'text:74'),
(75, 'text:75'),
(76, 'text:76'),
(77, 'text:77'),
(78, 'text:78'),
(79, 'text:79'),
(80, 'text:80'),
(81, 'text:81'),
(82, 'text:82'),
(83, 'text:83'),
(84, 'text:84'),
(85, 'text:85'),
(86, 'text:86'),
(87, 'text:87'),
(88, 'text:88'),
(89, 'text:89'),
(90, 'text:90'),
(91, 'text:91'),
(92, 'text:92'),
(93, 'text:93'),
(94, 'text:94'),
(95, 'text:95'),
(96, 'text:96'),
(97, 'text:97'),
(98, 'text:98'),
(99, 'text:99'),
(100, 'text:100');
Сама функция (листинг) и пример использования (стиль переделать под себя)
можно вызывать как "до" так и "после" вывода, или одновременно ;)
Свернутый текст
<?php
#Определил константы для подключения к серверу
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DB", "paginator");
#Соединение с сервером, выбор БД
@$link = mysql_connect(HOST, USER, PASSWORD) or die (mysql_error());
@$selectDB = mysql_select_db(DB) or die (mysql_error());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
<!--
strong.page{
padding-left: 5px;
padding-right: 5px;
border:1px solid #EAEEF8;
background-color: #3366FF;
font-family: arial;
color:white;
font-size: 13px
}
a.page:link,
a.page:hover,
a.page:visited{
font-family: arial;
text-decoration: none;
font-size: 13px;
padding-left: 4px;
padding-right: 4px;
border:1px solid #EAEEF8;
color: #3366FF;
}
-->
</style>
</head>
<body>
<?php
############################
# Постраничная навигация #
############################
/*
аргументы:
$countStrings - integer (кол-во строк на одной странице)
$showLinks - integer (кол-во линков навигации)
$nameTable - string (имя таблицы в БД, которая постранично выводится)
*/
function getNavigation($countStrings, $showLinks, $nameTable)
{
#Подсчёт строк в таблице
$queryForCount = mysql_query("SELECT * FROM `".$nameTable."`");
$count_rows = mysql_num_rows($queryForCount);
#Подсчёт кол-ва страниц
$allPages = ceil($count_rows/$countStrings);
#Проверяем на какой странице мы находимся и задаём предел для вывода из БД
global $start;
if(!$_GET['page'] OR $_GET['page'] == 1)
{
$page = 1;
$start = 0;
}
else
{
$page = (int)$_GET['page'];
$start = ($page * $countStrings) - $countStrings;
}
$end = $start + $countStrings;
#Если мы ушли далеко от первой страницы - то выведем для удобства "Gthdfz"
if($page > ceil($showLinks/2))
{
echo $firstPage = "<a class='page' href='?page=1'>Первая</a> ";
}
#Проверяем - необходима ли ссылка "Предыдущая"
if($page != 1 AND $page > 1)
{
$prev = $page - 1;
echo $prevPage = "<a class='page' href='?page=".$prev."'>Предыдущая</a> ";
}
#Этот кусок выводит навигацию если общее кол-во страниц и кол-во показываемых ссылок совпадает
if($showLinks >= $allPages)
{
for($i = 1; $i <= $allPages; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Этот кусок будет строить навигацию когда кол-во страниц превышает кол-во выводимых ссылок
elseif($allPages > $showLinks)
{
#Строит навигацию для первыx SHOWLINKS ссылок
if($page <= ceil($showLinks/2))
{
for($i = 1; $i < $showLinks + 1; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Строит навигацию когда страница между предыдущем условием и следующим (СЕРЕДИНА)
if($page - ceil($showLinks/2) > 0 AND $page <= $allPages - $showLinks)
{
for($i = $page - ceil($showLinks/2 - 1); $i <= $page + ($showLinks/2); $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Строит навигацию для последних SHOWLINKS ссылок
if($page > $allPages - $showLinks AND $page > ceil($showLinks/2))
{
for($i = ($allPages - $showLinks) + 1; $i <= $allPages; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
}
#Проверяем - необходима ли ссылка "Следующий"
if($page != $allPages AND $page < $allPages)
{
$next = $page + 1;
echo $nextPage = " <a class='page' href='?page=".$next."'>Следущая</a>";
}
#Если мы ещё далеко от последней страницы, то выведем "Последняя"
if($page <= $allPages - $showLinks)
{
echo $lastPage = " <a class='page' href='?page=".$allPages."'>Последняя</a>";
}
}
########################################
# ВЫЗОВ ФУНКЦИИ (ПОСТРОЕНИЕ НАВИГАЦИИ) #
########################################
#getNavigation($countStrings, $showLinks, $nameTable)
#$countStrings - integer (кол-во строк на одной странице)
#$showLinks - integer (кол-во линков навигации)
#$nameTable - string (имя таблицы в БД, которая постранично выводится)
#При вызове - LIMIT ".$start.", 3"), где 3 - $countStrings
#Пример $query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".(int)$start.", 3");
getNavigation(3, 11, "test");
#################
# ВЫВОД ТАБЛИЦЫ #
#################
$query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".$start.", 3") or die(mysql_error());
$count_rows = mysql_num_rows($query);
if($count_rows > 0)
{
while($string = mysql_fetch_array($query))
{
$table .= "<tr><td>".$string['id']."</td>"
. "<td width='10px'></td>"
. "<td>".$string['text']."</td>"
. "<td width='10px'></td>"
. "<td>".$string['order']."</td></tr>";
}
#Построение таблицы
echo "<table>".$table."</table>";
}
mysql_close($link);
?>
</body>
</html>
Вот исходники:
paginatorDamp.sql
paginator.php
Спустя 25 минут, 58 секунд (26.04.2011 - 10:12) ИНСИ написал(а):
Игорь_Vasinsky не плохо, но было бы хорошо если бы можно было еще и условие в запрос ставить. Допустим сейчас у тебя выбирает просто все записи с таблицы, а что если мне надо WHERE `id` = '2' ?
Цитата |
$queryForCount = mysql_query("SELECT * FROM `".$nameTable."`"); |
Тут обработай название таблицы, на всякий ...
Это можно легко внедрить сейчас, поэтому поработай на этим.
Очень хорошо сделал.
Спустя 2 минуты, 54 секунды (26.04.2011 - 10:15) Игорь_Vasinsky написал(а):
Спасибо, вот только по твоему предложению не понял, для чего выборка по критерию, если это пагинатор а не поиск?
тем более если выборка по ID - то тут пагинатор вообще не нужен был бы, так как в большинстве случаев этот столбец auto_increment
тем более если выборка по ID - то тут пагинатор вообще не нужен был бы, так как в большинстве случаев этот столбец auto_increment
Спустя 3 минуты, 39 секунд (26.04.2011 - 10:19) ИНСИ написал(а):
ну смотри, допустим мне надо найти статью, которая относится к категории 7. Запрос был так такой:
У тебя, сейчас, сделать такое нельзя, можно лишь сделать:
SELECT COUNT(`id`) FROM `{table}` WHERE `category` = '7'
У тебя, сейчас, сделать такое нельзя, можно лишь сделать:
SELECT COUNT(`id`) FROM `{table}`
Спустя 4 минуты, 34 секунды (26.04.2011 - 10:23) Игорь_Vasinsky написал(а):
Цитата |
ну смотри, допустим мне надо найти статью, которая относится к категории 7. Запрос был так такой: |
Смысл понял.
Это оставим на усмотрение пользователей
т.к. этого условия может и не быть
я думаю труда не составит дописать желающим.
Спустя 13 минут, 41 секунда (26.04.2011 - 10:37) ИНСИ написал(а):
Цитата |
я думаю труда не составит дописать желающим. |
Решил сделать :)
Свернутый текст
<?php
#Определил константы для подключения к серверу
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DB", "paginator");
#Соединение с сервером, выбор БД
$link = mysql_connect(HOST, USER, PASSWORD) or die (mysql_error());
$selectDB = mysql_select_db(DB) or die (mysql_error());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
<!--
strong.page{
padding-left: 5px;
padding-right: 5px;
border:1px solid #EAEEF8;
background-color: #3366FF;
font-family: arial;
color:white;
font-size: 13px
}
a.page:link,
a.page:hover,
a.page:visited{
font-family: arial;
text-decoration: none;
font-size: 13px;
padding-left: 4px;
padding-right: 4px;
border:1px solid #EAEEF8;
color: #3366FF;
}
-->
</style>
</head>
<body>
<?php
############################
# Постраничная навигация #
############################
/*
аргументы:
$countStrings - integer (кол-во строк на одной странице)
$showLinks - integer (кол-во линков навигации)
$nameTable - string (имя таблицы в БД, которая постранично выводится)
*/
function getNavigation($countStrings, $showLinks, $nameTable, $where)
{
#Подсчёт строк в таблице
$queryForCount = mysql_query("SELECT * FROM `".$nameTable."` " . $where);
$count_rows = mysql_num_rows($queryForCount);
#Подсчёт кол-ва страниц
$allPages = ceil($count_rows/$countStrings);
#Проверяем на какой странице мы находимся и задаём предел для вывода из БД
global $start;
if(!$_GET['page'] OR $_GET['page'] == 1)
{
$page = 1;
$start = 0;
}
else
{
$page = (int)$_GET['page'];
$start = ($page * $countStrings) - $countStrings;
}
$end = $start + $countStrings;
#Если мы ушли далеко от первой страницы - то выведем для удобства "Gthdfz"
if($page > ceil($showLinks/2))
{
echo $firstPage = "<a class='page' href='?page=1'>Первая</a> ";
}
#Проверяем - необходима ли ссылка "Предыдущая"
if($page != 1 AND $page > 1)
{
$prev = $page - 1;
echo $prevPage = "<a class='page' href='?page=".$prev."'>Предыдущая</a> ";
}
#Этот кусок выводит навигацию если общее кол-во страниц и кол-во показываемых ссылок совпадает
if($showLinks >= $allPages)
{
for($i = 1; $i <= $allPages; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Этот кусок будет строить навигацию когда кол-во страниц превышает кол-во выводимых ссылок
elseif($allPages > $showLinks)
{
#Строит навигацию для первыx SHOWLINKS ссылок
if($page <= ceil($showLinks/2))
{
for($i = 1; $i < $showLinks + 1; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Строит навигацию когда страница между предыдущем условием и следующим (СЕРЕДИНА)
if($page - ceil($showLinks/2) > 0 AND $page <= $allPages - $showLinks)
{
for($i = $page - ceil($showLinks/2 - 1); $i <= $page + ($showLinks/2); $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
#Строит навигацию для последних SHOWLINKS ссылок
if($page > $allPages - $showLinks AND $page > ceil($showLinks/2))
{
for($i = ($allPages - $showLinks) + 1; $i <= $allPages; $i++)
{
if($i == $page)
{
echo $navigation = " <strong class='page'>".$i."</strong>";
}
else
{
echo $navigation = " <a class='page' href='?page=".$i."'>".$i."</a>";
}
}
}
}
#Проверяем - необходима ли ссылка "Следующий"
if($page != $allPages AND $page < $allPages)
{
$next = $page + 1;
echo $nextPage = " <a class='page' href='?page=".$next."'>Следущая</a>";
}
#Если мы ещё далеко от последней страницы, то выведем "Последняя"
if($page <= $allPages - $showLinks)
{
echo $lastPage = " <a class='page' href='?page=".$allPages."'>Последняя</a>";
}
}
########################################
# ВЫЗОВ ФУНКЦИИ (ПОСТРОЕНИЕ НАВИГАЦИИ) #
########################################
#getNavigation($countStrings, $showLinks, $nameTable)
#$countStrings - integer (кол-во строк на одной странице)
#$showLinks - integer (кол-во линков навигации)
#$nameTable - string (имя таблицы в БД, которая постранично выводится)
#При вызове - LIMIT ".$start.", 3"), где 3 - $countStrings
#Пример $query = mysql_query("SELECT * FROM `test` ORDER BY `id` ASC LIMIT ".$start.", 3");
$whereQuery = "WHERE `id` = '7'";
getNavigation(3, 11, "test", $whereQuery);
#################
# ВЫВОД ТАБЛИЦЫ #
#################
$query = mysql_query("SELECT * FROM `test` {$whereQuery} ORDER BY `id` ASC LIMIT ".(int)$start.", 3") or die(mysql_error());
$count_rows = mysql_num_rows($query);
if($count_rows > 0)
{
while($string = mysql_fetch_array($query))
{
$table .= "<tr><td>".$string['id']."</td>"
. "<td width='10px'></td>"
. "<td>".$string['text']."</td>"
. "<td width='10px'></td>"
. "<td>".$string['order']."</td></tr>";
}
#Построение таблицы
echo "<table>".$table."</table>";
}
mysql_close($link);
?>
</body>
</html>
Спустя 6 минут, 7 секунд (26.04.2011 - 10:43) Игорь_Vasinsky написал(а):
НУ в принципе, до универсалил
Спустя 1 минута, 30 секунд (26.04.2011 - 10:45) Семён написал(а):
Честно говоря - плоховато.
Спустя 1 минута, 56 секунд (26.04.2011 - 10:46) Игорь_Vasinsky написал(а):
Семён
я именно на такое твоё мнение и расчитывал
давай рассказывай, подробней, буду работать.
я именно на такое твоё мнение и расчитывал
давай рассказывай, подробней, буду работать.
Спустя 1 час, 22 минуты, 14 секунд (26.04.2011 - 12:09) Семён написал(а):
Закрывая глаза SQL запросы в классе/функции, стоило бы обратить хотябы внимание на исключение элементов вёрстки из кода.
Спустя 19 минут, 50 секунд (26.04.2011 - 12:29) Игорь_Vasinsky написал(а):
Семён
так там только ссылки, для которых впринципе функция и работает.
а SQL - необходим для подсчёта кол-ва строк.
Я же говорю, при желании внутри функции код можно менять под себя. Но в большенстве случаев - я думаю именно такой нужен.
Надоб чтоб эксперты взглянули, мжет посчитают нужным закрепить на денёк...
так там только ссылки, для которых впринципе функция и работает.
а SQL - необходим для подсчёта кол-ва строк.
Я же говорю, при желании внутри функции код можно менять под себя. Но в большенстве случаев - я думаю именно такой нужен.
Надоб чтоб эксперты взглянули, мжет посчитают нужным закрепить на денёк...
Спустя 14 минут, 6 секунд (26.04.2011 - 12:43) ИНСИ написал(а):
Цитата |
мжет посчитают нужным закрепить на денёк... |
Закрепил на пару дней, а может и дольше
Спустя 31 секунда (26.04.2011 - 12:43) Семён написал(а):
Вот тебе пример Paginatora к примеру, который делал недавно для Коханы:
class Pagination {
public $config;
public function getData() {
$this->generateOptions();
return $this->selectData();
}
private function generateOptions() {
//Получим общее кол-во записей:
$this->config['total'] = $this->selectCount();
//Вычислим принадлежность страницы к паре:
$this->config['part'] = ceil($this->config['current'] / $this->config['break']);
//Посчитаем кол-во страниц:
$this->config['total_pages'] = ceil($this->config['total'] / $this->config['limit']);
//Устанавливаем начальную страницу
$this->config['begin'] = (($this->config['part'] - 1) * $this->config['break']) + 1;
//Устанавливаем конечную страницу
$this->config['end'] = (($this->config['break'] * $this->config['part']) > $this->config['total_pages']) ? $this->config['total_pages'] : $this->config['break'] * $this->config['part'];
//Установим ссылки переходов
$this->config['link_back'] = ($this->config['current'] > $this->config['break']) ? 1 : 0;
$this->config['link_next'] = ($this->config['end'] >= $this->config['total_pages']) ? 0 : 1;
//Получим offset:
$this->config['offset'] = $this->config['limit'] * ($this->config['current']-1);
}
public function selectData() {
return $this->config['data_request']->offset($this->config['offset'])->limit($this->config['limit'])->execute()->as_array();
}
private function selectCount() {
return $this->config['count_request'];
}
public function getView() {
$view = Kohana_View::factory('pagination/view');
$view->bind('paginator',$this->config);
return $view;
}
}
Спустя 5 минут (26.04.2011 - 12:48) Игорь_Vasinsky написал(а):
Классссссы..... РрРрРрРр.....
а моё детище одним инклудом вписал - ипользуйся...
не все с классами работать умеют... иСерёжа Игорёша тоже
Вот и сразу явное приемущество - простая интеграция
а моё детище одним инклудом вписал - ипользуйся...
не все с классами работать умеют... и
Вот и сразу явное приемущество - простая интеграция
Спустя 1 минута, 40 секунд (26.04.2011 - 12:50) Игорь_Vasinsky написал(а):
Так мы с тобой долго спорить будем можем... пусть смотрят комментируют.
Твою позицию я понял.
Тему закрепили..
Время будет, планирую дописать:
- добавить выбор стиля пагинатора: google, yandex и кто нить третий....
Твою позицию я понял.
Тему закрепили..
Время будет, планирую дописать:
- добавить выбор стиля пагинатора: google, yandex и кто нить третий....
Спустя 1 минута, 19 секунд (26.04.2011 - 12:51) Семён написал(а):
Т.е. хочешь сказать что у тебя будет простая интеграция?!
Куда ты пробовал интегрировать свою постраничку брррр в свой скрипт? чтобы утверждать что просто? ) Банально, у меня в проекте будет класс для работы с БД, и стили будут перебивать твою вёрстку, мне что лезть переписывать SQL запросы и html элементы? ))))
Куда ты пробовал интегрировать свою постраничку брррр в свой скрипт? чтобы утверждать что просто? ) Банально, у меня в проекте будет класс для работы с БД, и стили будут перебивать твою вёрстку, мне что лезть переписывать SQL запросы и html элементы? ))))
Спустя 10 минут, 14 секунд (26.04.2011 - 13:01) Игорь_Vasinsky написал(а):
Цитата |
Т.е. хочешь сказать что у тебя будет простая интеграция?! Куда ты пробовал интегрировать свою постраничку брррр в свой скрипт? чтобы утверждать что просто? ) Банально, у меня в проекте будет класс для работы с БД, и стили будут перебивать твою вёрстку, мне что лезть переписывать SQL запросы и html элементы? )))) |
Ты вот зачем себе такую рпутацию создаёшь ? споришь и споришь...
как будто тут всего 2 мнения - твое и не правильное...
Я постарался всё раскомментировать там.. чтоб человеку было понятно как и что и где.
Если он не знает как SQL запрос подправить - то нужно оно ему всё это ? я думаю - найдёт другой вариант и уж точно не ввиде класса.
Спустя 6 минут, 32 секунды (26.04.2011 - 13:08) Семён написал(а):
Игорь_Vasinsky, та репутация, которую ты считаешь, что я создаю уже давно создана ))) Критику нужно воспринимать и когда на твоём пути встаёт такая какашка как я и критикует тебя, старайся отстоять свою правоту и доказать.
Когда сказал, что плохо, тебя заинтересовало, что же там может быть плохого в моём идеальном коде? ))) Я тебе ответил, но ты по прежнему считаешь, что это нормально и универсально. Я тож знаешь далеко умом не блещу и всегда был бы рад, чтобы тот-же twin надавал мне подзатыльников )))) Это так приятно видеть свои пробелы!
Когда сказал, что плохо, тебя заинтересовало, что же там может быть плохого в моём идеальном коде? ))) Я тебе ответил, но ты по прежнему считаешь, что это нормально и универсально. Я тож знаешь далеко умом не блещу и всегда был бы рад, чтобы тот-же twin надавал мне подзатыльников )))) Это так приятно видеть свои пробелы!
Спустя 3 минуты, 56 секунд (26.04.2011 - 13:12) Игорь_Vasinsky написал(а):
Цитата |
чтобы тот-же twin надавал мне подзатыльников )))) Это так приятно видеть свои пробелы! |
это больно.... до шишок.
а по поводу всего остального - у меня для тебя один только аргумент:
человек который знает как работать с функциями не обязан уметь работать с классами.
И мне кажется именно это утверждение должно поставить точку в этой теме: чей код легко интегрирован.
Давай оставим места в теме для других...
Спустя 56 секунд (26.04.2011 - 13:13) Семён написал(а):
Твоё дело ) я тебя не хотел обидеть.
Спустя 35 секунд (26.04.2011 - 13:13) Игорь_Vasinsky написал(а):
да не.
Спустя 39 минут, 7 секунд (26.04.2011 - 13:52) Nikitian написал(а):
А что будет, если страниц 100500?
Написал пару лет назад, до сих пор без переделок пользуюсь.
Вот пагинатор в одну функцию (выпилил из более обобщённого класса)
/**
* Генерациястроки перехода по страницам
* @param int $count количество страниц
* @param int $current текущий элемент
* @param string $url урл, на который ссылаются. &id& заменяется на порядковый номер элемента http://site.ru/page%id&.html
* @param bool $nextpreview далее-назад.default=false
* @param bool $firstlast в начало-в конец.default=false
* @param char $separator разделитель элементов.default=' '
* @param int $view количество элементов, которые показывать
* @return string
* @author Nikitian
*/
function pageline($count,$current,$url,$nextpreview=false,$firstlast=false,$separator=' ',$view=6){
if($view>$count)$view=$count;
$str=array();
if($count<=$view){
for($i=1;$i<=$view;$i++)if($current!=$i)$str[]='<a href="'.str_replace('&id&',$i,$url).'">'.$i.'</a>';else$str[]='<a href="'.str_replace('&id&',$i,$url).'" class="active">'.$i.'</a>';
}
elseif($current<=$count && $current>=1){
$length=$view-2;
$from=intval($current-($length/2));
if($from<2)$from=2;
$to=$from+$length;
if($to>=$count){
$from=$count-$length-1;
$to=$count-1;
}
if($current!=1)$str[]='<a href="'.str_replace('&id&',1,$url).'">1</a>'.($from>2?'...':'');else$str[]='<a href="'.str_replace('&id&',1,$url).'" class="active">1</a>';
for($i=$from;$i<=$to;$i++)if($current!=$i)$str[]='<a href="'.str_replace('&id&',$i,$url).'">'.$i.'</a>';else$str[]='<a href="'.str_replace('&id&',$i,$url).'" class="active">'.$i.'</a>';
if($current!=$count)$str[]=($to<($count-1)?'<span>...</span>':'').'<a href="'.str_replace('&id&',$count,$url).'">'.$count.'</a>';else$str[]='<a href="'.str_replace('&id&',$count,$url).'" class="active">'.$count.'</a>';
}
else return false;
$str=implode($separator,$str);
if($nextpreview)$str=($current!=1 ? ('<a href="'.str_replace('&id&',($current-1),$url).'">← Назад</a>'.$separator):'').$str.($current!=$count ? ($separator.'<a href="'.str_replace('&id&',($current+1),$url).'">Далее →</a>'):'');
if($firstlast)$str=($current!=1 ? ('<a href="'.str_replace('&id&',1,$url).'">«« В начало</a>'.$separator):'').$str.($current!=$count ? ($separator.'<a href="'.str_replace('&id&',$count,$url).'">В конец »»</a>'):'');
return '<div class="paginator"><span>Страницы:</span>'.$str.'</div>';
}
//Использование
echo pageline(200,50,'/gotopage/&id&/');
Написал пару лет назад, до сих пор без переделок пользуюсь.
Спустя 14 минут, 16 секунд (26.04.2011 - 14:07) Игорь_Vasinsky написал(а):
Цитата |
А что будет, если страниц 100500? |
сломал голову... а что будет?, по моему предположение ни чего страшного. Или в чём подвох?
Спустя 3 минуты, 45 секунд (26.04.2011 - 14:10) Nikitian написал(а):
А, не, всё нормально. Второй скриншот не разглядел.
Спустя 3 дня, 17 часов, 30 минут, 37 секунд (30.04.2011 - 07:41) ИНСИ написал(а):
Игорь_Vasinsky чет, никто не отписывается. Снимаю
Спустя 4 минуты, 1 секунда (30.04.2011 - 07:45) Игорь_Vasinsky написал(а):
Да... уж дней 7 тишина... лан. Есть в разделе, поисковики шарят.. снимай.
Спустя 3 месяца, 8 дней, 12 часов, 52 минуты, 1 секунда (8.08.2011 - 20:37) dropoff написал(а):
с выводом разобрался.
А как быть, если нужно две пагинации на странице выводить?
Как-то малость не удобно.
Я еще получаю $allPages для того, чтобы можно было при добавлении материала с любой странице редиректить в конец. как на форуме. Если добавить сообщение в начале темы, то после постинга перекидывает на твое сообщение в самом конце.
так же сделал еще в качестве аргумента передачу УРЛа и подставил к ссылкам
потом через str_replace убиваю ?page=1, чтобы первая страница не дублировалась.
Работает нормально, но как-то не приятно юзать глобальные переменные.
Оформить бы в виде класса. было бы удобнее! Жаль нубоват я в этом деле))
Спасибо за функцию.
Спустя 5 месяцев, 23 дня, 1 час, 2 минуты, 56 секунд (31.01.2012 - 21:40) Shkiper написал(а):
Здаров Игорь! Скачал исходники все работает все норм навигация Только вот небольшая неувязочка!! Там идет подсчет кол-во записей в БД а потом строиться меню и выводиться определенные новости!!!! А как делать так если мне надо вывести только те где в поле public стоит 1 я сделал это с помощью where все работает но только не выводит например если я на первой то не выводит ссылку Последняя или на оборот что делать???
Спустя 32 минуты, 32 секунды (31.01.2012 - 22:13) inpost написал(а):
Deert
А тебе не кажется, что чтобы пользоваться скриптами, тебе надо понимать, что они делают, а не заниматься тупым копи-пастом?
А тебе не кажется, что чтобы пользоваться скриптами, тебе надо понимать, что они делают, а не заниматься тупым копи-пастом?
Спустя 3 минуты, 36 секунд (31.01.2012 - 22:16) Игорь_Vasinsky написал(а):
весь алгоритм завязан так
если первая в зоне видимости - то "первая" не покажеться
если последняя в зоне видимости - то "последняя" не покажеться
замени на
и она всегда будут присутствовать в навигации...
или ты про что?
надож.. помню ещё.. сам то давно на аяксовом пагинаторе))
если первая в зоне видимости - то "первая" не покажеться
если последняя в зоне видимости - то "последняя" не покажеться
#Если мы ушли далеко от первой страницы - то выведем для удобства "Gthdfz"
if($page > ceil($showLinks/2))
{
echo $firstPage = "<a class='page' href='?page=1'>Первая</a> ";
}
замени на
echo $firstPage = "<a class='page' href='?page=1'>Первая</a> ";
и она всегда будут присутствовать в навигации...
или ты про что?
надож.. помню ещё.. сам то давно на аяксовом пагинаторе))
Спустя 5 дней, 1 час, 14 минут, 33 секунды (6.02.2012 - 23:31) kulinar написал(а):
Спасиб за скрипт!
у меня тут маленькая неувязочка когда "инклудаю") файл навигации из другой папки работает но вместо русских слов абракадабра..
кто знает как решить проблему ? спасибо.
(без include одним файлом русские символы отображаются правильно)
у меня тут маленькая неувязочка когда "инклудаю") файл навигации из другой папки работает но вместо русских слов абракадабра..
кто знает как решить проблему ? спасибо.
(без include одним файлом русские символы отображаются правильно)
Спустя 4 часа, 26 минут, 40 секунд (7.02.2012 - 03:57) Игорь_Vasinsky написал(а):
заголовок с кодировкой посылай (header)
после соединения с бд
пагинатор тут не причём ;)
после соединения с бд
mysql_query("SET NAMES 'utf-8'");
пагинатор тут не причём ;)
Спустя 10 часов, 11 минут, 39 секунд (7.02.2012 - 14:09) kulinar написал(а):
добавил -
ситуацията же, utf-8 тоже ничего не изменил ((
mysql_query("SET NAMES 'windows-1251'");
mysql_query("SET CHARACTER SET 'windows-1251'" );
ситуацията же, utf-8 тоже ничего не изменил ((
Спустя 6 минут, 4 секунды (7.02.2012 - 14:15) Winston написал(а):
Цитата (kulinar @ 7.02.2012 - 13:09) |
SET NAMES 'windows-1251 |
Так не пишут, нужно так
mysql_query("SET NAMES cp1251");
Спустя 3 минуты, 12 секунд (7.02.2012 - 14:18) Bodich написал(а):
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251'" );
ничего не дало вподключаемом файле абракадабра
Спустя 3 минуты, 20 секунд (7.02.2012 - 14:22) Winston написал(а):
Заголовок (header()) выставлен в файле?
Кодировка файла точно UTF-8 Without BOM?
Кодировка файла точно UTF-8 Without BOM?
Цитата (Bodich @ 7.02.2012 - 13:18) |
ничего не дало вподключаемом файле абракадабра |
Какая абракадабра? Каракули или ромбики?
Спустя 3 минуты, 37 секунд (7.02.2012 - 14:25) Игорь_Vasinsky написал(а):
погоди)))
у тя данные в какой кодировке в БД?
сами файлы в какой кодировке?
у тя данные в какой кодировке в БД?
сами файлы в какой кодировке?
Спустя 17 минут, 10 секунд (7.02.2012 - 14:42) Bodich написал(а):
Следущая Последняя
MySQL connection collation : utf8_general_ci
Сервер: povarec.mysql.ukraine.com.ua via TCP/IP
Версія сервера: 5.1.56-log
Protocol version: 10
Користувач: povarec_db@91.206.200.55
MySQL Charset: UTF-8 Unicode (utf8)
а как узнать в какой кодировке фали ((
MySQL connection collation : utf8_general_ci
Сервер: povarec.mysql.ukraine.com.ua via TCP/IP
Версія сервера: 5.1.56-log
Protocol version: 10
Користувач: povarec_db@91.206.200.55
MySQL Charset: UTF-8 Unicode (utf8)
а как узнать в какой кодировке фали ((
Спустя 5 минут, 23 секунды (7.02.2012 - 14:48) Winston написал(а):
Цитата (Bodich @ 7.02.2012 - 13:42) |
Следущая Последняя |
Такие символы выводятся когда кодировка файла UTF-8, а такой заголовок
header("Content-Type: text/html; charset=utf-8");
Не прописан. Потому пропиши его.
Спустя 13 минут, 29 секунд (7.02.2012 - 15:01) Bodich написал(а):
у меня вся коировка сайта в windows-1251
пробывал в шапке поставить header("Content-Type: text/html; charset=utf-8");--
ниче неотображается правильно кроме навигации
написал в начале файла navig_pre_view.inc.php
header("Content-Type: text/html; charset=utf-8");
ничего не изменилось
пробывал в шапке поставить header("Content-Type: text/html; charset=utf-8");--
ниче неотображается правильно кроме навигации
написал в начале файла navig_pre_view.inc.php
header("Content-Type: text/html; charset=utf-8");
ничего не изменилось
Спустя 5 минут, 41 секунда (7.02.2012 - 15:07) Winston написал(а):
Цитата (Bodich @ 7.02.2012 - 14:01) |
у меня вся коировка сайта в windows-1251 |
Цитата (Bodich @ 7.02.2012 - 13:42) |
MySQL connection collation : utf8_general_ci |
Цитата (Bodich @ 7.02.2012 - 13:42) |
MySQL Charset: UTF-8 Unicode (utf8) |
Ёпрст :wacko: Почему нельзя все сделать в одной кодировке???
Теперь отвечай мне на вопросы:
1) У тебя при соединении с базой прописано?
mysql_query("SET NAMES cp1251");
2) Сам файл в котором коннект прописан, в какой кодировке? (Если не знаешь, открой notepad++ -> меню кодировки)
3) Файл в котором ты инклюдишь файл коннекта в какой кодировке? Если windows-1251, то и заголовок с такой же кодировкой нужно прописывать
header("Content-Type: text/html; charset=windows-1251");
Спустя 18 минут, 32 секунды (7.02.2012 - 15:26) Bodich написал(а):
файл коннекта
файл инклюда
файл куда подключается через инклюд
header("Content-Type: text/html; charset=windows-1251");
$db=mysql_connect("povarec.mysql.ukraine.com.ua","********","********");
mysql_select_db("povarec_db",$db);
mysql_query("SET NAMES cp1251");
файл инклюда
<?php
header("Content-Type: text/html; charset=windows-1251");
echo '<div align="center">';
// вивод постраничной навигации:
############################
# Постраничная навигация #
############################
/*аргументы:
$countStrings - integer (кол-во строк на одной странице)
$showLinks - integer (кол-во линков навигации)
*/ $nameTable = 'data';
файл куда подключается через инклюд
include("BD.php");
header("Content-Type: text/html; charset=windows-1251");
require_once "func/query.php";
if (isset($_GET['podcat'])) {$podcat=$_GET['podcat'];}
if (isset($_GET['cat_number'])) {$cat_number=$_GET['cat_number'];}
Спустя 1 минута, 54 секунды (7.02.2012 - 15:27) Winston написал(а):
А сами файлы ты уверен, что они в windows-1251?
Спустя 7 минут, 25 секунд (7.02.2012 - 15:35) Bodich написал(а):
фуххх поменял кодировку самого фала в phpDesigner залил и все норм
СПАСИБО за помощь!!!
СПАСИБО за помощь!!!
Спустя 1 минута, 8 секунд (7.02.2012 - 15:36) Winston написал(а):
Ну наконец-то
Спустя 22 минуты, 22 секунды (7.02.2012 - 15:58) Игорь_Vasinsky написал(а):
Цитата |
Ёпрст Почему нельзя все сделать в одной кодировке??? |
Спустя 7 часов, 46 минут, 47 секунд (7.02.2012 - 23:45) Bodich написал(а):
еще проблемка,к странице подключен яваскрипт
<script language="javascript" type="text/javascript" src="Scripts/podskazka.js"></script>
при переходе по навигации на страницу 2 и тд яваскрипт не работает(((
<script language="javascript" type="text/javascript" src="Scripts/podskazka.js"></script>
при переходе по навигации на страницу 2 и тд яваскрипт не работает(((
Спустя 1 минута, 32 секунды (7.02.2012 - 23:47) inpost написал(а):
Bodich
Дом дерево не перестраивается при подключении аяксом новых данных. Это особенность JS. Для этого необходимо вручную создавать объекты, на которые ссылается твоя подсказка.
Дом дерево не перестраивается при подключении аяксом новых данных. Это особенность JS. Для этого необходимо вручную создавать объекты, на которые ссылается твоя подсказка.
Спустя 12 минут, 45 секунд (7.02.2012 - 23:59) redreem написал(а):
Цитата |
Дом дерево не перестраивается при подключении аяксом новых данных |
перестраивается.
Спустя 12 часов, 48 минут, 59 секунд (8.02.2012 - 12:48) Bodich написал(а):
так что, скрипты не работают при переходе по навигации ?
Спустя 1 день, 11 часов, 54 минуты, 57 секунд (10.02.2012 - 00:43) Bodich написал(а):
Работает
Спустя 6 часов, 14 минут, 19 секунд (10.02.2012 - 06:58) Игорь_Vasinsky написал(а):
канешь работают, DOM тот же а данные просто другие.
Спустя 1 месяц, 10 дней, 6 часов, 12 минут, 33 секунды (20.03.2012 - 13:10) Проша написал(а):
Вот мой вариант
$allRecords = 100;
$userPage = $_GET['page'];
function pages($allRecords, $userPage)
{
$allPages = ceil($allRecords/10); // всего страниц
$allRecords = $allPages * 10; // округленное количество записей в БД
if ($userPage > $allPages) $userPage = 1;
// кнопка "назад"
if ($userPage > 1) $pages['back'] = $userPage * 10 - 20;
$pages[1] = 0; // запоминаем первую страницу
if (($userPage - 1) > 4) // нужно ли отобразить страницы "слева" от выбранной
{
$pages['.'] = '...';
$arr = nearPages($userPage - 3, $userPage, $pages);
}
if ((($userPage - 1) <= 4)&&(($userPage - 1) != 0))
{
$arr = nearPages(2, $userPage, $pages);
}
$arr[$userPage] = $userPage * 10 - 10; // выбранная пользователем страница
if (($userPage + 4) < $allPages) // страницы "справа"
{
$arr = nearPages($userPage + 1, $userPage + 4, $arr);
$arr['.'] = '...';
}
if (($userPage + 4) >= $allPages)
{
$arr = nearPages($userPage + 1, $allPages, $arr);
}
$arr[$allPages] = $allPages * 10 - 10; // последняя страница
// ссылка "вперед"
if (($userPage + 1) <= $allPages) $arr['next'] = $userPage * 10;
return $arr;
}
function nearPages($beginPage, $endPage, $pages)
{
for ($i = $beginPage; $i < $endPage; $i ++)
{
$pages[$i] = $i * 10 - 10;
}
return $pages;
}
$pages = pages($allRecords, $userPage);
foreach($pages as $index => $value)
{
if ($index <> '.')
{
echo "<a href='pages.php?page=" . $value . "'>[" . $index . "]</a>";
}
else
{
echo " ... ";
}
}
Спустя 1 месяц, 9 дней, 18 часов, 38 минут, 56 секунд (30.04.2012 - 07:49) Игорь_Vasinsky написал(а):
нужно было тему создать)))
Спустя 1 день, 13 часов, 6 минут, 55 секунд (1.05.2012 - 20:56) bposter написал(а):
Не дает скачать php файл пишит Access denied for user 'root'@'localhost' (using password: NO)
Спустя 2 минуты, 16 секунд (1.05.2012 - 20:58) Игорь_Vasinsky написал(а):
да. хостинг ж сменил))
дамп и функция есть на первой странице в виде листинга, тамже ниже есть исправленная функция.
дамп и функция есть на первой странице в виде листинга, тамже ниже есть исправленная функция.
Спустя 1 день, 3 часа, 40 минут, 17 секунд (3.05.2012 - 00:39) Гость_Вася написал(а):
и я писал пользуйтесь комментируйте плюсы минусы
empty($_GET['page']) ? $page = 1 : $page = $_GET['page'];
$page-- > 2 ? $page-- : $page; $page == 0 ? $page = 1 : $page;
print $_GET['page'].'<br>';
$num = ceil(500 / 20);
if ($page > 3) {
print '<a href = "test.php?page=1"
style = "font-weight: bold; text-decoration: none;" >«</a>';
}
for ($page; $page <= $num; $page++) { $end++;
if ($page != $_GET['page']) {
print ' <a href = "test.php?page='.$page.'" style = "font-weight: bold; text-decoration: none;" >'.$page.'</a> ';
} else if ($page == $_GET['page']) {
print ' <font style = "font-weight: bold; text-decoration: underline;" >'.$page.'</font> ';
}
if ($end == 5) {break;}
}
if ($page < $num - 3) {
print '<a href = "test.php?page='.$num.'"
style = "font-weight: bold; text-decoration: none;" >»</a>';
}
empty($_GET['page']) ? $page = 1 : $page = $_GET['page'];
$page-- > 2 ? $page-- : $page; $page == 0 ? $page = 1 : $page;
print $_GET['page'].'<br>';
$num = ceil(500 / 20);
if ($page > 3) {
print '<a href = "test.php?page=1"
style = "font-weight: bold; text-decoration: none;" >«</a>';
}
for ($page; $page <= $num; $page++) { $end++;
if ($page != $_GET['page']) {
print ' <a href = "test.php?page='.$page.'" style = "font-weight: bold; text-decoration: none;" >'.$page.'</a> ';
} else if ($page == $_GET['page']) {
print ' <font style = "font-weight: bold; text-decoration: underline;" >'.$page.'</font> ';
}
if ($end == 5) {break;}
}
if ($page < $num - 3) {
print '<a href = "test.php?page='.$num.'"
style = "font-weight: bold; text-decoration: none;" >»</a>';
}
Спустя 22 дня, 16 часов, 16 минут, 18 секунд (25.05.2012 - 16:55) Guest написал(а):
:lol : :un sure:
Спустя 3 часа, 15 минут, 50 секунд (25.05.2012 - 20:11) Игорь_Vasinsky написал(а):
не флудить! пример пагинатора в этой теме на http://hdkinozavr.ru
Спустя 6 дней, 21 час, 2 минуты, 44 секунды (1.06.2012 - 17:13) vadimk написал(а):
Использование:
pagination("Адрес-до-номера-страницы", Общее-кол-во-страниц, Текущая-страница);
Пример:
pagination("?p=", $count, $_GET[p]);
Код функции:
<?
function pagination($addr, $count, $page){
if($page=='')$page=1;
$bold[$page][s]="<b>";
$bold[$page][e]="</b>";
if($count>1){
echo('<a href="'.$addr.'1">'.$bold[1][s].'1'.$bold[1][e].'</a> | ');
if($page-5>2)echo('... | ');
for($i=$page-5;$i<=$page+5;$i++){
if($i>1&$i<$count)echo('<a href="'.$addr.''.$i.'">'.$bold[$i][s].''.$i.''.$bold[$i][e].'</a> | ');
}
if($page+5<$count-1)echo('... | ');
echo('<a href="'.$addr.''.$count.'">'.$bold[$count][s].''.$count.''.$bold[$count][e].'</a>');}}
?>
Спустя 2 месяца, 27 дней, 14 часов, 30 минут, 14 секунд (29.08.2012 - 07:44) Игорь_Vasinsky написал(а):
Цитата |
if($page=='')$page=1; |
1я строка и сразу косячина.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker