OXID eShop CE  4.8.12
 All Classes Files Functions Variables Pages
oxtagset.php
Go to the documentation of this file.
1 <?php
2 
3 
9 class oxTagSet extends oxSuperCfg implements Iterator
10 {
11 
17  protected $_sSeparator = ',';
18 
24  protected $_aTags = array();
25 
31  protected $_aInvalidTags = array();
32 
40  public function setSeparator( $sSeparator )
41  {
42  $this->_sSeparator = $sSeparator;
43  }
44 
50  public function getSeparator()
51  {
52  return $this->_sSeparator;
53  }
54 
63  public function set( $sTags, $blPrepare = true )
64  {
65  $this->clear();
66  $this->add( $sTags, $blPrepare );
67  }
68 
74  public function get()
75  {
76  return $this->_aTags;
77  }
78 
84  public function getInvalidTags()
85  {
86  return $this->_aInvalidTags;
87  }
88 
97  public function add( $sTags, $blPrepare = true )
98  {
99  $aTags = explode( $this->getSeparator(), $sTags );
100  foreach ( $aTags as $sTag ) {
101  $this->addTag( $sTag, $blPrepare );
102  }
103  }
104 
113  public function addTag( $mTag, $blPrepare = true )
114  {
115  $oTag = $this->_formTag( $mTag, $blPrepare );
116  $sTagName = $oTag->get();
117  if ( !$oTag->isValid() ) {
118  if ( $sTagName !== "" ) {
119  $this->_aInvalidTags[$sTagName] = $oTag;
120  }
121  return false;
122  }
123  if ( $this->_aTags[$sTagName] === null ) {
124  $this->_aTags[$sTagName] = $oTag;
125  } else {
126  $this->_aTags[$sTagName]->increaseHitCount();
127  }
128  return true;
129  }
130 
136  public function clear()
137  {
138  $this->_aTags = array();
139  }
140 
146  public function formString()
147  {
148  $aTags = array();
149  foreach ($this->get() as $oTag) {
150  $aTags = array_merge($aTags, array_fill(0, $oTag->getHitCount(), $oTag->get() ) );
151  }
152  return implode($this->getSeparator(), $aTags );
153  }
154 
160  public function __toString()
161  {
162  return $this->formString();
163  }
164 
173  public function slice( $offset, $length )
174  {
175  $this->_aTags = array_slice( $this->get(), $offset, $length, true );
176  return $this->_aTags;
177  }
178 
184  public function sort()
185  {
186  $oStr = getStr();
187  uksort( $this->_aTags, array($oStr, 'strrcmp') );
188  }
189 
195  public function sortByHitCount()
196  {
197  uasort( $this->_aTags, array($this, '_tagHitsCmp') );
198  }
199 
205  public function current()
206  {
207  return current( $this->_aTags );
208  }
209 
215  public function next()
216  {
217  next( $this->_aTags );
218  }
219 
225  public function key()
226  {
227  return key( $this->_aTags );
228  }
229 
235  public function valid()
236  {
237  return isset( $this->_aTags[ $this->key() ] );
238  }
239 
245  public function rewind()
246  {
247  reset( $this->_aTags );
248  }
249 
258  protected function _formTag( $mTag, $blPrepare = true )
259  {
260  if ( $mTag instanceof oxTag ) {
261  $oTag = $mTag;
262  } else {
263  $oTag = oxNew( "oxTag" );
264  $oTag->set( $mTag, $blPrepare );
265  }
266  return $oTag;
267  }
268 
277  protected function _tagHitsCmp( $oTag1, $oTag2 )
278  {
279  return $oTag2->getHitCount() - $oTag1->getHitCount();
280  }
281 }