forked from chalenkoa/Bootstrap.PHP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pager.php
152 lines (131 loc) · 3.67 KB
/
Pager.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
namespace BootstrapPHP;
use BootstrapPHP\Helpers\View;
use BootstrapPHP\Base\Attributes;
/**
* Класс конструктор элемента Pager Bootstrap
*
* @see http://twitter.github.io/bootstrap/components.html#pagination
* @see http://bootstrap-ru.com//components/#pagination
*/
abstract class PagerBuilder extends Base\Base
{
const ARROW_LEFT = 'left';
const ARROW_RIGHT = 'right';
/** @var PagerItem[] */
protected $_items;
protected $_arrows;
/**
* Добавляем элемент Предыдущий
* @param string $text текст в блоке со стрелкой влево
* @param string $url
* @param bool $disabled true блокируют элемент
* @param Attributes $attributes
* @return PagerBuilder
*/
public function addItemPrevious($text, $url = '#', $disabled = false, Attributes $attributes = null)
{
return $this->addItem($text, $url, $disabled, $attributes, PagerItem::TYPE_PREVIOUS);
}
/**
* Добавление элемента Следующий
* @param string $text текст в блоке со стрелкой вправо
* @param string $url
* @param bool $disabled true блокируют элемент
* @param Attributes $attributes
* @return PagerBuilder
*/
public function addItemNext($text, $url = '#', $disabled = false, Attributes $attributes = null)
{
return $this->addItem($text, $url, $disabled, $attributes, PagerItem::TYPE_NEXT);
}
/**
* Добавление элемента
* @param string $text текст на элементе
* @param string $url
* @param bool $disabled true блокируют элемент
* @param Attributes $attributes
* @param string $type
* @return PagerBuilder
*/
public function addItem(
$text, $url = '#', $disabled = false, Attributes $attributes = null, $type = PagerItem::TYPE_DEFAULT
)
{
$index =
(
( $type == PagerItem::TYPE_DEFAULT )
? count($this->_items) + 1
: $type
);
$this->_items[$index] = new PagerItem();
$this->_items[$index]->text = $text;
$this->_items[$index]->url = $url;
$this->_items[$index]->disabled = $disabled;
$this->_items[$index]->attributes = $attributes;
return $this;
}
/**
* Переопределение стрелки влево
* @param string $arrow стрелка, можно html
* @return PagerBuilder
*/
public function setArrowLeft($arrow)
{
return $this->_setArrow($arrow, self::ARROW_LEFT);
}
/**
* Переопределение стрелки вправо
* @param string $arrow стрелка, можно html
* @return PagerBuilder
*/
public function setArrowRight($arrow)
{
return $this->_setArrow($arrow, self::ARROW_RIGHT);
}
/**
* @param string $arrow вид стрелки
* @param string $direction
* @return PagerBuilder
*/
private function _setArrow($arrow, $direction)
{
$this->_arrows[$direction] = $arrow;
return $this;
}
public function __toString()
{
/** @var \view_pager */
return View::render('Pager', array('pager' => $this));
}
}
class Pager extends PagerBuilder
{
/**
* Создание объекта Pager
* @return PagerBuilder
*/
public static function create()
{
$class = __CLASS__;
return new $class();
}
public function getItems()
{
return $this->_items;
}
public function getArrow($direction)
{
return $this->_arrows[$direction];
}
}
class PagerItem
{
const TYPE_PREVIOUS = 'previous';
const TYPE_NEXT = 'next';
const TYPE_DEFAULT = '';
public $text;
public $url;
public $disabled;
public $attributes;
}