mmkulikov

Количество объявлений в категории

Recommended Posts

Как узнать количество объявлений в категории, зная id категории?

require_once SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/grid/grid_constructor.php';$grid_constructor = new Grid_Constructor();if ($id !== false) $params['topic_id'] = $id; // $id - требуемой категории$res = $grid_constructor->get_sitebill_adv_ext( $params, false, false );

Я смог только так. Может есть способ проще?

И почему не смотря на указание конкретного ид категории отбор происходит и для него и для родительской категории?

 

P.S.

   А как можно задать параметры, что-бы отбор был, например, только за сегодня, только за последнюю неделю ?

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


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

как один из вариантов для шаблона realia (выводит для дочерних элементов в меню количество объектов)

<?phpclass Realia_Menu_Decorator {		public static function getMenu($category_structure=array()){		return self::buildMenu($category_structure);	}			private static function buildMenu($category_structure){		$rs = '<div id="myslidemenu" class="jqueryslidemenu"><ul>';		foreach ( $category_structure['childs'][0] as $item_id => $categoryID ) {			$hasChilds=false;			if ( count($category_structure['childs'][$categoryID]) > 0 ) {				$hasChilds=true;				$name = $category_structure['catalog'][$categoryID]['name'];			} else {				$name = $category_structure['catalog'][$categoryID]['name'];			}							if($hasChilds){				$li_open='<li class="hasChilds">';			}else{				$li_open='<li>';			}							if($category_structure['catalog'][$categoryID]['url']!=''){				if ( preg_match('/^http/', $category_structure['catalog'][$categoryID]['url']) ) {					$rs .= $li_open.'<a href="'.$category_structure['catalog'][$categoryID]['url'].'">'.$name.'</a>';				} else {					$rs .= $li_open.'<a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$categoryID]['url'].'">'.$name.'</a>';				}			}else{				$rs .= $li_open.'<a href="'.SITEBILL_MAIN_URL.'/topic'.$categoryID.'.html">'.$name.'</a>';			}									$rs .= self::buildChildNodes($categoryID, $category_structure, 0);			$rs .= '</li>';		}		$rs .= '</ul></div>';		return $rs;	}		private static function buildChildNodes($categoryID, $category_structure, $current_category_id) {		if ( !is_array($category_structure['childs'][$categoryID]) ) {			return '';		}			$rs = '<ul>';		foreach ( $category_structure['childs'][$categoryID] as $child_id ) {			$hasChilds=false;			if ( count($category_structure['childs'][$child_id]) > 0 ) {				$hasChilds=true;				$name = $category_structure['catalog'][$child_id]['name'];			} else {				$name = $category_structure['catalog'][$child_id]['name'];			}				if($hasChilds){				$li_open='<li class="hasChilds">';			}else{				$li_open='<li>';			}				if($category_structure['catalog'][$child_id]['url']!=''){				if ( preg_match('/^http/', $category_structure['catalog'][$child_id]['url']) ) {					$rs .= $li_open.'<a href="'.$category_structure['catalog'][$child_id]['url'].'">'.$name.'</a>';				} else {					$rs .= $li_open.'<a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$child_id]['url'].'">'.$name.'</a>';				}			}else{				$rs .= $li_open.'<a href="'.SITEBILL_MAIN_URL.'/topic'.$child_id.'.html">'.$name.'</a>';			}						$rs .= self::buildChildNodes($child_id, $category_structure, 0);			$rs .= '</li>';		}		$rs .= '</ul>';		return $rs;		}	}

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


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

 

как один из вариантов для шаблона realia (выводит для дочерних элементов в меню количество объектов)

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

Обычное рекурсивное построение меню...

Можете мне весь main.php сбросить?

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


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

Нашел решение. Может кому еще сгодится

/*** Получение количества объявлений* @param int $catID - ID категории (необ.)* @param date $start - Дата начала публикаций (необ.)* @param date $end - Дата конца публикаций (необ.)** @return array $ret****/
private static function getAdvtCount($catID=false,$start=false,$end=false) {
$ret = array();
$where = "";
$table = "`".DB_PREFIX."_data`";$DBC=DBC::getInstance();
if (false !== $catID) $where = " AND $table.`topic_id` = $catID";
if (false !== $start && false === $end ) $where .= " AND $table.`date_added` <= '$start'";
if (false === $start && false !== $end ) $where .= " AND $table.`date_added` >= '$end'";
if (false !== $start && false !== $end ) $where .= " AND ($table.`date_added` <= '$start' AND $table.`date_added` >= '$end')";
$query = "SELECT count(*) AS total FROM $table WHERE $table.`active`=1".$where;
$result = $DBC->query($query);
if ($result) {while($r = $DBC->fetch($result)){$ret[] = $r;
}
}
return $ret;
}

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


Ссылка на сообщение
Поделиться на других сайтах
В 20.08.2015 в 19:01, mmkulikov сказал:

Как узнать количество объявлений в категории, зная id категории?


require_once SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/grid/grid_constructor.php';$grid_constructor = new Grid_Constructor();if ($id !== false) $params['topic_id'] = $id; // $id - требуемой категории$res = $grid_constructor->get_sitebill_adv_ext( $params, false, false );

Я смог только так. Может есть способ проще?

И почему не смотря на указание конкретного ид категории отбор происходит и для него и для родительской категории?

 

P.S.

   А как можно задать параметры, что-бы отбор был, например, только за сегодня, только за последнюю неделю ?

 

подскажите а как можно создать ссылки чтобы посмотреть объявления поданные за  - сегодня -вчера-последнюю неделю
возможно использовать какие то ссылки типа
http://sait.ru/?date_added=now
или использовать вместо конкретной даты, какую то формируемую выборку
типа за сегодня- за вчера- за неделю- за месяц

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

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


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

Что бі получить отбор объектов за какие-то сроки, нужно передать в конструктор списка параметр srch_date_to в виде YYYY-MM-DD которій укажет крайнюю дату отбора (дата джобавления меньше YYYY-MM-DD). Сеточник обработает его и отдаст данные.

Но параметр с таким именем сам не перехватывается из запроса и не отправляется в сеточник. Так что получить его из запроса и отдать по цепочке далее нужно уже самому.

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


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, abushyk сказал:

Что бі получить отбор объектов за какие-то сроки, нужно передать в конструктор списка параметр srch_date_to в виде YYYY-MM-DD которій укажет крайнюю дату отбора (дата джобавления меньше YYYY-MM-DD). Сеточник обработает его и отдаст данные.

Но параметр с таким именем сам не перехватывается из запроса и не отправляется в сеточник. Так что получить его из запроса и отдать по цепочке далее нужно уже самому.

тут наверное мы не совсем правильно выразились. тут нужно не из категорий -а просто в виде ссылок, типа все объявления за сегодня (попадут и продажа и аренда и гаражи)  :))
главное как то грамотно обработать это чтобы были ссылки
1) за сегодня - это проще так как 1 дата
2) за сегодня и вчера - сложнее так как 2 даты
3) за последнюю неделю еще сложнее так как период
4) за последний месяц и то же сложно -так как период

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


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

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

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

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

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

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

Войти

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

Войти сейчас