Jump to content
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.

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

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

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

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

 

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

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

 

Спасибо.

Featured Replies

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

  • Author

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

Edited by ixs

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

  • Author

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

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

 

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

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

 

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

  • Author

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

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

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.