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

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

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

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

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

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

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

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

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

 

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

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

 

Спасибо.

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

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

  • Автор

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

Изменено пользователем 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 топовых постов - никакого сайдбара не хватит. Именно поэтому используется отдельная страница.

  • Автор

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

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

Аккаунт

Навигация

Поиск

Поиск

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

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