phpMv  -UI toolkit 2.4.12
jQuery, jQuery UI, Twitter Bootstrap and Semantic-UI library for php & php MVC Frameworks
HtmlCollection.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ajax\common\html;
4 
6 use Ajax\JsUtils;
9 
15 abstract class HtmlCollection extends HtmlDoubleElement {
16 
17  public function __construct($identifier,$tagName="div"){
18  parent::__construct($identifier,$tagName);
19  $this->content=array();
20  }
21 
22  public function addItems($items){
23  if(JArray::isAssociative($items)){
24  foreach ($items as $k=>$v){
25  $this->addItem([$k,$v]);
26  }
27  }else{
28  foreach ($items as $item){
29  $this->addItem($item);
30  }
31  }
32  return $this;
33  }
34 
35  public function setItems($items){
36  $this->content=$items;
37  return $this;
38  }
39 
40  public function getItems(){
41  return $this->content;
42  }
43 
44  protected function getItemToAdd($item){
45  $itemO=$item;
46  if($this->createCondition($item)===true){
47  $itemO=$this->createItem($item);
48  }
49  return $itemO;
50  }
51 
52  protected function setItemIdentifier($item,$classname,$index){
53  if($item instanceof BaseWidget){
54  if(JString::isNull($item->getIdentifier())){
55  $item->setIdentifier($classname."-".$this->identifier."-".$index);
56  }
57  }
58  }
59 
65  public function addItem($item){
66  $itemO=$this->getItemToAdd($item);
67  $this->addContent($itemO);
68  return $itemO;
69  }
70 
71  public function insertItem($item,$position=0){
72  $itemO=$this->getItemToAdd($item);
73  \array_splice( $this->content, $position, 0, array($itemO));
74  return $itemO;
75  }
76 
82  public function getItem($index) {
83  if (is_int($index)&& isset($this->content[$index]))
84  return $this->content[$index];
85  else {
86  $elm=$this->getElementById($index, $this->content);
87  return $elm;
88  }
89  }
90 
91  public function setItem($index, $value) {
92  $this->content[$index]=$value;
93  return $this;
94  }
95 
96  public function removeItem($index){
97  return array_splice($this->content, $index, 1);
98  }
99 
100  public function count(){
101  return \sizeof($this->content);
102  }
103 
104  /* (non-PHPdoc)
105  * @see \Ajax\bootstrap\html\base\BaseHtml::fromDatabaseObject()
106  */
107  public function fromDatabaseObject($object, $function) {
108  return $this->addItem($function($object));
109  }
110 
111  public function apply($callBack){
112  foreach ($this->content as $item){
113  $callBack($item);
114  }
115  return $this;
116  }
117 
118  /*
119  * (non-PHPdoc)
120  * @see \Ajax\bootstrap\html\HtmlSingleElement::fromArray()
121  */
122  public function fromArray($array) {
123  $this->addItems($array);
124  return $this;
125  }
130  abstract protected function createItem($value);
131 
132  protected function createCondition($value){
133  return !($value instanceof BaseHtml);
134  }
135 
136  protected function contentAs($tagName){
137  foreach ($this->content as $item){
138  $item->setTagName($tagName);
139  }
140  return $this;
141  }
142 
143  public function setProperties($properties){
144  $i=0;
145  foreach ($properties as $k=>$v){
146  $c=$this->content[$i++];
147  if(isset($c))
148  $c->setProperty($k,$v);
149  else
150  return $this;
151  }
152  return $this;
153  }
154 
161  public function setPropertyValues($property,$values){
162  if(\is_array($values)===false){
163  $values=\array_fill(0, $this->count(),$values);
164  }
165  foreach ($values as $i=>$value){
166  if(isset($this->content[$i])){
167  $this->content[$i]->setProperty($property,$value);
168  }
169  else{
170  return $this;
171  }
172  }
173  return $this;
174  }
175 
182  public function addPropertyValues($property,$values){
183  if(\is_array($values)===false){
184  $values=\array_fill(0, $this->count(),$values);
185  }
186  foreach ($values as $i=>$value){
187  if(isset($this->content[$i])){
188  $this->content[$i++]->addToProperty($property,$value);
189  }
190  else{
191  return $this;
192  }
193  }
194  return $this;
195  }
196 
197  public function compile(JsUtils $js=NULL, &$view=NULL) {
198  $index=0;
199  $classname=\strtolower(JReflection::shortClassName($this));
200  foreach ($this->content as $item){
201  $this->setItemIdentifier($item,$classname,$index++);
202  }
203  return parent::compile($js,$view);
204  }
205 
206  public function getItemById($identifier){
207  return $this->getElementById($identifier, $this->content);
208  }
209 
215  public function asLinks($hrefs=[],$target=NUll) {
216  foreach ( $this->content as $index=>$item ) {
217  if($item instanceof HtmlDoubleElement){
218  $href="";
219  if(isset($hrefs[$index]))
220  $href=$hrefs[$index];
221  $item->asLink($href,$target);
222  }
223  }
224  return $this;
225  }
226 
233  public function splice($offset,$length=null){
234  $this->content=array_slice($this->content, $offset,$length);
235  return $this;
236  }
237 }
compile(JsUtils $js=NULL, &$view=NULL)
static shortClassName($object)
Definition: JReflection.php:6
createItem($value)
The item factory.
BaseHtml for HTML components.
Definition: BaseHtml.php:17
__construct($identifier, $tagName="div")
asLinks($hrefs=[], $target=NUll)
addContent($content, $before=false)
Base class for Html collections.
splice($offset, $length=null)
Remove a portion of the items array and replace it with something else.
addItem($item)
adds and returns an item
setItemIdentifier($item, $classname, $index)
insertItem($item, $position=0)
BaseWidget for Twitter Bootstrap, jQuery UI or Semantic rich components.
Definition: BaseWidget.php:13
addPropertyValues($property, $values)
Adds the values of a property for each item in the collection.
getItem($index)
Return the item at index.
static isAssociative($array)
Definition: JArray.php:6
static isNull($s)
Definition: JString.php:18
JQuery PHP library.
Definition: JsUtils.php:23
getElementById($identifier, $elements)
Definition: BaseHtml.php:179
fromDatabaseObject($object, $function)
setPropertyValues($property, $values)
Sets the values of a property for each item in the collection.