в итоге сделал сортировку с уже найденным результатом... (малый велосипед)
вот возможно пригодиться, либо на новую идею направит, ну или на возможный ошибки укажите ))
\bitrix\components\****\search.page\component.php
кусок кода с основной частью:
Скрытый текст |
---|
Код |
---|
$obSearch = new CSearch();
//When restart option is set we will ignore error on query with only stop words
$obSearch->SetOptions(array(
"ERROR_ON_EMPTY_STEM" => $arParams["RESTART"] != "Y",
"NO_WORD_LOGIC" => $arParams["NO_WORD_LOGIC"] == "Y",
));
$obSearch->Search($arFilter, $aSort, $exFILTER);
$arResult["ERROR_CODE"] = $obSearch->errorno;
$arResult["ERROR_TEXT"] = $obSearch->error;
$arResult["SEARCH"] = array();
// МОЯ СОРТИРОВКА ПО ЦЕНЕ!!!!
function obSearchSortPrice($obSearch,$PAGE_RESULT_COUNT) {
// получаем весь результат
$new_obSearch = $obSearch;
$new_obSearch->NavStart(900000, false);
$arResultAll = array();
// создаем новый массив с полученой ценой товара
foreach ($new_obSearch->arResult as $arRes){
$arRes["PRICE"] = 0;
if ($arRes["PARAM2"] == CATALOG_IBLOCK_ID && CModule::IncludeModule("catalog")){
$arPrice = GetCatalogProductPrice($arRes["ITEM_ID"], PRICE_ID);
$Price = intval($arPrice['PRICE']);
$arRes["PRICE"] = $Price;
}
$arResultAll[] = $arRes;
}
// сортируем наш массив по цене на увеличение
function funSortPrice($a, $b) {
if ($a['PRICE'] === $b['PRICE']) return 0;
return $a['PRICE'] > $b['PRICE'] ? 1 : -1;
}
uasort($arResultAll, 'funSortPrice');
// обнуляем ключи нашего массива
$arResultAll = array_values($arResultAll);
// заменяю выводимый результат
$obSearch->NavStart($PAGE_RESULT_COUNT, false);
foreach ($obSearch->arResult as $key=>$arRes){
$sortKey=$key+($obSearch->NavPageSize*($obSearch->NavPageNomer-1));
$obSearch->arResult[$key] = $arResultAll[$sortKey];
}
return $obSearch;
}
//------------------
if($obSearch->errorno==0)
{
$obSearch->NavStart($arParams["PAGE_RESULT_COUNT"], false);
//----------- сортировка по цене
if ($arResult["REQUEST"]["HOW"] == 'p') $obSearch = obSearchSortPrice($obSearch,$arParams["PAGE_RESULT_COUNT"]);
//------------------------------
$ar = $obSearch->GetNext();
//Search restart
if(!$ar && ($arParams["RESTART"] == "Y") && $obSearch->Query->bStemming)
{
$exFILTER["STEMMING"] = false;
$obSearch = new CSearch();
$obSearch->Search($arFilter, $aSort, $exFILTER);
$arResult["ERROR_CODE"] = $obSearch->errorno;
$arResult["ERROR_TEXT"] = $obSearch->error;
if($obSearch->errorno == 0)
{
//----------- сортировка по цене
if ($arResult["REQUEST"]["HOW"] == 'p') $obSearch = obSearchSortPrice($obSearch,$arParams["PAGE_RESULT_COUNT"]);
//------------------------------
$obSearch->NavStart($arParams["PAGE_RESULT_COUNT"], false);
$ar = $obSearch->GetNext();
}
}
$arReturn = array();
while($ar)
|
|
ну и сам шаблон подправил, чтобы выбрать сортировку можно было...