00001 <?php
00002
00007 class Search extends oxUBase
00008 {
00013 protected $_iAllArtCnt = 0;
00014
00019 protected $_iCntPages = null;
00020
00025 protected $_sThisTemplate = 'search.tpl';
00026
00031 protected $_sListType = 'search';
00032
00037 protected $_blShowSorting = true;
00038
00043 protected $_blEmptySearch = null;
00044
00049 protected $_oRecommList = null;
00050
00055 protected $_sSearchParamForHtml = null;
00056
00061 protected $_sSearchParam = null;
00062
00067 protected $_sSearchCatId = null;
00068
00073 protected $_sSearchVendor = null;
00074
00079 protected $_sSearchManufacturer = null;
00080
00085 protected $_blSearchClass = null;
00086
00091 protected $_oPageNavigation = null;
00092
00098 protected $_iViewIndexState = VIEW_INDEXSTATE_NOINDEXNOFOLLOW;
00099
00114 public function init()
00115 {
00116 if ( oxUtils::getInstance()->seoIsActive() ) {
00117
00118 $this->setSessionCategoryId( null );
00119 }
00120
00121 parent::init();
00122
00123 $myConfig = $this->getConfig();
00124
00125
00126 $sSearchParamForQuery = oxConfig::getParameter( 'searchparam', true );
00127
00128
00129 $sInitialSearchCat = $this->_sSearchCatId = rawurldecode( oxConfig::getParameter( 'searchcnid' ) );
00130
00131
00132 $sInitialSearchVendor = $this->_sSearchVendor = rawurldecode( oxConfig::getParameter( 'searchvendor' ) );
00133
00134
00135 $sInitialSearchManufacturer = $this->_sSearchManufacturer = rawurldecode( oxConfig::getParameter( 'searchmanufacturer' ) );
00136
00137 $this->_blEmptySearch = false;
00138 if ( !$sSearchParamForQuery && !$sInitialSearchCat && !$sInitialSearchVendor && !$sInitialSearchManufacturer ) {
00139
00140 $this->_aArticleList = null;
00141 $this->_blEmptySearch = true;
00142 return false;
00143 }
00144
00145
00146 if ( !$myConfig->getConfigParam( 'bl_perfLoadVendorTree' ) ) {
00147 $sInitialSearchVendor = null;
00148 }
00149
00150
00151 if ( !$myConfig->getConfigParam( 'bl_perfLoadManufacturerTree' ) ) {
00152 $sInitialSearchManufacturer = null;
00153 }
00154
00155
00156 $oSearchHandler = oxNew( 'oxsearch' );
00157 $oSearchList = $oSearchHandler->getSearchArticles( $sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer, $this->getSortingSql( 'oxsearch' ) );
00158
00159
00160 $this->_aArticleList = $oSearchList;
00161 $this->_iAllArtCnt = 0;
00162
00163
00164 if ( $oSearchList->count() ) {
00165 $this->_iAllArtCnt = $oSearchHandler->getSearchArticleCount( $sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer );
00166 }
00167
00168 $iNrofCatArticles = (int) $myConfig->getConfigParam( 'iNrofCatArticles' );
00169 $iNrofCatArticles = $iNrofCatArticles?$iNrofCatArticles:1;
00170 $this->_iCntPages = round( $this->_iAllArtCnt / $iNrofCatArticles + 0.49 );
00171 }
00172
00186 public function render()
00187 {
00188 $this->_aViewData['emptysearch'] = $this->isEmptySearch();
00189
00190 $this->_aViewData['articlelist'] = $this->getArticleList();
00191
00192 $this->_aViewData['similarrecommlist'] = $this->getSimilarRecommLists();
00193
00194 $this->_aViewData['searchparamforhtml'] = $this->getSearchParamForHtml();
00195 $this->_aViewData['searchparam'] = $this->getSearchParam();
00196 $this->_aViewData['searchcnid'] = $this->getSearchCatId();
00197 $this->_aViewData['searchvendor'] = $this->getSearchVendor();
00198 $this->_aViewData['searchmanufacturer'] = $this->getSearchManufacturer();
00199
00200 $this->_aViewData['pageNavigation'] = $this->getPageNavigation();
00201 $this->_aViewData['actCategory'] = $this->getActiveCategory();
00202
00203 parent::render();
00204
00205 $myConfig = $this->getConfig();
00206 if ( is_array( $myConfig->getConfigParam( 'aRssSelected' ) ) && in_array( 'oxrss_search', $myConfig->getConfigParam( 'aRssSelected' ) ) ) {
00207 $oRss = oxNew('oxrssfeed');
00208 $sSearch = oxConfig::getParameter( 'searchparam', true );
00209 $sCnid = oxConfig::getParameter( 'searchcnid', true );
00210 $sVendor = oxConfig::getParameter( 'searchvendor', true );
00211 $sManufacturer = oxConfig::getParameter( 'searchmanufacturer', true );
00212 $this->addRssFeed($oRss->getSearchArticlesTitle($sSearch, $sCnid, $sVendor, $sManufacturer), $oRss->getSearchArticlesUrl($sSearch, $sCnid, $sVendor, $sManufacturer), 'searchArticles');
00213 }
00214
00215
00216 $this->_processListArticles();
00217
00218 return $this->_sThisTemplate;
00219 }
00220
00226 public function getAddUrlParams()
00227 {
00228 $sAddParams = parent::getAddUrlParams();
00229 $sAddParams .= ($sAddParams?'&':'') . "listtype={$this->_sListType}";
00230
00231 if ( $sParam = oxConfig::getParameter( 'searchparam', true ) ) {
00232 $sAddParams .= "&searchparam=".rawurlencode($sParam);
00233 }
00234
00235 if ( $sParam = oxConfig::getParameter( 'searchcnid' ) ) {
00236 $sAddParams .= "&searchcnid=$sParam";
00237 }
00238
00239 if ( $sParam = rawurldecode( oxConfig::getParameter( 'searchvendor' ) ) ) {
00240 $sAddParams .= "&searchvendor=$sParam";
00241 }
00242
00243 if ( $sParam = rawurldecode( oxConfig::getParameter( 'searchmanufacturer' ) ) ) {
00244 $sAddParams .= "&searchmanufacturer=$sParam";
00245 }
00246 return $sAddParams;
00247 }
00248
00258 public function setItemSorting( $sCnid, $sSortBy, $sSortOrder = null )
00259 {
00260 parent::setItemSorting( "oxsearch", $sSortBy, $sSortOrder );
00261 }
00262
00270 public function getSorting( $sCnid )
00271 {
00272 return parent::getSorting( "oxsearch" );
00273 }
00274
00280 protected function _isSearchClass()
00281 {
00282 if ( $this->_blSearchClass === null ) {
00283 $this->_blSearchClass = false;
00284 if ( strtolower(oxConfig::getParameter( 'cl' )) == 'search' ) {
00285 $this->_blSearchClass = true;
00286 }
00287 }
00288 return $this->_blSearchClass;
00289 }
00295 public function isEmptySearch()
00296 {
00297 return $this->_blEmptySearch;
00298 }
00299
00305 public function getArticleList()
00306 {
00307 return $this->_aArticleList;
00308 }
00309
00315 public function getSimilarRecommLists()
00316 {
00317 if ( $this->_oRecommList === null ) {
00318 $this->_oRecommList = false;
00319 $aList = $this->getArticleList();
00320 if ( $aList && $aList->count() > 0 ) {
00321
00322 $oRecommList = oxNew('oxrecommlist');
00323 $this->_oRecommList = $oRecommList->getRecommListsByIds( $aList->arrayKeys());
00324 }
00325 }
00326 return $this->_oRecommList;
00327 }
00328
00334 public function getSearchParamForHtml()
00335 {
00336 if ( $this->_sSearchParamForHtml === null ) {
00337 $this->_sSearchParamForHtml = false;
00338 if ( $this->_isSearchClass() ) {
00339 $this->_sSearchParamForHtml = oxConfig::getParameter( 'searchparam' );
00340 }
00341 }
00342 return $this->_sSearchParamForHtml;
00343 }
00344
00350 public function getSearchParam()
00351 {
00352 if ( $this->_sSearchParam === null ) {
00353 $this->_sSearchParam = false;
00354 if ( $this->_isSearchClass() ) {
00355 $this->_sSearchParam = rawurlencode( oxConfig::getParameter( 'searchparam', true ) );
00356 }
00357 }
00358 return $this->_sSearchParam;
00359 }
00360
00366 public function getSearchCatId()
00367 {
00368 if ( $this->_sSearchCatId === null ) {
00369 $this->_sSearchCatId = false;
00370 if ( $this->_isSearchClass() ) {
00371 $this->_sSearchCatId = rawurldecode( oxConfig::getParameter( 'searchcnid' ) );
00372 }
00373 }
00374 return $this->_sSearchCatId;
00375 }
00376
00382 public function getSearchVendor()
00383 {
00384 if ( $this->_sSearchVendor === null ) {
00385 $this->_sSearchVendor = false;
00386 if ( $this->_isSearchClass() ) {
00387
00388 $this->_sSearchVendor = rawurldecode( oxConfig::getParameter( 'searchvendor' ) );
00389 }
00390 }
00391 return $this->_sSearchVendor;
00392 }
00393
00399 public function getSearchManufacturer()
00400 {
00401 if ( $this->_sSearchManufacturer === null ) {
00402 $this->_sSearchManufacturer = false;
00403 if ( $this->_isSearchClass() ) {
00404
00405 $this->_sSearchManufacturer = rawurldecode( oxConfig::getParameter( 'searchmanufacturer' ) );
00406 }
00407 }
00408 return $this->_sSearchManufacturer;
00409 }
00410
00416 public function getPageNavigation()
00417 {
00418 if ( $this->_oPageNavigation === null ) {
00419 $this->_oPageNavigation = false;
00420 $this->_oPageNavigation = $this->generatePageNavigation();
00421 }
00422 return $this->_oPageNavigation;
00423 }
00424
00430 public function getActiveCategory()
00431 {
00432 return $this->getActSearch();
00433 }
00434
00435 }