Go to the documentation of this file.00001 <?php
00002
00007 class Compare extends oxUBase
00008 {
00013 protected $_iCntPages = null;
00014
00019 protected $_iOrderCnt = null;
00020
00025 protected $_iArticlesPerPage = 3;
00026
00031 protected $_iCompItemsCnt = null;
00032
00037 protected $_aCompItems = null;
00038
00043 protected $_oArtList = null;
00044
00049 protected $_oAttributeList = null;
00050
00055 protected $_oRecommList = null;
00056
00061 protected $_oPageNavigation = null;
00062
00067 protected $_blTop5Action = true;
00068
00073 protected $_blBargainAction = true;
00074
00079 protected $_sThisTemplate = 'compare.tpl';
00080
00091 public function render()
00092 {
00093 parent::render();
00094
00095
00096 $this->_aViewData['oxcmp_compare'] = $this->getCompareItemsCnt();
00097
00098 $this->getCompArtList();
00099
00100 $this->_aViewData['articlelist'] = $this->getCompArtList();
00101
00102
00103 $this->_aViewData['allartattr'] = $this->getAttributeList();
00104
00105
00106 $this->_aViewData['pageNavigation'] = $this->getPageNavigation();
00107
00108 $this->_aViewData['pgNr'] = $this->getActPage();
00109
00110
00111 $this->_aViewData['similarrecommlist'] = $this->getSimilarRecommLists();
00112
00113
00114 $this->_aViewData['iordersmade'] = $this->getOrderCnt();
00115
00116
00117 $this->_loadActions();
00118
00119 return $this->_sThisTemplate;
00120 }
00121
00127 public function moveLeft()
00128 {
00129 if ( $aItems = $this->getCompareItems() ) {
00130 $sArticleId = oxConfig::getParameter( 'aid' );
00131 $sPrevArticleId = null;
00132
00133 $blFound = false;
00134 foreach ( $aItems as $sOxid => $sVal ) {
00135 if ( $sOxid == $sArticleId ) {
00136 $blFound = true;
00137 }
00138 if ( !$blFound ) {
00139 $sPrevArticleId = $sOxid;
00140 }
00141 }
00142
00143 if ( $sPrevArticleId ) {
00144
00145 $aNewItems = array();
00146 foreach ( $aItems as $sOxid => $sVal ) {
00147 if ( $sOxid == $sPrevArticleId ) {
00148 $aNewItems[$sArticleId] = true;
00149 } elseif ( $sOxid == $sArticleId ) {
00150 $aNewItems[$sPrevArticleId] = true;
00151 } else {
00152 $aNewItems[$sOxid] = true;
00153 }
00154 }
00155
00156 $this->setCompareItems($aNewItems);
00157 }
00158 }
00159 }
00160
00166 public function moveRight()
00167 {
00168 if ( $aItems = $this->getCompareItems() ) {
00169 $sArticleId = oxConfig::getParameter( 'aid' );
00170 $sNextArticleId = 0;
00171
00172 $blFound = false;
00173 foreach ( $aItems as $sOxid => $sVal ) {
00174 if ( $blFound ) {
00175 $sNextArticleId = $sOxid;
00176 $blFound = false;
00177 }
00178 if ( $sOxid == $sArticleId ) {
00179 $blFound = true;
00180 }
00181 }
00182
00183 if ( $sNextArticleId ) {
00184
00185 $aNewItems = array();
00186 foreach ( $aItems as $sOxid => $sVal ) {
00187 if ( $sOxid == $sArticleId ) {
00188 $aNewItems[$sNextArticleId] = true;
00189 } elseif ( $sOxid == $sNextArticleId ) {
00190 $aNewItems[$sArticleId] = true;
00191 } else {
00192 $aNewItems[$sOxid] = true;
00193 }
00194 }
00195 $this->setCompareItems($aNewItems);
00196 }
00197 }
00198 }
00199
00205 public function inPopup()
00206 {
00207 $this->_sThisTemplate = 'compare_popup.tpl';
00208 $this->_iArticlesPerPage = -1;
00209 }
00210
00216 public function getCompareItemsCnt()
00217 {
00218 if ( $this->_iCompItemsCnt === null ) {
00219 $this->_iCompItemsCnt = 0;
00220 if ( $aItems = $this->getCompareItems() ) {
00221 $this->_iCompItemsCnt = count( $aItems );
00222 }
00223 }
00224 return $this->_iCompItemsCnt;
00225 }
00226
00232 public function getCompareItems()
00233 {
00234 if ( $this->_aCompItems === null ) {
00235 $aItems = oxConfig::getParameter( 'aFiltcompproducts' );
00236 if ( is_array( $aItems ) && count( $aItems ) ) {
00237 $this->_aCompItems = $aItems;
00238 }
00239 }
00240 return $this->_aCompItems;
00241 }
00242
00250 public function setCompareItems( $aItems)
00251 {
00252 $this->_aCompItems = $aItems;
00253 oxSession::setVar( 'aFiltcompproducts', $aItems );
00254 }
00255
00262 public function getCompArtList()
00263 {
00264 if ( $this->_oArtList === null ) {
00265 if ( $aItems = $this->getCompareItems()) {
00266
00267 $oList = oxNew( 'oxarticlelist' );
00268 $oList->loadIds( array_keys( $aItems ) );
00269 $this->_iCntPages = round( $oList->count() / $this->_iArticlesPerPage + 0.49 );
00270
00271
00272 if ( $this->_iArticlesPerPage > 0 ) {
00273 $aItems = $this->_removeArticlesFromPage( $aItems, $oList );
00274 }
00275 $this->_oArtList = $this->_changeArtListOrder( $aItems, $oList );
00276 }
00277 }
00278 return $this->_oArtList;
00279 }
00280
00286 public function getAttributeList()
00287 {
00288 if ( $this->_oAttributeList === null ) {
00289 $this->_oAttributeList = false;
00290 if ( $oArtList = $this->getCompArtList()) {
00291 $oAttributeList = oxNew( 'oxattributelist' );
00292 $this->_oAttributeList = $oAttributeList->loadAttributesByIds( array_keys( $oArtList ) );
00293 }
00294 }
00295 return $this->_oAttributeList;
00296 }
00297
00303 public function getSimilarRecommLists()
00304 {
00305 if (!$this->getViewConfig()->getShowListmania()) {
00306 return false;
00307 }
00308
00309 if ( $this->_oRecommList === null ) {
00310 $this->_oRecommList = false;
00311 if ( $oArtList = $this->getCompArtList()) {
00312 $this->_oRecommList = oxNew('oxrecommlist');
00313 $this->_oRecommList = $this->_oRecommList->getRecommListsByIds( array_keys( $oArtList ));
00314 }
00315 }
00316 return $this->_oRecommList;
00317 }
00318
00324 public function getPageNavigation()
00325 {
00326 if ( $this->_oPageNavigation === null ) {
00327 $this->_oPageNavigation = false;
00328 $this->_oPageNavigation = $this->generatePageNavigation();
00329 }
00330 return $this->_oPageNavigation;
00331 }
00332
00341 protected function _removeArticlesFromPage( $aItems, $oList )
00342 {
00343
00344
00345 $aListKeys = $oList->arrayKeys();
00346 $aItemKeys = array_keys($aItems);
00347 $aKeys = array_intersect( $aItemKeys, $aListKeys );
00348 $aNewItems = array();
00349 $iActPage = $this->getActPage();
00350 for ( $i = $this->_iArticlesPerPage * $iActPage; $i < $this->_iArticlesPerPage * $iActPage + $this->_iArticlesPerPage; $i++ ) {
00351 if ( !isset($aKeys[$i])) {
00352 break;
00353 }
00354 $aNewItems[$aKeys[$i]] = & $aItems[$aKeys[$i]];
00355 }
00356 return $aNewItems;
00357 }
00358
00367 protected function _changeArtListOrder( $aItems, $oList )
00368 {
00369
00370 $oNewList = array();
00371 $iCnt = 0;
00372 $iActPage = $this->getActPage();
00373 foreach ( $aItems as $sOxid => $sVal ) {
00374 $iCnt++;
00375 $oNewList[$sOxid] = $oList[$sOxid];
00376
00377
00378 $oNewList[$sOxid]->hidePrev = false;
00379 if ( $iActPage == 0 && $iCnt==1 ) {
00380 $oNewList[$sOxid]->hidePrev = true;
00381 }
00382
00383
00384 $oNewList[$sOxid]->hideNext = false;
00385 if ( ( $iActPage + 1 ) == $this->_iCntPages && $iCnt == count( $aItems ) ) {
00386 $oNewList[$sOxid]->hideNext = true;
00387 }
00388 }
00389 return $oNewList;
00390 }
00391
00397 public function getOrderCnt()
00398 {
00399 if ( $this->_iOrderCnt === null ) {
00400 $this->_iOrderCnt = 0;
00401 if ( $oUser = $this->getUser() ) {
00402 $this->_iOrderCnt = $oUser->getOrderCount();
00403 }
00404 }
00405 return $this->_iOrderCnt;
00406 }
00407
00408 }