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