Как убрать людей без фото с списка сайт / users

InstantCMS 2.X

Где находится файл которой формирует этот список сайт / users

#1 18 января 2020 в 17:43
такая строчка $ Model-> filterNotNull ( 'avatar'); сработает?
#2 18 января 2020 в 21:01

такая строчка $ Model-> filterNotNull ( 'avatar'); сработает?

@andriu3240
Сработает.
Сделайте хук profiles_list_filter и в нем эту строчку используйте. Тогда не придется каждый раз при обновлении править код.
#3 18 января 2020 в 23:08
Если бы я знал как те хуки делать. Укажите где тот файл находится?
#4 18 января 2020 в 23:25

Укажите где тот файл находится?

@andriu3240
Он не находится, а создается заново.
Напишите мне в личку, расскажу как создать хук.
-----------------------------------------------------------------------------
Как выяснилось, многим нужно это "тайное знание". smile
Расскажу прямо здесь, на примере скрытия юзеров без аватар.
Чтобы изменить выборку из таблицы юзеров, нам нужно создать хук в папке hooks любого компонента. Можно даже создать новый мини-компонент, чтобы гарантированно хук не удалился при обновлении на следующую версию.
Итак: Создаем мини-компонент с произвольным, но человекопонятным именем. Допустим usersfilter.
Создаем папку usersfilter в папке /system/controllers/. В ней создаем два файла fronend.php, manifest.php и папку hooks.
Файл frontend.php нужен только для того, чтобы движок сайта увидел наш хук. Никакой логики в нем нет:
  1. <?php
  2.  
  3. class usersfilter extends cmsFrontend {
  4.  
  5. }
В файле manifest.php прописываем наш хук:
  1. <?php
  2.  
  3. return array(
  4.  
  5. 'hooks' => array(
  6. 'profiles_list_filter'
  7. )
  8.  
  9. );
  10.  
В папке hooks создаем собственно сам хук. Файл profiles_list_filter.php
Чтобы создать файл хука, нам нужно понять, что отправляется в хук и что оттуда, соответственно, должно прилететь. Смотрим строку 246 в файле \system\controllers\users\frontend.php, откуда производится запрос хука.
  1. list($fields, $this->model) = cmsEventsManager::hook('profiles_list_filter', array($fields, $this->model));
Видим, что в хук отправляется массив array($fields, $this->model)
Пишем сам хук:
  1. <?php
  2.  
  3. class onUsersfilterProfilesListFilter extends cmsAction {
  4.  
  5. public function run($data){
  6.  
  7. // Распаковываем входящий массив
  8. list($fields, $model) = $data;
  9.  
  10. // Добавляем нужный фильтр в модель
  11. $model->filterNotNull('avatar');
  12.  
  13. // Отправляем данные обратно в компонент users
  14. return array($fields, $model);
  15.  
  16. }
  17. }
Как формируется имя класса в хуке:
onИмякомпонентаИмяХукаВкемелстайле
Если неправильно напишете — ничего страшного. При включенной отладке, система потребует правильное имя компонента. Его можно скопировать и вставить в имя класса.
Fatal error: Uncaught Error: Class 'onUsersfilterProfilesListFilter' not found in...

После всех этих действий нужно пройти в Панель управления — Компоненты — Управление событиями и увидеть, что доступно новое событие profiles_list_filter. Жмем "Обновить события в базе данных".
После этого идем в просмотр юзеров и видим, что видны только юзеры с аватарами.
#5 19 января 2020 в 22:33
Спасибо получилось. Инструкция очень классная.

Немного не понял как название класса class onUsersfilterProfilesListFilter формируется. ProfilesListFilter взято с hook ( 'profiles_list_filter ?
Хочу сам сделать хук, которой удалять по крону (раз в день) людей которые, удалили свою страницу.
КАК мне найти куда его вставлять?
Далее добавлю массив в manifest.php 'hooks' => array ( 'название хука')
В папке hooks создаст файл назва_хука.php В нем Распаковываем $ model-> filterEqual ('?',?);
Удаляем (не знаю как).
Я не понял что в $ fields?
#6 19 января 2020 в 23:46

Хочу сам сделать хук, которой удалять по крону (раз в день) людей которые, удалили свою страницу.
КАК мне найти куда его вставлять?

@andriu3240
В любую папку hooks любого компонента. Лучше в наш, новосозданный компонент.
Имя хука должно начинаться с cron, например cron_usersdelete.
  1. <?php
  2.  
  3. class onUsersfilterUsersdelete extends cmsAction {
  4.  
  5. public function run(){
  6.  
  7. // Получаем всех пользователей
  8. $users = $this->model_users->getUsers();
  9.  
  10. // Перебираем массив пользователей
  11. foreach($users as $user){
  12.  
  13. // Если профайл удален - удаляем юзера
  14. if ($user['is_deleted'] == 1){
  15. $this->model_users->deleteUser($user);
  16. }
  17. }
  18. }
  19. }

Далее добавлю массив в manifest.php 'hooks' => array ( 'название хука')

@andriu3240
В случае с хуком, который срабатывает по хрону в манифест ничего добавлять не надо.

Теперь нужно пройти в Панель управления — Настройки — Планировщик и там создать новое задание.
Компонент указать usersfilter хук usersdelete. Назначить период срабатывания 1440 минут например (сутки).
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.