Перейти к публикации
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. и "Молодец!"

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

 

Спасибо.

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

Опубликовано:

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

Опубликовано:
  • Автор

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

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

Опубликовано:
  • Автор

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

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

Сейчас на странице 0

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

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.