Лидеры
Popular Content
Showing content with the highest reputation since 01.04.2024 в Записи
-
Заметки запросов к базе данных IPS4 (4.6-4.7)
Отписать всех пользователей от тем: 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'; Спасибо за помощь Lesovsky2 points
-
Cloudflare Turnstile для CAPTCHA
Cloudflare Turnstile для CAPTCHA
bunster123123 and one other reacted to Silence for запись
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. ... Вот и все - Вот результат с моего сайта:2 points -
Scroll Indicator
2 pointsScroll 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; } Наслаждаться2 points
-
Сортировка групп пользователей.
1 pointКак известно в админке инвижен сортирует пользователей по алфавиту, и не позволяет их отсортировывать перемещением на подобии как категории, т.е. размещать в списке по смыслу. Например с верху вниз по важности или количеству выданных прав или по еще какой либо смысловой идее админа. Если вы задумали много групп, с разными правами и прочим фишками и доступности контента, то при настройке доступов при выставлении галочек возникает сущий ад!!! В этом режиме отсутствует форматирование групп, которое могло бы как то визуально своим видом (цветом) ориентировать, но тут монохром и сортировка не по смыслу а по алфавиту (((. Чтобы отсортировать группы в списке по удобному для задуманного смысла порядке установите перед названием группы закомментированное число <!--45-->ИмяГруппы и тогда во всех списках, группы расположатся в порядке вашего замысла, а не по алфавиту. И еще, один совет, изначально прописывая закоменченые числа, устанавливайте не подряд, а с промежутком, для дальнейшей удобной ПЕРЕсортировке, если решите поменять порядок.1 point
-
Отображение реальных IP адресов посетителей в логах сайта, работающего через CloudFlare
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 nginx1 point
-
Делаем профиль чуть удобнее
1 pointУменьшаем немного кнопки в профиле - "Обложка", "Настройки профиля", "Изменить профиль" и т.д. смотря какие доп. приложения установлены. По умолчанию в профиле, в мобильной версии влезает только три кнопки: После правок будет влезать пять и выглядит это куда интереснее: Идем в шаблон 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.1 point
-
Работа с members. Документация разработчика
Работа с members. Документация разработчика
bunster123123 reacted to Silence for запись
1 pointРабота с 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 ( '[email protected]' , '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: вызывается при обновлении существующей учетной записи. Расширения создаются в Центре разработчиков приложения в панели управления администратора. Перевод: Google1 point -
Настройка Cron на выполнение задач
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 года) Есть другие варианты-пишите1 point
-
Отключение проверки обновлений для Invision Community 4.x
Для отключения задач проверки обновлений на сайте нужно перейти в админцентре сайта по ссылке /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 о существовании вашего сайта.1 point
-
Аватар для Border Цвет в зависимости от группы
Аватар для 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 ваша група:1 point
-
Спойлер в IPS Community Suite 4
Спойлер в IPS Community Suite 4
bunster123123 reacted to Silence for запись
1 pointСпойлер в IPS Community Suite 4 Перейти ACP - Customization -> Toolbars и нажмите на кнопку Add Button -> Custom: Заполните поля: Button Title: spoiler Icon: загрузить изображение выбирать: Block Use option?: включить HTML: Сохранить1 point