Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

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

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

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

 

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

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

Опубликовано:

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.