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

3.3.2 вывести самый нравящийся контент на главную

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

Здравствуйте, подскажите как можно вывести список самого лайкнутого контента на главную в сайдбар.

Искал но не могу ничего найти. Ведь функция в самом ipb уже есть, а такого простого хука на подобие "Новые темы форума"

выводящего список "Most liked" нет.

 

Очень хочется побудить пользователей нажимать Like вместо написания постов в стиле +1. и "Молодец!"

Сейчас же что ставь лайк что нет, все равно никто не видит на что это влияет.

 

Спасибо.

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


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

Ну вообще для этого целая отдельная страница есть, ссылка на нее внизу под списком форумов на главной, рядом со ссылками на страницу списка модераторов и списки "топ-постеров". В сайдбар такое, наверное, просто не влезет, разве что одними заголовками вывести...

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


Ссылка на сообщение
07/03/12 09:16 (изменено)

Ну я про это в вопросе написал. Функционал такой есть. Нужно вывести как-то заголовки в сайдбар, чтобы люди могли видеть лучшие посты на форуме.

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

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


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

Чтобы вывести что-то в сайдбаре нужно написать хук, если в самом приложение нет такого функционала по отображению инфы в сайдбаре.

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


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

Спасибо Кеп. Теперь я знаю что делать, дальше я сам.

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


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

Теперь я знаю что делать, дальше я сам.

 

Что-то я не пойму, это сарказм что-ли?.. Вам ответили как его там вывести - написать хук. Или вы ждете что-бы я его за вас написал?

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


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

Написать хук - не сложно. Вот по сути готовый хук, что собирает этот самый топ-контент и выводит их в черновом виде:

 

<?xml version="1.0" encoding="utf-8"?>
<hookexport>
 <hookdata>
   <config>
     <hook_name>Самый рейтинговый контент форума</hook_name>
     <hook_desc>Выводит на главной станице форумов блок 10 постов с самым высоким рейтингом</hook_desc>
     <hook_author>Aoyagi Ritsuka</hook_author>
     <hook_email>aoyagi@ritsuka.ru</hook_email>
     <hook_website>http://ritsuka.ru/</hook_website>
     <hook_update_check/>
     <hook_requirements/>
     <hook_version_human>1.0.0</hook_version_human>
     <hook_version_long>10000</hook_version_long>
     <hook_key>ri_topcontent</hook_key>
     <hook_global_caches/>
   </config>
 </hookdata>
 <hookfiles>
   <file>
     <hook_file_real>ri_topcontent.php</hook_file_real>
     <hook_type>templateHooks</hook_type>
     <hook_classname>ri_topcontent</hook_classname>
     <hook_data><![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:11:"skin_boards";s:12:"skinFunction";s:18:"boardIndexTemplate";s:4:"type";s:7:"foreach";s:2:"id";s:11:"side_blocks";s:8:"position";s:9:"outer.pre";}]]></hook_data>
     <hooks_source><![CDATA[<?php

class ri_topcontent
{
const NUMBER_TO_SHOW = 20;

public function __construct()
{
	$this->registry = ipsRegistry::instance();
	$this->DB = $this->registry->DB();
}

public function getOutput()
{		
	/* Load our extension class */
	$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/extensions/reputation.php', 'reputation_forums', 'forums' );
	$reputationClass = new $classToLoad();

	/* Get our query */
	$_query = $reputationClass->fetch('most');
	$PRE    = trim(ipsRegistry::dbFunctions()->getPrefix());

	/* Got something? */
	if ( $_query['inner'] )
	{
		/* Build inner join */
		$this->DB->build( $_query['inner'] );
		$inner = $this->DB->fetchSqlString();
		$this->DB->flushQuery();

		$this->DB->allow_sub_select = 1;
		$this->DB->query( 'SELECT * FROM ' . $PRE . "reputation_totals WHERE rt_app_type=MD5( CONCAT( '" . 'forums' . "', ';', '" . $_query['type'] . "' ) ) AND rt_type_id IN (" . $inner . ") GROUP BY rt_key ORDER BY rt_total DESC LIMIT 0," .  self::NUMBER_TO_SHOW );
		$this->DB->execute();

		$typeIds = array();
		$results = array();
		$index   = array();

		while( $row = $this->DB->fetch() )
		{
			$typeIds[ $row['rt_total'] . '.' . $row['rt_type_id'] ] = $row['rt_type_id'];
			$index[ $row['rt_type_id'] ] = $row['rt_total'] . '.' . $row['rt_type_id'];
		}

		if ( count( $typeIds ) )
		{
			$this->DB->build( array( 'select'   => 'r.*',
									 'from'	    => array( 'reputation_index' => 'r' ),
									 'where'    => "r.app='" . 'forums' . "' AND r.type='" . $_query['type'] . "' AND r.type_id IN (" . implode( ',', array_values( $typeIds ) ) . ")",
									 'group'    => 'r.app, r.type, r.type_id',
									 'add_join' => $_query['joins'] ) );

			$e = $this->DB->execute();

			while ( $row = $this->DB->fetch( $e ) )
			{
				$results[ $index[ $row['type_id'] ] ] = $reputationClass->process( $row );
			}

			krsort( $results );
		}
	}

	//-----------------------------------------
	// Output
	//-----------------------------------------

	$langBit = ipsRegistry::$settings['reputation_point_types'] == 'like' ? 'most_rep_likes' : 'most_rep_rep';

	return var_export($results, true);
}	
}]]></hooks_source>
   </file>
 </hookfiles>
 <hookextras_settings/>
 <hookextras_language/>
 <hookextras_modules/>
 <hookextras_help/>
 <hookextras_templates/>
 <hookextras_css/>
 <hookextras_replacements/>
 <hookextras_tasks/>
 <hookextras_database_create/>
 <hookextras_database_alter/>
 <hookextras_database_update/>
 <hookextras_database_insert/>
</hookexport>

 

Вот только возникает большой вопрос, на что именно заменить:

		return var_export($results, true);

 

Ведь речь не о темах, не о форумах, а о постах. У постов нет "заголовков", и аккуратно они не обрежутся. Целиком же выводить 10 топовых постов - никакого сайдбара не хватит. Именно поэтому используется отдельная страница.

  • Upvote 1

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


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

Спасибо, буду изучать.

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


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

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

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

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