function Search($phrase = "", $nTopCount = 5, $arParams = array(), $bNotFilter = false, $order = "") { $DB = CDatabase::GetModuleConnection('search'); $this->_arPhrase = stemming_split($phrase, LANGUAGE_ID); if(!empty($this->_arPhrase)) { $nTopCount = intval($nTopCount); if($nTopCount <= 0) $nTopCount = 5; $arId = CSearchFullText::GetInstance()->searchTitle($phrase, $this->_arPhrase, $nTopCount, $arParams, $bNotFilter, $order); if (!is_array($arId)) { return $this->searchTitle($phrase, $nTopCount, $arParams, $bNotFilter, $order); } elseif (!empty($arId)) { $strSql = " SELECT sc.ID ,sc.MODULE_ID ,sc.ITEM_ID ,sc.TITLE ,sc.PARAM1 ,sc.PARAM2 ,sc.DATE_CHANGE ,L.DIR ,L.SERVER_NAME ,sc.URL as URL ,scsite.URL as SITE_URL ,scsite.SITE_ID ,if(locate('".$DB->ForSQL(ToUpper($phrase))."', upper(sc.TITLE)) > 0, 1, 0) RANK1 FROM b_search_content sc INNER JOIN b_search_content_site scsite ON sc.ID = scsite.SEARCH_CONTENT_ID INNER JOIN b_lang L ON scsite.SITE_ID = L.LID WHERE sc.ID in (".implode(",", $arId).") and scsite.SITE_ID = '".SITE_ID."' ORDER BY ".( $bOrderByRank? "RANK1 DESC, TITLE": "DATE_CHANGE DESC, RANK1 DESC, TITLE" )." "; $r = $DB->Query($DB->TopSql($strSql, $nTopCount+1)); parent::CDBResult($r); return true; } } else { return false; } }
function Search($phrase = "", $nTopCount = 5, $arParams = array(), $bNotFilter = false, $order = "") { $DB = CDatabase::GetModuleConnection('search'); $this->_arPhrase = stemming_split($phrase, LANGUAGE_ID); if (!empty($this->_arPhrase)) { $nTopCount = intval($nTopCount); if ($nTopCount <= 0) { $nTopCount = 5; } $arId = CSearchFullText::GetInstance()->searchTitle($phrase, $this->_arPhrase, $nTopCount, $arParams, $bNotFilter, $order); if (!is_array($arId)) { return $this->searchTitle($phrase, $nTopCount, $arParams, $bNotFilter, $order); } elseif (!empty($arId)) { $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tsc.ID\n\t\t\t\t\t\t,sc.MODULE_ID\n\t\t\t\t\t\t,sc.ITEM_ID\n\t\t\t\t\t\t,sc.TITLE\n\t\t\t\t\t\t,sc.PARAM1\n\t\t\t\t\t\t,sc.PARAM2\n\t\t\t\t\t\t,sc.DATE_CHANGE\n\t\t\t\t\t\t,L.DIR\n\t\t\t\t\t\t,L.SERVER_NAME\n\t\t\t\t\t\t,sc.URL as URL\n\t\t\t\t\t\t,scsite.URL as SITE_URL\n\t\t\t\t\t\t,scsite.SITE_ID\n\t\t\t\t\t\t," . $this->getRankFunction($phrase) . " RANK1\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_search_content sc\n\t\t\t\t\t\tINNER JOIN b_search_content_site scsite ON sc.ID = scsite.SEARCH_CONTENT_ID\n\t\t\t\t\t\tINNER JOIN b_lang L ON scsite.SITE_ID = L.LID\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tsc.ID in (" . implode(",", $arId) . ")\n\t\t\t\t\t\tand scsite.SITE_ID = '" . SITE_ID . "'\n\t\t\t\t\tORDER BY " . $this->getSqlOrder($bOrderByRank) . "\n\t\t\t\t"; $r = $DB->Query($DB->TopSql($strSql, $nTopCount + 1)); parent::CDBResult($r); return true; } } else { return false; } }
function Search($phrase = "", $nTopCount = 5, $arParams = array(), $bNotFilter = false, $order = "") { $DB = CDatabase::GetModuleConnection('search'); $this->_arPhrase = stemming_split($phrase, LANGUAGE_ID); $bOrderByRank = $order == "rank"; if (!empty($this->_arPhrase)) { $nTopCount = intval($nTopCount); if ($nTopCount <= 0) { $nTopCount = 5; } $sqlHaving = array(); $sqlWords = array(); foreach (array_reverse($this->_arPhrase, true) as $word => $pos) { if (empty($sqlWords) && !preg_match("/[\\n\\r \\t]\$/", $phrase)) { $s = $sqlWords[] = "ct.WORD like '" . $DB->ForSQL($word) . "%'"; } else { $s = $sqlWords[] = "ct.WORD = '" . $DB->ForSQL($word) . "'"; } $sqlHaving[] = "(sum(" . $s . ") > 0)"; } $bIncSites = false; $strSqlWhere = CSearch::__PrepareFilter($arParams, $bIncSites); if ($bNotFilter) { if (!empty($strSqlWhere)) { $strSqlWhere = "NOT (" . $strSqlWhere . ")"; } else { $strSqlWhere = "1=0"; } } $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tsc.ID\n\t\t\t\t\t,sc.MODULE_ID\n\t\t\t\t\t,sc.ITEM_ID\n\t\t\t\t\t,sc.TITLE\n\t\t\t\t\t,sc.PARAM1\n\t\t\t\t\t,sc.PARAM2\n\t\t\t\t\t,sc.DATE_CHANGE\n\t\t\t\t\t,L.DIR\n\t\t\t\t\t,L.SERVER_NAME\n\t\t\t\t\t,sc.URL as URL\n\t\t\t\t\t,scsite.URL as SITE_URL\n\t\t\t\t\t,scsite.SITE_ID\n\t\t\t\t\t,if(locate('" . $DB->ForSQL(ToUpper($phrase)) . "', upper(sc.TITLE)) > 0, 1, 0) RANK1\n\t\t\t\t\t,count(1) RANK2\n\t\t\t\t\t,min(ct.POS) RANK3\n\t\t\t\tFROM\n\t\t\t\t\tb_search_content_title ct\n\t\t\t\t\tINNER JOIN b_lang L ON ct.SITE_ID = L.LID\n\t\t\t\t\tinner join b_search_content sc on sc.ID = ct.SEARCH_CONTENT_ID\n\t\t\t\t\tINNER JOIN b_search_content_site scsite ON sc.ID = scsite.SEARCH_CONTENT_ID and ct.SITE_ID = scsite.SITE_ID\n\t\t\t\tWHERE\n\t\t\t\t\t" . CSearch::CheckPermissions("sc.ID") . "\n\t\t\t\t\tAND ct.SITE_ID = '" . SITE_ID . "'\n\t\t\t\t\tAND (" . implode(" OR ", $sqlWords) . ")\n\t\t\t\t\t" . (!empty($strSqlWhere) ? "AND " . $strSqlWhere : "") . "\n\t\t\t\tGROUP BY\n\t\t\t\t\tID, MODULE_ID, ITEM_ID, TITLE, PARAM1, PARAM2, DATE_CHANGE, DIR, SERVER_NAME, URL, SITE_URL, SITE_ID\n\t\t\t\t" . (count($sqlHaving) > 1 ? "HAVING " . implode(" AND ", $sqlHaving) : "") . "\n\t\t\t\tORDER BY " . ($bOrderByRank ? "RANK1 DESC, RANK2 DESC, RANK3 ASC, TITLE" : "DATE_CHANGE DESC, RANK1 DESC, RANK2 DESC, RANK3 ASC, TITLE") . "\n\t\t\t\tLIMIT 0, " . ($nTopCount + 1) . "\n\t\t\t"; $r = $DB->Query($strSql); parent::CDBResult($r); return true; } else { return false; } }
$adminPage->Init(); //$adminMenu->AddOpenedSections("global_menu_content, global_menu_services, global_menu_store, global_menu_statistics, global_menu_settings"); $adminMenu->Init($adminPage->aModules); $arResult = array("CATEGORIES"=>array( "global_menu_content"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_content')), "global_menu_services"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_services')), "global_menu_store"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_store')), "global_menu_statistics"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_stat')), "global_menu_settings"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_settings')), ) ); $arStemFunc = stemming_init(LANGUAGE_ID); $arPhrase = stemming_split($query, LANGUAGE_ID); $preg_template = "/(^|[^".$arStemFunc["pcre_letters"]."])(".str_replace("/", "\\/", implode("|", array_map('preg_quote', array_keys($arPhrase)))).")/i".FX_UTF_PCRE_MODIFIER; $bFound = false; function GetStrings(&$item, $key, $p) { $category = $p[0]; $icon = $p[1]; global $arStemFunc, $arPhrase, $preg_template, $arResult, $bFound; $searchstring = ''; if($item["text"]) { if(preg_match_all($preg_template, ToUpper($item["text"]), $arMatches, PREG_OFFSET_CAPTURE)) { $c = count($arMatches[2]);
function IndexTitle($arLID, $ID, $sTitle) { $DB = CDatabase::GetModuleConnection('search'); static $CACHE_SITE_LANGS = array(); $ID = intval($ID); $arLang = array(); if (!is_array($arLID)) { $arLID = array(); } foreach ($arLID as $site => $url) { $sql_site = $DB->ForSql($site); if (!array_key_exists($site, $CACHE_SITE_LANGS)) { $db_site_tmp = CSite::GetByID($site); if ($ar_site_tmp = $db_site_tmp->Fetch()) { $CACHE_SITE_LANGS[$site] = array("LANGUAGE_ID" => $ar_site_tmp["LANGUAGE_ID"], "CHARSET" => $ar_site_tmp["CHARSET"], "SERVER_NAME" => $ar_site_tmp["SERVER_NAME"]); } else { $CACHE_SITE_LANGS[$site] = false; } } if (is_array($CACHE_SITE_LANGS[$site])) { $lang = $CACHE_SITE_LANGS[$site]["LANGUAGE_ID"]; $arTitle = stemming_split($sTitle, $lang); if (!empty($arTitle)) { $maxValuesLen = 2048; $strSqlPrefix = "\n\t\t\t\t\t\t\tinsert ignore into b_search_content_title\n\t\t\t\t\t\t\t(SEARCH_CONTENT_ID, SITE_ID, WORD, POS)\n\t\t\t\t\t\t\tvalues\n\t\t\t\t\t"; $strSqlValues = ""; $strSqlSuffix = ""; foreach ($arTitle as $word => $pos) { $strSqlValues .= ",\n(" . $ID . ", '" . $sql_site . "', '" . $DB->ForSql($word) . "', " . $pos . ")"; if (strlen($strSqlValues) > $maxValuesLen) { $DB->Query($strSqlPrefix . substr($strSqlValues, 2), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSqlValues = ""; } } if (strlen($strSqlValues) > 0) { $DB->Query($strSqlPrefix . substr($strSqlValues, 2), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSqlValues = ""; } } } } }
) && CModule::IncludeModule("search") ) { CUtil::decodeURIComponent($query); $arResult["alt_query"] = ""; if($arParams["USE_LANGUAGE_GUESS"] !== "N") { $arLang = CSearchLanguage::GuessLanguage($query); if(is_array($arLang) && $arLang["from"] != $arLang["to"]) $arResult["alt_query"] = CSearchLanguage::ConvertKeyboardLayout($query, $arLang["from"], $arLang["to"]); } $arResult["query"] = $query; $arResult["phrase"] = stemming_split($query, LANGUAGE_ID); $arParams["NUM_CATEGORIES"] = intval($arParams["NUM_CATEGORIES"]); if($arParams["NUM_CATEGORIES"] <= 0) $arParams["NUM_CATEGORIES"] = 1; $arParams["TOP_COUNT"] = intval($arParams["TOP_COUNT"]); if($arParams["TOP_COUNT"] <= 0) $arParams["TOP_COUNT"] = 5; $arOthersFilter = array("LOGIC"=>"OR"); for($i = 0; $i < $arParams["NUM_CATEGORIES"]; $i++) { $category_title = trim($arParams["CATEGORY_".$i."_TITLE"]); if(empty($category_title))