Сайт с пользователями разных типов

Если на сайте предусмотрены пользователи только одного типа, то для их идентификации достаточно штатного списка зарегистрированных пользователей, который находится в таблице users. Примеры сайтов с одним типом пользователей приведены в разделе "Сайт с пользователями одного типа".

А как сделать сайт, в котором данные отображались бы по-разному для разных типов пользователей. Например, на сайте по трудоустройству могут быть следующие группы пользователей: работодатели, соискатели, рекламодатели.

В системе Blox CMS для внешних пользователей предусмотрена только одна роль, а именно: редактор собственных записей (автор). Как в рамках только этой роли сделать сайт с несколькими группами внешних пользователей?

Можно было бы формировать списки пользователей по группам с помощью встроенного класса Proposition, который позволяет фиксировать любые отношения между любыми объектами сайта. Но можно всё можно сделать проще - об этом читайте ниже.

Списки групп

Кроме идентификации пользователя, как зарегистрированного, на сайте нужно определять его принадлежность к той или иной группе. Предлагается следующий вариант формирования таких списков групп.

После регистрации на сайте (которая заключается в вводе логина, пароля и email) пользователю будет предложено заполнить более подробную анкету (профиль) как члена той или иной группы. У разных групп анкеты будут разными.

Пользователи, вводя информацию о себе, будут формировать списки групп. На каждого пользователя должна быть только одна запись в блоке анкеты. В шаблоне с анкетой должно быть предусмотрено поле для идентификатора пользователя.

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

Личный кабинет

Если в шаблонах ничего дополнительного не предпринимать, то, и посетители, и авторы увидят одно и тоже, кроме того, что авторы будут видеть кнопки редактирования на своих записях. Однако, цели, с которыми заходят на сайт посетители и авторы, разные: первые что-то ищут, а вторые редактируют свои данные. И авторам будет неудобно искать собственные записи среди остальных записей.

Поэтому было бы правильнее сделать совершенно разные страницы для редактирования и для публичного просмотра. К тому же, автор по отношению к другим авторам всегда является простым посетителем.

Лучше на сайте сделать два типа страниц: публичные страницы и приватные. Последние должны быть доступны только для авторизованных пользователей. Совокупность приватных страниц назовем личным кабинетом. Соответственно должно быть два меню: публичное меню и приватное.

Одни и те же блоки путем делегирования будут представлены, как на публичных, так и на приватных страницах. В шаблонах таких блоков должно быть предусмотрено, чтобы на приватных страницах отображались записи только самого автора.

Пример сайта по трудоустройству

Концепция списков групп и личного кабинета реализована в представленном ниже сайте по трудоустройству.

На этом сайте есть две группы внешних зарегистрированных пользователей: работодатели и соискатели. Работодатели могут размещать вакансии, а соискатели - свои резюме и портфолио.

Вы можете скачать комплект шаблонов этого сайта. В комплекте – 7 основных шаблонов, поэтому коды в данной статье приводить не будем. Шаблоны короткие – в среднем по 15 строк кода. Дадим только несколько комментариев.

  • После установки сайта, начните с назначения корневого шаблона _page. Дальше вам ничего назначать не придется. Вам нужно будет просто пройти по всем ссылкам в меню (в режиме администратора). При переходе на каждую новую страницу будет происходить процесс автоматического назначения всех блоков.

    В дескрипторе этого шаблона (файл _page.tdd) имеются настройки сайта, а именно, глобальные переменные с указанием номеров некоторых страниц и блоков. Вам не придется изменять их, если в самом начале обойти все пункты меню по порядку, как это описано ниже:

    Сначала нужно щелкнуть по каждой ссылке публичного меню:
    • Работодатели
    • Вакансии работодателя
    • Соискатели
    • Портфолио соискателя
    • Выбор профиля
    • Личный кабинет
      При щелчке по последней ссылке (Личный кабинет) появится приватное меню:
    • Мой профиль
    • Мои вакансии
    • Моё резюме
    • Моё портфолио

    Это меню нужно также пройти сверху вниз.

    Настройки из файла _page.tdd можно перенести в экстраданные или в конфигурационный файл config.php (чтобы они были на виду).

  • В дескрипторах публичного и приватного меню (файлы privateMenu.tdd и publicMenu.tdd) применена альтернативная форма записи параметров template и option. В этом же файле вы найдете применение параметра field в page-данных, благодаря которым и происходит автоматическая сборка страниц сайта.
  • В шаблоне приватного меню (privateMenu.tpl) применяется метод Sql::select(). Это универсальная функция для выборки из базы данных строк таблицы.

Примечания

  • Можно сделать так, чтобы администратор или редактор делали записи в персональном разделе пользователя от имени самого пользователя – см. заметку $params['user-id-field'] и $defaults[].