vetalysd

REALIA и др. подсчет количества объявлений в категории

Recommended Posts

Выборка меню реалии выглядит так

 

 

$additional_menu=array();
$stmt=$DBC->query('SELECT name, url FROM '.DB_PREFIX.'_menu_structure WHERE menu_id=(SELECT menu_id FROM '.DB_PREFIX.'_menu WHERE tag=? LIMIT 1) ORDER BY sort_order ASC', array('navigation_menu'));
if($stmt){
while($ar=$DBC->fetch($stmt)){
$additional_menu[]=$ar;
}
}

 

 

Как правильно добавить в массив выборку количества объявлений в каждой категории????

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть два подхода.

 

1. Быстрый\статистический

SELECT d.topic_id, COUNT(d.id) AS advcount, t.name FROM re_data d LEFT JOIN re_topic t ON t.id=d.topic_id GROUP BY d.topic_id

плюсы:

- все делается одним запросом, пусть и не легким

минусы:

- в выборке оказываются только категории у которых более нуля объявлений

- результирующая выборка линейна, т.е. не учитывает вложенности

 

Идеально подходит для одноуровневой системы категорий

 

2. Комплексный.

Невозможно реализовать одним запросом. Для этого потребуется несколько запросов и пхп обработка.

 

плюсы:

- можно использовать иерархию структуры и подсчитать количества с учетом вложенных подкатегорий

минусы:

- громоздкий и потребуется выносить его в отдельную функцию

 

Конкретная реализация этого способа зависит от конкретных условий, поэтому привести примерные запросы сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В данном конкретном примере категории недвижимости вообще не фигурируют - тут просто формируется набор пунктов меню из модуля Меню. А они к недвиге не имеют прямого отношения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как я понял ответственная за вывод меню категорий функция getTemplateMenu() ???

 

а дальше куда копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1

/template/frontend/realia/main/main.php

private function getTemplateMenu($menues=array()){

после 

$structure=$SM->loadCategoryStructure();

добавляем

$data_structure=$SM->load_data_structure(0, array('active'=>1));
foreach($structure['catalog'] as $cat_point){
$ch=0;$SM->getChildsItemsCount($cat_point['id'], $structure['childs'], $data_structure['data'][0], $ch);$data_structure['data'][0][$cat_point['id']]+=$ch;
}foreach ($structure['catalog'] as $k=>$v){
if(isset($data_structure['data'][0][$v['id']])){$structure['catalog'][$k]['_cnt']=$data_structure['data'][0][$v['id']];
}
else
{
$structure['catalog'][$k]['_cnt']=0;
}
}

2

/template/frontend/realia/main/realia_menu_decorator.php

 

private static function buildMenu($category_structure){

после 

...} else {$name = $category_structure['catalog'][$categoryID]['name'];}

добавляем

if(isset($category_structure['catalog'][$categoryID]['_cnt'])){$name=$name.' ('.$category_structure['catalog'][$categoryID]['_cnt'].')';}
3
/template/frontend/realia/main/realia_menu_decorator.php
private static function buildChildNodes(...)
 

после 

...} else {$name = $category_structure['catalog'][$child_id]['name'];}

добавляем

if(isset($category_structure['catalog'][$child_id]['_cnt'])){$name=$name.' ('.$category_structure['catalog'][$child_id]['_cnt'].')';}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну если каждый пользователь делал вопрос отдельно, оформлял согласно правилам, то увидел бы что данный вопрос уже обсуждался в теме шаблона реалиа.

P.S просто всем лень внимательно посмотреть. Проще заново вопрос задать!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

abushyk  вовек не забуду))

 

Главное не забудьте там предусмотреть кеширование готовой менюшки хотя бы через сессию - иначе тормоза гарантирую.)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: axilec
      Добрый день! Не подскажете, как можно добавить ссылку или кнопку в описании к объекту недвижимости? Спасибо!
    • Автор: Opossum_Shultz
      Добрый день! подскажите, в шаблоне реалиа не реализовано каким - нибудь css или чем - нибудь развертывание и свертывание текста (например, для описаний ЖК)?
      Ну типа спойлер.
       
    • Автор: metrpro
      Добрый день! Шаблон realia, стоит необходимость изменить оформление добавления/убавления из списка "Избранное".
      Нынешнее решение выглядит следующим образом:
      {if isset($smarty.session.favorites)} {if in_array($data.id.value, $smarty.session.favorites)}<a class="fav-rem" alt="{$data.id.value}" title="{$L_DELETEFROMFAVORITES}" href="#remove_from_favorites"></a> {else}<a class="fav-add" alt="{$data.id.value}" title="{$L_ADDTOFAVORITES}" href="#add_to_favorites"></a> {/if} {else}<a class="fav-add" alt="{$data.id.value}" title="{$L_ADDTOFAVORITES}" href="#add_to_favorites"></a> {/if} А мне бы хотелось уйти от картинок, предусмотренных стилем, чтобы выглядеть это стало как обычная кнопка, типа тех, что вызывают в шаблоне модальные окна.
      Буду рад, если кто сможет поделиться подобными наработками (у меня не вышло)
       
    • Автор: IgorGavr
      В списках объектах есть строчка:
      <div class="property span9{if $grid_items.bold_status==1} grid_list_bold{/if}{if $grid_items.premium_status==1} grid_list_premium{/if}{if $grid_items.vip_status==1} grid_list_vip{/if}">
      Но в независимости выбрано выделение или премиум объявление, проверка не проходит. Как мы можем брать деньги если никаких выделений не происходит после оплаты?
    • Автор: metrpro
      В таблицу STREET, содержащую список улиц и по умолчанию имеющую поля STREET_ID, CITY_ID и NAME, добавлено поле DISTRICT_ID (типа select_by_query), которое позволяет четко каждой улице определить район, к которому она относится, из таблицы DISTRICT_ID.
      Внимание, вопрос №1: как передать текстовое значение поля district_id в шаблоны realty_view и realty_grid (realia)?

      В таблице DISTRICT добавлено поле OKRUG типа safe_string. Вопрос №2 - как его значение тоже передать в те же шаблоны?

      И, наконец, вопрос №3 - как организовать поиск всех объявлений определенного типа в рамках улиц, расположенных в определенном районе или определенном округе?