34 if (!isset($iLanguage)) {
37 $this->_iLanguage = $iLanguage;
52 public function getSearchArticles($sSearchParamForQuery =
false, $sInitialSearchCat =
false, $sInitialSearchVendor =
false, $sInitialSearchManufacturer =
false, $sSortBy =
false)
56 $this->iActPage = ($this->iActPage < 0) ? 0 : $this->iActPage;
60 $iNrofCatArticles = $this->
getConfig()->getConfigParam(
'iNrofCatArticles');
61 $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 10;
63 $oArtList =
oxNew(
'oxarticlelist');
64 $oArtList->setSqlLimit($iNrofCatArticles * $this->iActPage, $iNrofCatArticles);
66 $sSelect = $this->
_getSearchSelect($sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer, $sSortBy);
68 $oArtList->selectString($sSelect);
84 public function getSearchArticleCount($sSearchParamForQuery =
false, $sInitialSearchCat =
false, $sInitialSearchVendor =
false, $sInitialSearchManufacturer =
false)
87 $sSelect = $this->
_getSearchSelect($sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer,
false);
90 $sPartial = substr($sSelect, strpos($sSelect,
' from '));
91 $sSelect =
"select count( " . getViewName(
'oxarticles', $this->_iLanguage) .
".oxid ) $sPartial ";
110 protected function _getSearchSelect($sSearchParamForQuery =
false, $sInitialSearchCat =
false, $sInitialSearchVendor =
false, $sInitialSearchManufacturer =
false, $sSortBy =
false)
115 if ($sInitialSearchCat) {
117 $oCategory =
oxNew(
'oxcategory');
118 $sCatTable = $oCategory->getViewName();
120 $sQ =
"select 1 from $sCatTable where $sCatTable.oxid = " . $oDb->quote($sInitialSearchCat) .
" ";
121 $sQ .=
"and " . $oCategory->getSqlActiveSnippet();
122 if (!$oDb->getOne($sQ)) {
128 if ($sInitialSearchVendor) {
130 $oVendor =
oxNew(
'oxvendor');
131 $sVndTable = $oVendor->getViewName();
133 $sQ =
"select 1 from $sVndTable where $sVndTable.oxid = " . $oDb->quote($sInitialSearchVendor) .
" ";
134 $sQ .=
"and " . $oVendor->getSqlActiveSnippet();
135 if (!$oDb->getOne($sQ)) {
141 if ($sInitialSearchManufacturer) {
143 $oManufacturer =
oxNew(
'oxmanufacturer');
144 $sManTable = $oManufacturer->getViewName();
146 $sQ =
"select 1 from $sManTable where $sManTable.oxid = " . $oDb->quote($sInitialSearchManufacturer) .
" ";
147 $sQ .=
"and " . $oManufacturer->getSqlActiveSnippet();
148 if (!$oDb->getOne($sQ)) {
155 if ($sSearchParamForQuery) {
156 $sWhere = $this->
_getWhere($sSearchParamForQuery);
157 } elseif (!$sInitialSearchCat && !$sInitialSearchVendor && !$sInitialSearchManufacturer) {
162 $oArticle =
oxNew(
'oxarticle');
163 $sArticleTable = $oArticle->getViewName();
164 $sO2CView = getViewName(
'oxobject2category');
166 $sSelectFields = $oArticle->getSelectFields();
170 if (is_array($aSearchCols = $this->
getConfig()->getConfigParam(
'aSearchCols'))) {
171 if (in_array(
'oxlongdesc', $aSearchCols) || in_array(
'oxtags', $aSearchCols)) {
172 $sDescView = getViewName(
'oxartextends', $this->_iLanguage);
173 $sDescJoin =
" LEFT JOIN {$sDescView} ON {$sArticleTable}.oxid={$sDescView}.oxid ";
178 $sSelect =
"select {$sSelectFields}, {$sArticleTable}.oxtimestamp from {$sArticleTable} {$sDescJoin} where ";
181 if ($sInitialSearchCat) {
182 $sCatView = getViewName(
'oxcategories', $this->_iLanguage);
183 $sInitialSearchCatQuoted = $oDb->quote($sInitialSearchCat);
184 $sSelectCat =
"select oxid from {$sCatView} where oxid = $sInitialSearchCatQuoted and (oxpricefrom != '0' or oxpriceto != 0)";
185 if ($oDb->getOne($sSelectCat)) {
186 $sSelect =
"select {$sSelectFields}, {$sArticleTable}.oxtimestamp from {$sArticleTable} $sDescJoin " .
187 "where {$sArticleTable}.oxid in ( select {$sArticleTable}.oxid as id from {$sArticleTable}, {$sO2CView} as oxobject2category, {$sCatView} as oxcategories " .
188 "where (oxobject2category.oxcatnid=$sInitialSearchCatQuoted and oxobject2category.oxobjectid={$sArticleTable}.oxid) or (oxcategories.oxid=$sInitialSearchCatQuoted and {$sArticleTable}.oxprice >= oxcategories.oxpricefrom and
189 {$sArticleTable}.oxprice <= oxcategories.oxpriceto )) and ";
191 $sSelect =
"select {$sSelectFields} from {$sO2CView} as
192 oxobject2category, {$sArticleTable} {$sDescJoin} where oxobject2category.oxcatnid=$sInitialSearchCatQuoted and
193 oxobject2category.oxobjectid={$sArticleTable}.oxid and ";
197 $sSelect .= $oArticle->getSqlActiveSnippet();
198 $sSelect .=
" and {$sArticleTable}.oxparentid = '' and {$sArticleTable}.oxissearch = 1 ";
200 if ($sInitialSearchVendor) {
201 $sSelect .=
" and {$sArticleTable}.oxvendorid = " . $oDb->quote($sInitialSearchVendor) .
" ";
204 if ($sInitialSearchManufacturer) {
205 $sSelect .=
" and {$sArticleTable}.oxmanufacturerid = " . $oDb->quote($sInitialSearchManufacturer) .
" ";
211 $sSelect .=
" order by {$sSortBy} ";
229 $sArticleTable = getViewName(
'oxarticles', $this->_iLanguage);
231 $aSearchCols =
$myConfig->getConfigParam(
'aSearchCols');
232 if (!(is_array($aSearchCols) && count($aSearchCols))) {
236 $oTempArticle =
oxNew(
'oxarticle');
237 $sSearchSep =
$myConfig->getConfigParam(
'blSearchUseAND') ?
'and ' :
'or ';
238 $aSearch = explode(
' ', $sSearchString);
239 $sSearch =
' and ( ';
243 foreach ($aSearch as $sSearchString) {
245 if (!strlen($sSearchString)) {
250 $sSearch .= $sSearchSep;
256 foreach ($aSearchCols as $sField) {
263 if ($sField ==
'oxlongdesc' || $sField ==
'oxtags') {
264 $sSearchField = getViewName(
'oxartextends', $this->_iLanguage) .
".{$sField}";
266 $sSearchField =
"{$sArticleTable}.{$sField}";
269 $sSearch .=
" {$sSearchField} like " . $oDb->quote(
"%$sSearchString%");
272 if (($sUml = $myUtilsString->prepareStrForSearch($sSearchString))) {
273 $sSearch .=
" or {$sSearchField} like " . $oDb->quote(
"%$sUml%");