Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Хук для выборки тем

Подскажите, пожалуйста, существует ли хук, выводящий в боковой блок список тем с такой выборкой:

 

- Из определенных форумов

- За определенное время

- Фильтр по просмотрам

 

Есть ли такое решение?

Рекомендованные сообщения

Без фильтра, можно установить любой подходящий хук для вывод тем и задать в нем условия отбора.

  • Автор

Дело в том, что с ходу не смог найти хука для вывода тем, кроме того, что идет в комплекте с форумом (последние темы)...

  • Автор

Нашел хороший польский хук (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

  • Автор

Есть запрос вывода лучших авторов за определенное время (из хука 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>

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

$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.

  • Автор

Спасибо большое! А как вместо статичных данных добавить в запрос настройки из хука (из поста 4)? Чтобы вместо 10 тем были данные из настройки $this->settings['jw_lts_limit'], и форумы тоже подгружались из настройки $this->settings['jw_lts_forums'].

 

И куда этот запрос добавить в хук? А то добавляю в private function _getTopics() и public function getOutput(), но выдает ошибку базы данных при загрузке...

Изменено пользователем Strategius

так и пишите вместо 10 $this->settings['jw_lts_limit']

  • Автор
за последний день

А возможно ли добавить только временной запрос в этот уже готовый запрос?

 

$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, может, проще штатный запрос дополнить...

Изменено пользователем Strategius

Что значит временный? Что именно не получается?

  • Автор
Что значит временный?

Ну то есть за определенный промежуток времени, не так выразился :)

 

$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 уже есть условия отбора по количеству тем и по опред. форумам. Хотелось бы в него добавить условие отбора по времени.

Но не работает...

Что значит не работает? Конкретнее пишите.

  • Автор

Установлена настройка запроса вывода тем за последний день, но условие отбора по времени не выполняется, выводятся старые темы (т.е. как будто запроса и не существует).

Переменная $period объявлена перед запросом?

Перед $outer = $this->DB->execute(); добавьте echo $this->DB->fetchSQLString(); exit; и изучите запрос.

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.