(ОБНОВЛЕНИЕ) Как пользователю дать возможность менять группу пользователей в своем профиле 2.X

546
(ОБНОВЛЕНИЕ) Как пользователю дать возможность менять группу пользователей в своем профиле
Как мы знаем, на данный момент устанавливать группу для пользователей возможно только в админ-панели.
Как быть, если для нашего проекта понадобилось, чтобы пользователи могли сами менять свою группу в настройках своего профиля?
В этом уроке я расскажу вам, как это реализовать.
Нам понадобится создать всего 7 файлов, и немного отредактировать 1 файл шаблона.
Итак, приступим:

1) (1-й файл) Создаем экшн.
В папке system/controllers/users/actions/ Создаем файл profile_edit_groups.php
с таким содержанием:
Спойлер
2) (2-й файл) Создаем шаблон для страницы с выбором группы.
В папке templates/default/controllers/users/ Создаем файл profile_edit_groups.tpl.php
с таким содержанием:
Спойлер
3) (3-й файл) Создаем поле "Группы профиля".
В папке system/fields/ Создаем файл listgroupsprofile.php
с таким содержанием:
Спойлер
4) (4-й файл) Создаем поле "Группы-ограничения".
В папке system/fields/ Создаем файл listgroupsset.php
с таким содержанием:
Спойлер
5) (5-й файл) Создаем шаблон для "Группы профиля".
В папке templates/default/assets/fields/ Создаем файл listgroupsprofile.tpl.php
с таким содержанием:
Спойлер
6) (6-й файл) Создаем шаблон для "Группы-ограничения".
В папке templates/default/assets/fields/ Создаем файл listgroupsset.tpl.php
с таким содержанием:
Спойлер
7) (7-й файл) Создаем модель.
В папке system/controllers/ Создаем ПАПКУ usersgroups
В папке system/controllers/usersgroups/ Создаем файл model.php
с таким содержанием:
Спойлер
После того, как файлы созданы, остается отредактировать 1 файл шаблона.
В нем мы добавим один пункт меню, чтобы в настройках можно было перейти на страницу редактирования группы пользователя.

8) В папке templates/default/controllers/users/ В файле profile_edit_header.tpl.php
заменяем все содержимое на этот код:
Спойлер
Теперь делаем запрос в БД. В запросе вместо "БАЗА_ДАННЫХ" укажите свою.

