Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Strategius

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

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

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

 

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
01/03/17 17:26 (изменено)

Спасибо большое! А как вместо статичных данных добавить в запрос настройки из хука (из поста 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']

Поделиться сообщением


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

Изменено пользователем 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 пользователей

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

×
×
  • Создать...