mmkulikov 14 Жалоба Опубликовано: August 20, 2015 Как узнать количество объявлений в категории, зная 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. А как можно задать параметры, что-бы отбор был, например, только за сегодня, только за последнюю неделю ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TopRaN 235 Жалоба Опубликовано: August 20, 2015 как один из вариантов для шаблона 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; } } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mmkulikov 14 Жалоба Опубликовано: August 21, 2015 как один из вариантов для шаблона realia (выводит для дочерних элементов в меню количество объектов)Внимательно просмотрел код и не увидел где именно выводится количество объектовОбычное рекурсивное построение меню...Можете мне весь main.php сбросить? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mmkulikov 14 Жалоба Опубликовано: August 21, 2015 Нашел решение. Может кому еще сгодится /*** Получение количества объявлений* @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; } 3 Дмитрий Кондин, abushyk и h-i reacted to this Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
doma 22 Жалоба Опубликовано: June 20, 2017 В 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 или использовать вместо конкретной даты, какую то формируемую выборку типа за сегодня- за вчера- за неделю- за месяц Было бы удобно пользователям. Простой пример пользователь посмотрел на сайте объявление и убежал, спустя некоторое время вернулся и не может вспомнить когда смотрел, а нажав такую ссылку сможет вспомнить например смотрел за последнюю неделю - опс и нашел Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: June 21, 2017 Что бі получить отбор объектов за какие-то сроки, нужно передать в конструктор списка параметр srch_date_to в виде YYYY-MM-DD которій укажет крайнюю дату отбора (дата джобавления меньше YYYY-MM-DD). Сеточник обработает его и отдаст данные. Но параметр с таким именем сам не перехватывается из запроса и не отправляется в сеточник. Так что получить его из запроса и отдать по цепочке далее нужно уже самому. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
doma 22 Жалоба Опубликовано: June 21, 2017 15 минут назад, abushyk сказал: Что бі получить отбор объектов за какие-то сроки, нужно передать в конструктор списка параметр srch_date_to в виде YYYY-MM-DD которій укажет крайнюю дату отбора (дата джобавления меньше YYYY-MM-DD). Сеточник обработает его и отдаст данные. Но параметр с таким именем сам не перехватывается из запроса и не отправляется в сеточник. Так что получить его из запроса и отдать по цепочке далее нужно уже самому. тут наверное мы не совсем правильно выразились. тут нужно не из категорий -а просто в виде ссылок, типа все объявления за сегодня (попадут и продажа и аренда и гаражи) :)) главное как то грамотно обработать это чтобы были ссылки 1) за сегодня - это проще так как 1 дата 2) за сегодня и вчера - сложнее так как 2 даты 3) за последнюю неделю еще сложнее так как период 4) за последний месяц и то же сложно -так как период Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах