Strategius 52 01/02/17 20:37 Подскажите, пожалуйста, существует ли хук, выводящий в боковой блок список тем с такой выборкой: - Из определенных форумов- За определенное время - Фильтр по просмотрам Есть ли такое решение? Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/02/17 20:56 Без фильтра, можно установить любой подходящий хук для вывод тем и задать в нем условия отбора. Поделиться сообщением Ссылка на сообщение
Strategius 52 01/02/17 21:07 Дело в том, что с ходу не смог найти хука для вывода тем, кроме того, что идет в комплекте с форумом (последние темы)... Поделиться сообщением Ссылка на сообщение
Strategius 52 01/02/17 21:33 Нашел хороший польский хук (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 Поделиться сообщением Ссылка на сообщение
Strategius 52 01/03/17 10:04 Есть запрос вывода лучших авторов за определенное время (из хука 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>Подскажите, пожалуйста, как изменить этот запрос, чтобы выводились не пользователи, а темы? Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/03/17 17:02 $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. 1 Поделиться сообщением Ссылка на сообщение
Strategius 52 01/03/17 17:26 (изменено) Спасибо большое! А как вместо статичных данных добавить в запрос настройки из хука (из поста 4)? Чтобы вместо 10 тем были данные из настройки $this->settings['jw_lts_limit'], и форумы тоже подгружались из настройки $this->settings['jw_lts_forums']. И куда этот запрос добавить в хук? А то добавляю в private function _getTopics() и public function getOutput(), но выдает ошибку базы данных при загрузке... Изменено 3 января 2017 пользователем Strategius Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/03/17 18:50 так и пишите вместо 10 $this->settings['jw_lts_limit'] Поделиться сообщением Ссылка на сообщение
Strategius 52 01/03/17 20:26 (изменено) за последний деньА возможно ли добавить только временной запрос в этот уже готовый запрос? $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, может, проще штатный запрос дополнить... Изменено 3 января 2017 пользователем Strategius Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/03/17 21:10 Что значит временный? Что именно не получается? Поделиться сообщением Ссылка на сообщение
Strategius 52 01/03/17 21:20 Что значит временный?Ну то есть за определенный промежуток времени, не так выразился :) $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 уже есть условия отбора по количеству тем и по опред. форумам. Хотелось бы в него добавить условие отбора по времени. Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/03/17 21:24 Но не работает...Что значит не работает? Конкретнее пишите. Поделиться сообщением Ссылка на сообщение
Strategius 52 01/03/17 21:28 Установлена настройка запроса вывода тем за последний день, но условие отбора по времени не выполняется, выводятся старые темы (т.е. как будто запроса и не существует). Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/03/17 21:35 Переменная $period объявлена перед запросом?Перед $outer = $this->DB->execute(); добавьте echo $this->DB->fetchSQLString(); exit; и изучите запрос. Поделиться сообщением Ссылка на сообщение