Код PHP:
  1. CREATE TABLE `БАЗА_ДАННЫХ`.`cms_users_groups_set` ( `id` INT(1) UNSIGNED NULL DEFAULT NULL AUTO_INCREMENT , `groups` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
  2.  
  3. INSERT INTO `cms_users_groups_set` (`id`, `groups`) VALUES ('1', '---\r\n- 6\r\n');
Администратор задает ограничение, в какие группы запрещен самостоятельный переход
(ОБНОВЛЕНИЕ) Как пользователю дать возможность менять группу пользователей в своем профиле
Другим пользователям отображаются только те группы, в которые можно перейти.
(ОБНОВЛЕНИЕ) Как пользователю дать возможность менять группу пользователей в своем профиле

Готово! Теперь у пользователей вашего сайта появилась возможность изменять группу в настройках своего профиля.
Понравился урок? Ставь большой палец вверх! Это мотивирует автора создавать новые уроки!
В следующей статье мы рассмотрим: "Как вывести фотографии пользователя на странице его профиля."
Обновление шаблона Red-Ray Bootstrap 4 до 2.11
Комментарии (17)
Алексей Тимофеев 13 мая 2019 в 23:47 +2
Спасибо- полено+
ХурумБурум 15 мая 2019 в 06:39 0
Вот что значит могучий русский язык. Вместо одного получилось другое. joke
Donto 13 мая 2019 в 23:50 +1
Очень круто! Спасибо большое!
Андрей 14 мая 2019 в 01:02 0
Лайкнул, а где это может пригодиться?
SpideR 14 мая 2019 в 08:11 +2
Отлично, спасибо! Но было бы хорошо если бы в коде можно было указывать какие группы могут выбирать пользователи, указывать их id например. Потому как групп может быть много, и редакторские, и админские, и модераторские, и пользователи не должны иметь доступа к ним.
Александр 14 мая 2019 в 09:30 +4
просто и полезно, но без предустановок, какие группы можно выбирать а какие нет, просто не имеет смысла
Rainbow 14 мая 2019 в 13:29 +2
а где это может пригодиться?

Например если надо отнести себя к какой то группе (пример в Sape "Вебмастера" и "Рекламодатели" и т.п.) с определенными возможностями для группы.

Однако правильно отмечено:
но без предустановок, какие группы можно выбирать а какие нет, просто не имеет смысла
Red Ray 14 мая 2019 в 19:58 +2
Решение сделал для темы https://instantcms.ru/forum/thread31728-1.html#310921
Полностью с вами согласен, что нужно добавить ограничение для выбора группы.
Добавлю эту возможность.
Red Ray 14 мая 2019 в 23:54 +2
Добавил ограничение, в какие группы запрещен самостоятельный переход.
Теперь пользователи могут перейти только в те группы, в которые разрешил администратор.
@Honko 15 мая 2019 в 00:36 0
еще не попробовал, но по описанию получилось просто шикарно!
SpideR 15 мая 2019 в 07:58 +1
Отлично! Может сделаете в виде компонента и выложите в каталог дополнений?
Red Ray 15 мая 2019 в 11:30 +3
Да, сделаю отдельным компонентом и выложу в каталог дополнений.
Rainbow 15 мая 2019 в 13:25 0
Да, сделаю отдельным компонентом и выложу в каталог дополнений.

Да, и кстати отличны способ монетизировать разработку, кто хочет может изменять файлы по этой инструкции, а кто не хочет, может купить готовое решение.

Впрочем это конечно Вам решать.

И да, в случае компонента было бы неплохо добавить виджет (который можно разместить где удобно) с кнопками перехода в группу.

Зарегистрировался на сайте, попал в группу например "Новые", а дальше уже видишь кнопки виджета и выбираешь в какую группу надо...
(Такой упрощенный вариант, что бы не решать вопрос как регистрировать Гостя...).
Александр 15 мая 2019 в 09:53 0
Вот теперь отлично.

У smartcontrol был платный компонент который в том числе мог делать переход/вступление/выход по ссылке, но выше 2.10 он неработает
Donto 15 мая 2019 в 10:37 0
И сам он, к сожалению, куда-то пропал
lesterkey 17 мая 2019 в 08:59 0
Простите меня! просто читаю, и думаю... куда то обсуждение пошло в сторону! (платность, монетизация, свободный выбор группы)
scratch Как я вижу?: Автор предложил решение , за что ему огромный респект и жирный плюс!
Но по моему данное бесплатное решение может подойти в одном варианте: если есть скажем закрытый корпоративный сайт, где сотрудники сами наполняют его с учетом наделенных прав. и после регистрации они с легкостью могут выбрать свою группу и продолжить работать!
А уж если говорить о (Вебмастерах, разработчиках или рекламодателях) ,тут конечно надо смотреть что мы хотим получит от сайта на "выхлопе". если уж люди хотят зарабатывать или продавать на вашем проэкте то почему бы не взять с низ "мзду"...?
Так что есть отличный компонент Биллинг пользователей который решает все задачи сразу... + дает массу других возможностей.. (создал тарифный план Рекламодатель дал описание. назначил цену перехода в эту группу и время (например на год.) Человек зарегистрировался... захотел дать рекламку, купил тариф... получил право на рекламу и дело в шляпе.. прошел год человек опять пользователь...
Так что ОГРОМНОЕ спасибо за дополнение и развитие InstantCMS... ставим автору лайки и стимулируем его на дальнейшие идеи...
joke Простите меня если кого то зацепил!
Rainbow Вчера в 11:12 0
платность, монетизация, свободный выбор группы

Если об моем предложении, может я не правильно выразился... я имел ввиду монетизацию для автора (а не нас вебмастеров)..., что Red Ray может сделать платный компонент))

... кто хочет делает себе бесплатно по инструкции, или покупает компонент (если не хочет возится с кодом)...

Относительно использования я привел лишь пример на вопрос:
а где это может пригодиться?

Естественно использовать можно на сколько хватит ума и фантазии мастера))