July 2, 201213 yr Здравствуйте, подскажите как можно вывести список самого лайкнутого контента на главную в сайдбар.Искал но не могу ничего найти. Ведь функция в самом ipb уже есть, а такого простого хука на подобие "Новые темы форума"выводящего список "Most liked" нет. Очень хочется побудить пользователей нажимать Like вместо написания постов в стиле +1. и "Молодец!"Сейчас же что ставь лайк что нет, все равно никто не видит на что это влияет. Спасибо.
July 2, 201213 yr Ну вообще для этого целая отдельная страница есть, ссылка на нее внизу под списком форумов на главной, рядом со ссылками на страницу списка модераторов и списки "топ-постеров". В сайдбар такое, наверное, просто не влезет, разве что одними заголовками вывести...
July 3, 201213 yr Author Ну я про это в вопросе написал. Функционал такой есть. Нужно вывести как-то заголовки в сайдбар, чтобы люди могли видеть лучшие посты на форуме. Edited July 3, 201213 yr by ixs
July 3, 201213 yr Чтобы вывести что-то в сайдбаре нужно написать хук, если в самом приложение нет такого функционала по отображению инфы в сайдбаре.
July 3, 201213 yr Теперь я знаю что делать, дальше я сам. Что-то я не пойму, это сарказм что-ли?.. Вам ответили как его там вывести - написать хук. Или вы ждете что-бы я его за вас написал?
July 3, 201213 yr Написать хук - не сложно. Вот по сути готовый хук, что собирает этот самый топ-контент и выводит их в черновом виде: <?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 топовых постов - никакого сайдбара не хватит. Именно поэтому используется отдельная страница.
Здравствуйте, подскажите как можно вывести список самого лайкнутого контента на главную в сайдбар.
Искал но не могу ничего найти. Ведь функция в самом ipb уже есть, а такого простого хука на подобие "Новые темы форума"
выводящего список "Most liked" нет.
Очень хочется побудить пользователей нажимать Like вместо написания постов в стиле +1. и "Молодец!"
Сейчас же что ставь лайк что нет, все равно никто не видит на что это влияет.
Спасибо.