Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Strategius

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

Recommended Posts

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

 

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

$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

Share this post


Link to post
Share on other sites

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

 

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

Edited by Strategius

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
за последний день

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

 

$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 by Strategius

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Что значит временный?

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

 

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

Share this post


Link to post
Share on other sites
Но не работает...

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...