Go to the documentation of this file.00001 <?php
00002
00003
00009 class oxTagSet extends oxSuperCfg implements Iterator
00010 {
00011
00017 protected $_sSeparator = ',';
00018
00024 protected $_aTags = array();
00025
00031 protected $_aInvalidTags = array();
00032
00038 public function setSeparator($sSeparator)
00039 {
00040 $this->_sSeparator = $sSeparator;
00041 }
00042
00048 public function getSeparator()
00049 {
00050 return $this->_sSeparator;
00051 }
00052
00059 public function set($sTags, $blPrepare = true)
00060 {
00061 $this->clear();
00062 $this->add($sTags, $blPrepare);
00063 }
00064
00070 public function get()
00071 {
00072 return $this->_aTags;
00073 }
00074
00080 public function getInvalidTags()
00081 {
00082 return $this->_aInvalidTags;
00083 }
00084
00091 public function add($sTags, $blPrepare = true)
00092 {
00093 $aTags = explode($this->getSeparator(), $sTags);
00094 foreach ($aTags as $sTag) {
00095 $this->addTag($sTag, $blPrepare);
00096 }
00097 }
00098
00107 public function addTag($mTag, $blPrepare = true)
00108 {
00109 $oTag = $this->_formTag($mTag, $blPrepare);
00110 $sTagName = $oTag->get();
00111 if (!$oTag->isValid()) {
00112 if ($sTagName !== "") {
00113 $this->_aInvalidTags[$sTagName] = $oTag;
00114 }
00115
00116 return false;
00117 }
00118 if ($this->_aTags[$sTagName] === null) {
00119 $this->_aTags[$sTagName] = $oTag;
00120 } else {
00121 $this->_aTags[$sTagName]->increaseHitCount();
00122 }
00123
00124 return true;
00125 }
00126
00130 public function clear()
00131 {
00132 $this->_aTags = array();
00133 }
00134
00140 public function formString()
00141 {
00142 $aTags = array();
00143 foreach ($this->get() as $oTag) {
00144 $aTags = array_merge($aTags, array_fill(0, $oTag->getHitCount(), $oTag->get()));
00145 }
00146
00147 return implode($this->getSeparator(), $aTags);
00148 }
00149
00155 public function __toString()
00156 {
00157 return $this->formString();
00158 }
00159
00168 public function slice($offset, $length)
00169 {
00170 $this->_aTags = array_slice($this->get(), $offset, $length, true);
00171
00172 return $this->_aTags;
00173 }
00174
00178 public function sort()
00179 {
00180 $oStr = getStr();
00181 uksort($this->_aTags, array($oStr, 'strrcmp'));
00182 }
00183
00187 public function sortByHitCount()
00188 {
00189 uasort($this->_aTags, array($this, '_tagHitsCmp'));
00190 }
00191
00197 public function current()
00198 {
00199 return current($this->_aTags);
00200 }
00201
00205 public function next()
00206 {
00207 next($this->_aTags);
00208 }
00209
00215 public function key()
00216 {
00217 return key($this->_aTags);
00218 }
00219
00225 public function valid()
00226 {
00227 return isset($this->_aTags[$this->key()]);
00228 }
00229
00233 public function rewind()
00234 {
00235 reset($this->_aTags);
00236 }
00237
00246 protected function _formTag($mTag, $blPrepare = true)
00247 {
00248 if ($mTag instanceof oxTag) {
00249 $oTag = $mTag;
00250 } else {
00251 $oTag = oxNew("oxTag");
00252 $oTag->set($mTag, $blPrepare);
00253 }
00254
00255 return $oTag;
00256 }
00257
00266 protected function _tagHitsCmp($oTag1, $oTag2)
00267 {
00268 return $oTag2->getHitCount() - $oTag1->getHitCount();
00269 }
00270 }