January 2, 20178 yr Подскажите, пожалуйста, существует ли хук, выводящий в боковой блок список тем с такой выборкой: - Из определенных форумов- За определенное время - Фильтр по просмотрам Есть ли такое решение?
January 2, 20178 yr Без фильтра, можно установить любой подходящий хук для вывод тем и задать в нем условия отбора.
January 2, 20178 yr Author Дело в том, что с ходу не смог найти хука для вывода тем, кроме того, что идет в комплекте с форумом (последние темы)...
January 2, 20178 yr Author Нашел хороший польский хук (JW34) Latest Topics in Sidebar (сайт разработчика - http://forum.invisionize.pl/files/file/590-jw34-latest-topics-in-sidebar/), в нем уже есть выборка из нужных форумов. Не подскажите, как в него добавить функцию отбора по времени? Вот сам хук - (JW34) Latest Topics in Sidebar 1.0.1.zip
January 3, 20178 yr Author Есть запрос вывода лучших авторов за определенное время (из хука RAW33 Top Topic Starters - http://ipbskins.ru/forum/topic14669.html ) if( $this->settings['ttS_list'] == 2 ) { $topic_date = time() - (86400 * 1); $this->DB->build( array( 'select' => 'COUNT( t.starter_id ) as topts', 'from' => array( 'topics' => 't' ), 'where' => "t.start_date > '".$topic_date."'" . ( $this->settings['ttS_forums'] ? ' AND t.forum_id IN ('.$this->settings['ttS_forums'].')' : '' ), 'order' => 'topts DESC', 'group' => 't.starter_id', 'limit' => array( 0, $this->settings['ttS_total'] ), 'add_join' => array( array( 'select' => 'm.members_display_name, m.member_id, m.members_seo_name, m.member_group_id', 'from' => array( 'members' => 'm' ), 'where' => 't.starter_id = m.member_id', 'type' => 'left'), 1 => array( 'select' => 'pp.*', 'from' => array( 'profile_portal' => 'pp' ), 'where' => 'm.member_id=pp.pp_member_id', 'type' => 'left' )), )); $t = $this->DB->execute(); while( $r = $this->DB->fetch( $t ) ) { $r = IPSMember::buildDisplayData( $r ); $r['topts'] = $this->registry->getClass('class_localization')->formatNumber($r['topts']); $tts[] = $r; }И настройка для него: <setting> <conf_id>309</conf_id> <conf_title>Отображение списка</conf_title> <conf_description>Отображение лучших авторов за все время, день, неделю или месяц.</conf_description> <conf_group>34</conf_group> <conf_type>dropdown</conf_type> <conf_key>ttS_list</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra>1=За все время 2=За сутки 3=За неделю 4=За месяц</conf_extra> <conf_evalphp/> <conf_protected>0</conf_protected> <conf_position>4</conf_position> <conf_start_group/> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>ttS</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting>Подскажите, пожалуйста, как изменить этот запрос, чтобы выводились не пользователи, а темы?
January 3, 20178 yr $period = array( 1 => '-1 day', 2 => '-1 week', 3 => '-1 month' ); $this->DB->build( array( 'select' => '*', 'from' => 'topics', 'where' => 'start_date >= ' . strtotime( $period[1] ) . ' AND forum_id IN(1,2,3)', 'order' => 'start_date DESC', 'limit' => array(0,10) ) ); $this->DB->execute();Вывод 10 тем за последний день из форумов 1,2,3.
January 3, 20178 yr Author Спасибо большое! А как вместо статичных данных добавить в запрос настройки из хука (из поста 4)? Чтобы вместо 10 тем были данные из настройки $this->settings['jw_lts_limit'], и форумы тоже подгружались из настройки $this->settings['jw_lts_forums']. И куда этот запрос добавить в хук? А то добавляю в private function _getTopics() и public function getOutput(), но выдает ошибку базы данных при загрузке... Edited January 3, 20178 yr by Strategius
January 3, 20178 yr Author за последний деньА возможно ли добавить только временной запрос в этот уже готовый запрос? $this->DB->build( array( 'select' => 't.tid, t.title as topic_title, t.title_seo, t.start_date, t.starter_id, t.starter_name', 'from' => array('topics' => 't'), 'where' => "t.approved=1 AND t.forum_id in (".implode(",",$forumIds).")", 'order' => 't.start_date DESC', 'limit' => array(0,$this->settings['st_stv_limit']), 'add_join' => array( array( 'select' => 'm.*', 'from' => array( 'members' => 'm' ), 'where' => 'm.member_id=t.starter_id', 'type' => 'left', ), array( 'select' => 'pp.*', 'from' => array( 'profile_portal' => 'pp' ), 'where' => 'm.member_id=pp.pp_member_id', 'type' => 'left', ), ) ) ); $outer = $this->DB->execute(); while( $t = $this->DB->fetch( $outer ) ) { $t = IPSMember::buildDisplayData( $t ); $topics[] = $t; } return $topics;Не получается никак добавить Ваш тот запрос в хук (JW34) Latest Topics in Sidebar, может, проще штатный запрос дополнить... Edited January 3, 20178 yr by Strategius
January 3, 20178 yr Author Что значит временный?Ну то есть за определенный промежуток времени, не так выразился :) $period = array( 1 => '-1 day', 2 => '-1 week', 3 => '-1 month' ); 'where' => 'start_date >= ' . strtotime( $period[1] ) . Добавляю его в готовый запрос из хука, строку: 'where' => "t.approved=1 AND t.forum_id in (".implode(",",$forumIds).")",Меняю на: 'where' => "start_date >= ' . strtotime( $period[1] ) . ' AND t.approved=1 AND t.forum_id in (".implode(",",$forumIds).")",Но не работает... Дело в том, что в хуке из поста #4 уже есть условия отбора по количеству тем и по опред. форумам. Хотелось бы в него добавить условие отбора по времени.
January 3, 20178 yr Author Установлена настройка запроса вывода тем за последний день, но условие отбора по времени не выполняется, выводятся старые темы (т.е. как будто запроса и не существует).
January 3, 20178 yr Переменная $period объявлена перед запросом?Перед $outer = $this->DB->execute(); добавьте echo $this->DB->fetchSQLString(); exit; и изучите запрос.
Подскажите, пожалуйста, существует ли хук, выводящий в боковой блок список тем с такой выборкой:
- Из определенных форумов
- За определенное время
- Фильтр по просмотрам
Есть ли такое решение?