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.

Лидеры

  1. Silence

    Актив
    Points
    2 434
    Количество сообщений
  2. aLEX49566

    Актив
    Points
    2 699
    Количество сообщений
  3. Zero108

    Актив
    Points
    3 982
    Количество сообщений
  4. Wokwer

    Новичок
    Points
    1
    Количество сообщений

Popular Content

Showing content with the highest reputation since 06.08.2024 в Записи

  1. Доброго времени суток. Хочу поделиться опытом кастомизации ошибок, которые возникают при тех или иных ситуациях (не найдена страница - 404, нет права на загрузку файла и т.д..). На то, чтобы это все понять и собрать, ушло у меня около недели), я не ПРО, поэтому выкладываю все своими словами и так, как делал я, "без лишней суеты".. Пример моей работы: Где я менял основную страницу: НЕ ЗАБЫВАЕМ ДЕЛАТЬ БЭКАП!! 1) Первое, что нужно сделать, это настроить общий шаблон в стилях. Я подпишу каждый момент, который менял, чтобы вам легче было ориентироваться. Вы же все, что подписано - //отступ - у себя уберете, после своих внесении изменений, иначе это все будет видно на сайте. Код моей страницы: По сути, можно кастомизировать как угодно, но мне много не надо было, поэтому я сделал себе по простому 2) Правка текста в вкладках. Поменял текст, который отображается при появлении ошибок 401, 404, 403, 500, ибо логично, когда выдается страница 404, то и в вкладке, должно быть соответствующий текст. Текст меняется в переводе, это можно сделать из панели АЦ: 3) Для тех, у кого php-fpm и Nginx. Далее, я обнаружил, что когда открываю страницу, такую как (несуществующую страницу или удаленную) вида - https://site.blablabla.index.php редиректит на: Я ее заменил на свою страницу (мне показалось, что это куда более правильнее) Моя страница 404 ошибки, с внутренним css стилем (она же 403) 404.html Если у вас будет такая же ситуация, тогда: 1.1 Создаем в корне вашего сайта, скажем в директории: /html/error_pages, страницу 404.html. 1.2 Немного правим php-fpm и вносим корректировки в: /etc/nginx/sites-available/ваш конфиг Добавляем: try_files $uri = 404; В каждый раздел location ~ ^(.*\.php)$ { 1.3 Добавляем обращение к самой странице 404 в Nginx server { ..... error_page 404 /404.html; location = /404.html { root /путь до ПАПКИ с страницами ошибок/html/error_pages; } ..... } } } 4) Редирект закрытых директорий. И последний момент, это моя папка с файлами, она у меня была открыта для просмотра, но спустя некоторое время, я решил ее закрыть (файлы естественно все остались доступны для просмотра, а вот сам "серфинг" по ней - нет). Такого рода ошибку 403 не цепляет ни ips4 ни Nginx (по умолчанию), я сделал следующее: Добавил в Nginx строки (аналогично ошибке 404). server { ..... error_page 403 /403.html; location = /403.html { root /путь до ПАПКИ с страницами ошибок/html/error_pages; } ..... } } } Промучился я не мало, гл вроде все стало выглядеть приятнее) Всем удачи! 404.html
  2. Отписать всех пользователей от тем: TRUNCATE core_follow; Далее сбрасываем кэш счетчика на 0: UPDATE core_follow_count_cache SET `count` = 0; Отписать пользователя с id 1 от всех подписок: DELETE FROM core_follow WHERE follow_member_id=1; Отписка всех, кто подписался на новости при регистрации: UPDATE core_members SET allow_admin_mails = 0; После чего нужно почистить кэш Удаление истории изменения имен: DELETE FROM core_member_history WHERE log_member=X AND log_app='core' AND log_type='display_name'; X - ID юзера Очистка пустых строк с пожертвованиями: Необходимо зайти через phpMyAdmin или иной клиент для базы данных, найти таблицу nexus_donate_logs и удалить необходимые строки. Удаление просроченных и неоплаченных товаров (счета): DELETE FROM `nexus_invoices` WHERE `nexus_invoices`.`i_status` = 'expd' or 'canc'; Спасибо за помощь Lesovsky
  3. 2 points
    Вот как добавить Turnstile Cloudflare для CAPTCHA: 1. Нажмите на эту ссылку альтернативы CAPTCHA затем нажмите Get Started For Free 2. Затем нажмите Add site : 3. Заполните поля : Site name , Domain , Widget Mode и нажмите - Crate(Создавать) .... 4.Там ты получишь Ключ сайта и Секретный ключ ... 5. Зайдите в свою админ панель > темы > Редактировать HTML и CSS > core > global > forms и найти: captchaInvisible captchaKeycaptcha captchaRecaptcha captchaRecaptcha2 6. Зайдите в каждый из них и замените содержимое следующим: <div id="example-container" class="cf-turnstile" data-sitekey="Ваш_Ключ_сайта" data-callback="javascriptCallback"></div> <script src="https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback" defer></script> <script> window.onloadTurnstileCallback = function () { turnstile.render('#example-container', { sitekey: '<Ваш_Ключ_сайта>', callback: function(token) { console.log(`Challenge Success ${token}`); }, }); };</script> 7. Замените Ваш_Ключ_сайта с Ваш ключ, который вы сгенерировали ранее. 8. Зайдите в свою админ панель > члены > МОДЕРАЦИЯ КОНТЕНТА > Spam Prevention и выбери Invisible , reCAPTCHA , reCAPTCHA V2 или keyCAPTCHA. 9. Введите ключ сайта и секретный ключ и сохраните. 10. ... Вот и все - Вот результат с моего сайта:
  4. Scroll Indicator

    SlawkA and one other reacted to Silence for запись

    2 points
    Scroll Indicator Перейти к ACP -> Customization -> Theme -> Edit HTML and CSS -> Templates -> globalTemplate Поместите этот код перед </body> <div class="scroll-line"></div> <script> $(window).scroll(function(){var wintop = $(window).scrollTop(), docheight = $(document).height(), winheight = $(window).height(); var scrolled = (wintop/(docheight-winheight))*100; $('.scroll-line').css('width', (scrolled + '%'));}); </script> Перейти к ACP -> Customization -> Theme -> Edit HTML and CSS -> CSS -> custom.css и вставить этот код: .scroll-line { height: 2px; margin-bottom: -2px; background: #e74c3c; width: 0%; position:fixed; top:0; z-index:9999; } Наслаждаться
  5. Как известно в админке инвижен сортирует пользователей по алфавиту, и не позволяет их отсортировывать перемещением на подобии как категории, т.е. размещать в списке по смыслу. Например с верху вниз по важности или количеству выданных прав или по еще какой либо смысловой идее админа. Если вы задумали много групп, с разными правами и прочим фишками и доступности контента, то при настройке доступов при выставлении галочек возникает сущий ад!!! В этом режиме отсутствует форматирование групп, которое могло бы как то визуально своим видом (цветом) ориентировать, но тут монохром и сортировка не по смыслу а по алфавиту (((. Чтобы отсортировать группы в списке по удобному для задуманного смысла порядке установите перед названием группы закомментированное число <!--45-->ИмяГруппы и тогда во всех списках, группы расположатся в порядке вашего замысла, а не по алфавиту. И еще, один совет, изначально прописывая закоменченые числа, устанавливайте не подряд, а с промежутком, для дальнейшей удобной ПЕРЕсортировке, если решите поменять порядок.
  6. 1. В общий nginx.conf добавить после http { : set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2606:4700:f000::/32; real_ip_header X-Forwarded-For; 2. Перезапустить nginx service nginx restart или sudo systemctl reload nginx
  7. Уменьшаем немного кнопки в профиле - "Обложка", "Настройки профиля", "Изменить профиль" и т.д. смотря какие доп. приложения установлены. По умолчанию в профиле, в мобильной версии влезает только три кнопки: После правок будет влезать пять и выглядит это куда интереснее: Идем в шаблон custom.css и вставляем следующий стиль: /*доп пункт настроек в профиле*/ @media screen and (max-width: 767px) { .ipsApp .ipsButton_small_mini { font-size: 13.0px; line-height: 2.33; padding: 0 8px; } } Мы создали новый стиль для ipsButton_small_mini. Далее, идем в шаблон profileHeader и находим строки с классом ipsButton_small, сразу после этого класса нужно добавить ipsButton_small_mini - это будет класс, который мы создали в custom.css, специально для мобильной версии, именно благодаря ему, пункты меню в профиле станут компактнее. Класс ipsButton_small_mini можно добавить для любой кнопки из стороннего приложения, в нашем случае таким оказалось приложение Private Profile.
  8. Работа с members . Документация разработчика. Прежде чем приступить к разработке плагинов или приложений для IPS Community Suite, вам необходимо включить режим разработчика. В режиме разработчика программное обеспечение загружает необходимые файлы непосредственно из файловой системы, а не из кэшированных версий или из базы данных. Если вы разрабатываете версию 4.0, вам почти наверняка в какой-то момент понадобится взаимодействовать с учетными записями участников. К счастью, в версии 4.0 это легко сделать. Основным классом-членом в версии 4.0 является \IPS\Member. /* Получить текущего участника, вошедшего в систему */ $member = \IPS\Member :: loggedIn (); /* Загрузить определенный элемент по идентификатору */ $member = \IPS\Member :: load ( 1 ); /* Загрузить конкретного участника по адресу электронной почты */ $member = \IPS\Member :: load ( 'john@doe.com' , 'email' ); /* Получаем гостевой объект или создаем нового участника */ $member = new \IPS\Member ; Если у вас есть экземпляр \IPS\Member для работы, вы можете настроить значения для этой учетной записи участника, просто установив свойства объекта, которые соответствуют столбцам в таблице базы данных core_members. Например, чтобы изменить выбор языка участника, вы можете сделать следующее: /* Получаем ссылку на член */ $member = \IPS\Member::load( 1 ); $member->language = 2; $member->save(); Вам необходимо вызвать метод save() после изменения значения, чтобы оно было сохранено в базе данных, в противном случае изменение будет сохраняться только в течение текущего просмотра страницы (или до тех пор, пока не будет вызван save() в какой-то более поздний момент, особенно если работая с \IPS\Member::loggedIn()). Если вы работаете с гостевым объектом и вызываете функцию save() для этого объекта, новая запись члена будет сохранена в базе данных (т. е. именно так вы создаете новый член). В этом классе определены некоторые геттеры и сеттеры, облегчающие выполнение необходимых действий. Например, при настройке имени участника его SEO- имя автоматически обновляется, и автоматически учитывается журнал изменения отображаемого имени. Работа с участникамиНекоторые специальные свойства, доступные через геттеры: $member->group: это специальный метод получения (свойство, а не метод), который возвращает данные группы участника. Этот метод автоматически объединит разрешения основной группы и одной или нескольких вторичных групп, предоставляя участнику максимально возможные разрешения в зависимости от его членства в группах. $member->groupName: вернет имя группы пользователя, отформатированное на основе конфигурации группы ACP . $member->groups: вернет массив идентификаторов всех групп, к которым принадлежит участник. $member->real_name: это вернет имя участника или пустую строку для гостя вместо возврата языковой строки для гостя, если пользователь на самом деле является гостем. $member->birthday: вернет локализованный день рождения участника, принимая во внимание тот факт, что указание года рождения не является обязательным. $member->photo: это свойство возвращает фотографию участника в виде объекта \IPS\Url (который можно преобразовать в строку, чтобы получить URL-адрес фотографии). Фотография сделана безопасной для просмотра в АШП при необходимости. $member->rank: Этот метод возвращает массив, представляющий заголовок и изображение для текущего «ранга» участника на основе конфигурации рангов ACP , принимая во внимание тот факт, что поддерживаются как загруженное изображение, так и изображения «pip». В классе \IPS\Member есть несколько методов, с которыми вам следует ознакомиться. $member->location(): возвращает текущее местоположение участника на сайте, если он онлайн. $member->isAdmin(): Возвращает информацию о том, является ли участник администратором или нет. $member->isOnline(): Возвращает информацию о том, находится ли участник в сети в данный момент или нет. $member->isBanned(): Возвращает информацию о том, забанен ли участник или нет, включая временные баны. $member->profileFields(): возвращает настраиваемые поля профиля для участника в виде массива объектов полей профиля. $member->contentProfileFields(): это похоже на ProfileFields(), но вместо этого возвращает только поля профиля, предназначенные для отображения рядом с контентом пользователя (например, на левой боковой панели рядом с публикацией). $member->ipAddresses(): возвращает IP-адреса, используемые участником. $member->language(): возвращает экземпляр \IPS\Lang для участника на основе его предпочтений или на основе автоматического определения/настройки языка по умолчанию, если участник не выбрал язык. Это используется для получения языковых строк, например, \IPS\Member::loggedIn()->language()->addToStack( 'language_string' ); $member->reputation(): этот метод возвращает репутацию участника в виде языковой строки. $member->reputationImage(): этот метод возвращает изображение репутации участника. $member->delete($setAuthorToGuest=TRUE); Вызовите этот метод, чтобы удалить члена. Единственный принятый параметр указывает, следует ли устанавливать какой-либо контент, созданный участником, в гостевую учетную запись, если это TRUE, или удалять этот контент, если FALSE. Имейте в виду, что если вы используете какие-либо внешние обработчики входа в систему, которые поддерживают удаление участника, этот участник также будет удален в этих внешних базах данных. $member->flagAsSpammer(): этот метод помечает учетную запись пользователя как спамера, удаляя или скрывая его содержимое в зависимости от конфигурации администратора, и сообщает о спамере в службу спама IPS (если это настроено). $member->unflagAsSpammer(): этот метод снимет пометку с учетной записи пользователя как спамера, сообщив об изменении статуса в службу спама IPS, если она настроена на это. $member->age($date=NULL); Возвращает возраст участника. Если объект \IPS\DateTime предоставляется в качестве единственного параметра метода, возраст рассчитывается на основе предоставленной даты. $member->inGroup($group, $permissionArray=FALSE); Проверьте, принадлежит ли участник группе или набору групп. $group может быть идентификатором группы (целое число), экземпляром \IPS\Member\Group или массивом идентификаторов групп или экземпляров \IPS\Member\Group. Если пользователь является членом ЛЮБОЙ группы в массиве, метод возвращает TRUE. Если $permissionArray передается как TRUE, участник проверяется по массиву разрешений участника, а не по идентификаторам группы. $member->url(): возвращает URL-адрес профиля участника в виде экземпляра \IPS\Http\Url. $member->acpUrl(): возвращает URL-адрес страницы редактирования участника в ACP как экземпляр \IPS\Http\Url. $member->link($warningRef=NULL, $groupFormatting=FALSE) ; Верните HTML-ссылку на профиль участника. Если $warningRef передается как строка, это будет ссылочный ключ для предупреждения участника (если пользователь предупрежден). $groupFormatting указывает, следует ли форматировать отображаемое имя с использованием параметров форматирования группы участника, установленных администратором. $member->markAllAsRead(): пометить весь сайт как прочитанный для участника. $member->markersItems($app, $key); Получите маркеры элементов для участника для данного приложения и ключа. $member->markersResetTimes($app); Получите время сброса маркера элемента для участника для данного приложения. $member->warnings($limit, $acknowledged=NULL, $type=NULL); Получить предупреждения участника. Limit можно передать как целое число, чтобы ограничить количество возвращаемых значений. Если $acknowledged имеет значение NULL, возвращаются все предупреждения, или можно передать TRUE или FALSE, чтобы ограничить предупреждения только подтвержденными или неподтвержденными предупреждениями. Если $type передается как строка, будут извлекаться только предупреждения этого типа. $member->encryptedPassword($password); Зашифруйте простой текстовый пароль для участника, используя соль участника (вы можете обновить соль перед вызовом этого метода для получения нового пароля). $member->generateSalt(): создаёт новую соль для члена. $member->notificationsConfiguration(): возвращает конфигурацию уведомлений участника. $member->following($app, $area, $id); Определите, следует ли участник определенной комбинации приложения, региона и идентификатора (необходимо передать все значения) $member->acpRestrictions(): Возвращает ограничения ACP участника , чтобы определить, к каким областям ACP участник может получить доступ. $member->modPermissions(): Возвращает права модератора участника, если таковые имеются. $member->reportCount(): Получите количество элементов контента, о которых сообщается, которые участник может просмотреть в центре отчетов. $member->isIgnoring(\IPS\Member $member, $type); Определите, игнорирует ли участник другого участника. $type должен быть передан и должен быть одним из «подписей», «тем» или «сообщений». $member->createMenu(): Получить меню создания участника. Это кэшируется (и автоматически очищается при необходимости). $member->moderateNewContent(): определяет, следует ли модерировать новый контент, созданный участником. $member->coverPhoto(): Возвращает обложку участника, если таковая имеется. $member->hasAcpRestriction($app, $module=NULL, $key=NULL); Определите, установлено ли у участника ограничение ACP для данной комбинации $app, $module и $key (требуется только $app). Если у участника установлено ограничение, это означает, что он может получить доступ к данной области. $member->modPermission($key=NULL); Определите, есть ли у участника данное разрешение модератора для его учетной записи (передайте NULL, чтобы определить, есть ли у участника какие-либо доступные права модератора). $member->canWarn(\IPS\Member $member); Определите, может ли текущий участник предупредить другого участника. $member->checkLoginKey(): убедитесь, что у участника установлен ключ входа и срок его действия не истек. $member->recountNotifications(): пересчитывает непрочитанные уведомления участника. $member->recountContent(): пересчитывает вклады участников в элементы контента. $member->recountReputation(): пересчитывает репутацию участника. $member->canAccessModule($module); $module должен быть экземпляром \IPS\Application\Module, и метод возвращает, может ли участник получить доступ к модулю или нет. $member->merge(\IPS\Member $otherMember); Объедините текущего участника с другой учетной записью участника (обратите внимание, что объединение контента происходит в фоновом режиме и может произойти не сразу; кроме того, учетная запись участника, которая будет удалена, не будет удалена до тех пор, пока весь контент не будет объединен, он ставится в очередь). $member->checkPostsPerDay(): проверьте ограничения на количество публикаций в день, чтобы узнать, может ли участник посещать их. $member->checkGroupPromotion(): проверьте, следует ли перевести участника в другую группу, и сделайте это, если да. Обратите внимание, что save() после этого все равно необходимо вызывать вручную. $member->clearCreateMenu(): Очистить кэшированное меню создания для участника. Обратите внимание, что приложения могут определять расширения MemberSync для выполнения определенных действий в следующих точках: onDelete: этот метод в расширении MemberSync вызывается при удалении участника (имейте в виду, что его содержимое все еще может существовать в базе данных и находиться в очереди на удаление). onCreateAccount: вызывается при создании новой учетной записи. onProfileUpdate: вызывается при обновлении существующей учетной записи. Расширения создаются в Центре разработчиков приложения в панели управления администратора. Перевод: Google
  9. 1. Заходим в АЦ. 2. Настройка Cron на выполнение задач. У меня исполняемый файл находится в директории: /var/spool/cron/crontabs/root Прописываем в Cron строку из вашего АЦ и задаем время на выполнение - каждую минуту (мне этого хватало, вы же можете указать и другое время). | Ниже приведен пример, его копировать не нужно! */1 * * * * /usr/bin/php -d memory_limit=-1 -d max_execution_time=0 /Ваш сайт/html/applications/core/interface/task/task.php 12345678910111213141516 3. Перезагружаем cron через ssh командой. /etc/init.d/cron restart Всем добра! Я делал так и все работает с 2020 года) Есть другие варианты-пишите
  10. Для отключения задач проверки обновлений на сайте нужно перейти в админцентре сайта по ссылке /admin/?app=core&module=support&controller=sql&do=query и выполнить следующий блок SQL запросов к базе данных: UPDATE core_tasks SET enabled=0 WHERE `key`='updatecheck'; UPDATE core_tasks SET enabled=0 WHERE `key`='digest'; UPDATE core_tasks SET enabled=0 WHERE `key`='weeklydigest'; UPDATE core_tasks SET enabled=0 WHERE `key`='pop'; UPDATE core_tasks SET enabled=0 WHERE `key`='postBeforeRegisterFollowup'; Если у таблицы core_tasks есть префикс, например, ibf_, то команда будет выглядеть следующим образом: UPDATE ibf_core_tasks SET enabled=0 WHERE `key`='updatecheck'; UPDATE ibf_core_tasks SET enabled=0 WHERE `key`='digest'; UPDATE ibf_core_tasks SET enabled=0 WHERE `key`='weeklydigest'; UPDATE ibf_core_tasks SET enabled=0 WHERE `key`='pop'; UPDATE ibf_core_tasks SET enabled=0 WHERE `key`='postBeforeRegisterFollowup'; Для того, чтобы включить проверку обновлений обратно, нужно выполнить аналогичный запрос, заменив цифру 0 на 1. Данные меры могут помочь отключить уведомление серверов Invision Community о существовании вашего сайта.
  11. Аватар для Border Цвет в зависимости от группы Идём в свой шаблон и переходим по пути: Шаблоны --> core --> front --> global --> userPhoto и заменить все содержание с ето: {{if $member->member_id and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) )}} {{$memberURL = ( $warningRef ) ? $member->url()->setQueryString( 'wr', $warningRef ) : $member->url();}} <a href="{$memberURL}" data-group_id='{$member->member_group_id}' {{if $hovercard}}data-ipsHover data-ipsHover-target="{$memberURL->setQueryString( 'do', 'hovercard' )}"{{endif}} class="ipsUserPhoto ipsUserPhoto_{$size}{{if $classes}} {$classes}{{endif}}" title="{lang="view_user_profile" sprintf="$member->name"}"> <img src='{$member->photo}' alt='{$member->name}' itemprop="image"> </a> {{else}} <span class='ipsUserPhoto ipsUserPhoto_{$size} {{if $classes}}{$classes}{{endif}}'> <img src='{$member->photo}' data-groupID='{$member->member_group_id}' alt='{$member->name}' itemprop="image"> </span> {{endif}} Перейти к вашем custom.css и поставите ето код: .ipsUserPhoto[data-group_id="4"] { border: solid 3px #e74c3c; } .ipsUserPhoto[data-group_id="3"] { border: solid 3px #2c3e50; } Изменит 4 и 3 с id вашем груп Id вашем група может увидет в АКП - Members - Group инажмите груп который вы хотите увидеть. В адресной строке вы увидите id ваша група:
  12. 1 point
    Спойлер в IPS Community Suite 4 Перейти ACP - Customization -> Toolbars и нажмите на кнопку Add Button -> Custom: Заполните поля: Button Title: spoiler Icon: загрузить изображение выбирать: Block Use option?: включить HTML: Сохранить

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.