Страница 1 из 1

Подскажите логику работы блока «Популярные направления»

СообщениеДобавлено: 15 май 2019, 09:29
sdelkadrom
После вывода первых 4-х населенных пунктов, информация в блоке не меняется, несмотря на подачу объявлений в других населенных пунктов, количество объявлений в населенном пункте, а так же количество просмотров. Т.е. блок вывел информацию по четырём населенным пунктам и более никаких изменений не происходит.
Как я понял, выбираются все активные объявления, по ним собирается список городов, к которому они относятся и выводятся эти города в количестве не более 4-х. Кто первым вывелся – тем и «повезло».
Можно ли добавить сортировку по агрегатному запросу, но я, честно говоря, не знаю, где еще используется метод getAllActiveCities и что это может поломать?

Re: Подскажите логику работы блока «Популярные направления»

СообщениеДобавлено: 15 май 2019, 21:02
Xpycm
Здравствуйте.

Полностью согласен с вашим замечанием по работе вывода данного виджета (для меня его работа тоже оставалась загадкой :-))

Как по мне, будет логичным, если в данном виджете вывод будет в зависимости от количества всех объектов в населённом пункте.

Поэтому, откройте файл protected\helpers\common.php и в самый конец файла добавьте:
Код: Выделить всё
function sortArrByValuesCountDesc(array $arr)
{
    
uasort($arr, function ($a$b) { return (array_sum($a) < array_sum($b)) ? : -1; });

    return 
$arr;
}

function 
sortArrByKeysAnotherArrDesc(array $arr, array $orderArr)
{
    
uksort($arr, function($key1$key2) use ($orderArr) {
        return (
array_search($key1$orderArr) > array_search($key2$orderArr));
    });

    return 
$arr;


Затем откройте файл themes\basis\helpers\views\popular_dest_seo.php
До строки:
Код: Выделить всё
<?php foreach ($citiesListResult as $cityId => $cityValue) { ?>

Вставьте:
Код: Выделить всё
<?php
$citiesListResult 
sortArrByKeysAnotherArrDesc($citiesListResultarray_keys(sortArrByValuesCountDesc($countApartmentsByCategories)));
?>