Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка 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.

Desti

Актив
  • Регистрация

  • В сети

Everything posted by Desti

  1. Ну к примеру у меня на форуме работает плагин приложение "последние сообщения". Раньше оно работало с базой, на каждое обновление главной страницы делало запрос в базу на последние 10 сообщений. При полутора тысячах пользователей это солидная нагрузка. А с редисом сделано по другому, висит задача, каждые 30 секунд делает один запрос и сохраняет в редисе последние сообщения, а приложение больше не лезет в базу, просто берет из редиса подготовленный блок данных и показывает пользователю.
  2. У меня все плагины на редис переделаны, в базу обращений почти нет, только при обновлении данных.
  3. Владельцу большого форума ничего не остаётся, кроме как вручную добавить кэширование в редис (из 4.5). Думаю, они просто уберут эту опцию, не меняя алгоритмов.
  4. Да нет, только одна причина, включенный спам-сервис и попытка регистрации с "плохого" мыла. if( $member->spamService() == 4 ) { \IPS\Output::i()->error( 'spam_denied_account', '2S129/1', 403, '' ); } У меня таких "хорошистов" в день по 5-10 штук, обычные спамеры.
  5. Сейчас это (30 минут) жестко зашито в system/Session/Store/Database.php array( 's.running_time>?', \IPS\DateTime::create()->sub( new \DateInterval( 'PT30M' ) )->getTimeStamp() ), Менять, соответственно, PT30M на PT60M или сколько вам там надо и в system/Session/Store/Redis.php (если используете redis) if ( $data['running_time'] < ( time() - ( 30 * 60 ) ) ) Менять 30 на 60. Можно без математики, просто указать интервал в секундах, 3600 - будет за час. Не проверял, но это, похоже, единственное место, где используются интервалы для счета сессий ползателей.
  6. Не, задачи такой не стояло, я просто немножко докопался до разрабов А сам плагин - да, сделал, работает себе на сайте, но честно нарушает все правила ипс-ов и, скорее всего, не может быть размещен в магазине. Как быть вам - не знаю. Если пишете на продажу - придется следовать рекомендациям.
  7. Я разговаривал на эту тему с разрабами движка, почитайте. Там есть ответы на некоторые вопросы. invisioncommunity.com/forums/topic/455654-plugin-code-hooks/ Иногда проще сделать свой JS файл, а не модифицировать оригинал. Ограничение по копированию кода относится только к "When overriding a method...". Но в любом случае команда, проверяющая код перед публикацией укажет вам на нарушения и предложит их исправить, так что всё можно решить.
  8. Да, именно так. Вы не можете залезть в функции и переменные родителя и что-то изменить, но вы можете дополнить базовый класс своими функциями или полностью заменить функции родителя своими.
  9. Эти ограничения касаются только приложений и плагинов, которые вы хотите выставить в маркет инвижына для других людей. В рамках своего форума вы можете делать с кодом что угодно.
  10. Давайте вы сначала определитесь, что вам нужно, а? Все поля пользователя доступны в структуре типа $member, она обычно передается и в шаблон профиля и в сообщение пользователя (или запрашивается по ID внутри шаблона). Но если для вас всё это пустой звон, то идёте сюда и просите вам помочь (за денежку).
  11. {{$member = \IPS\Member::load( $memberID);}} Ник ползателя с ID={$memberID} - {$member->name} $memberID естессно, надо передать в шаблон в параметрах или получить из уже имеющихся данных.
  12. Получить пользователя по ID через $member = \IPS\Member::load( $id ), вывести поле ( $member->name, например.. )
  13. Ну так может они и правда одинаковые? В базу должны разные запросы уходить, причем этот подсчет делается в файле, который мы не трогали.
  14. В шаблоне в третьей снизу строке изменить id="ipsTabs_elTopContributors_el_topContributorsWeek_panel" на id="ipsTabs_elTopContributors_el_topContributorsAll_panel"
  15. Не, с такими вопросами не ко мне (Платные услуги)
  16. это можно удалить, limit уже есть в запросе
  17. topContributors.php public function render() { /* How many? */ $limit = isset( $this->configuration['number_to_show'] ) ? $this->configuration['number_to_show'] : 5; /* Work out who has got the most reputation this week... */ $topContributorsThisWeek = array(); $topContributorsThisWeek = iterator_to_array( \IPS\Db::i()->select( 'member_id as themember, pp_reputation_points as rep', 'core_members', array( 'pp_reputation_points > 0' ), 'rep DESC', $limit )->setKeyField('themember')->setValueField('rep') ); arsort( $topContributorsThisWeek ); $topContributorsThisWeek = \array_slice( $topContributorsThisWeek, 0, $limit, TRUE ); /* Load their data */ if( \count( $topContributorsThisWeek ) ) { foreach ( \IPS\Db::i()->select( '*', 'core_members', \IPS\Db::i()->in( 'member_id', array_keys( $topContributorsThisWeek ) ) ) as $member ) { \IPS\Member::constructFromData( $member ); } } /* Display */ return $this->output( $topContributorsThisWeek, $limit ); } Шаблон topContributors <h3 class='ipsType_reset ipsWidget_title'>{lang="block_topContributors"}</h3> <div class='ipsTabs ipsTabs_small ipsTabs_stretch ipsClearfix' id='elTopContributors' data-ipsTabBar data-ipsTabBar-updateURL='false' data-ipsTabBar-contentArea='#elTopContributors_content'> <a href='#elTopContributors' data-action='expandTabs'><i class='fa fa-caret-down'></i></a> <ul role="tablist" class='ipsList_reset'> <li> <a href='#ipsTabs_elTopContributors_el_topContributorsAll_panel' aria-selected='true' class='ipsTabs_item ipsTabs_activeItem' id='el_topContributorsAll' role="tab" aria-selected='false'>{lang="alltime"}</a> </li> <li> <a href='{url="app=core&module=system&controller=ajax&do=topContributors&time=week&limit={$limit}&orientation={$orientation}"}' id='el_topContributorsWeek' role="tab" class='ipsTabs_item'>{lang="week"}</a> </li> <li> <a href='{url="app=core&module=system&controller=ajax&do=topContributors&time=month&limit={$limit}&orientation={$orientation}"}' id='el_topContributorsMonth' class='ipsTabs_item' role="tab" aria-selected='false'>{lang="month"}</a> </li> <li> <a href='{url="app=core&module=system&controller=ajax&do=topContributors&time=year&limit={$limit}&orientation={$orientation}"}' id='el_topContributorsYear' class='ipsTabs_item' role="tab" aria-selected='false'>{lang="year"}</a> </li> </ul> </div> <section id='elTopContributors_content' class='ipsWidget_inner ipsPad_half'> <div id="ipsTabs_elTopContributors_el_topContributorsWeek_panel" class='ipsTabs_panel'> {template="topContributorRows" group="widgets" app="core" params="$topContributorsThisWeek, 'all', $orientation"} </div> </section> У меня в таком виде всё работает нормально
  18. еще один {{endif}} нужен в конце
  19. В jquery есть функция prepend(), которая вставляет контент первым чилдом. Родителем, в нашем случае, будет элемент, в котором объявлен скрипт. Поэтому this.scope.prepend(menu) вставит сгенеренную менюшку в начало секции. data-title вставляется в тег заголовка секции, якорь перед ним, типа <a id="anchor-label" rel=""></a> <h2 class="cDocs_mainTitle" data-role="title">Заголовок</h2> У инвижинов для этого, скорее всего, есть приложение, а вам придется расставлять теги и якоря руками.
  20. А что не понятно? В меню справа - ссылки с якорями, в тексте якоря. Жмем ссылку, перепрыгиваем на якорь. А <nav></nav> генерит скрипт простенький, прошаривая по [data-role='title']
  21. Только в код лезть, он динамический, ищите member_posts в content/item, наверное можно проверять "app" и, если это "downloads", не увеличивать счетчик.
  22. В языках, ключ "downloads"
  23. Дык для тем отдельный раздел обычно создают, отключите в нем счетчик сообщений.
  24. Может в фильтр слов что-то типа "jpg" попало?

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.