Если на сайте предусмотрены пользователи только одного типа, то для их идентификации достаточно штатного списка зарегистрированных пользователей, который находится в таблице users. Примеры сайтов с одним типом пользователей приведены в разделе "Сайт с пользователями одного типа".
А как сделать сайт, в котором данные отображались бы по-разному для разных типов пользователей. Например, на сайте по трудоустройству могут быть следующие группы пользователей: работодатели, соискатели, рекламодатели.
В системе Blox CMS для внешних пользователей предусмотрена только одна роль, а именно: редактор собственных записей (автор). Как в рамках только этой роли сделать сайт с несколькими группами внешних пользователей?
Можно было бы формировать списки пользователей по группам с помощью встроенного класса Proposition, который позволяет фиксировать любые отношения между любыми объектами сайта. Но можно всё можно сделать проще - об этом читайте ниже.
Кроме идентификации пользователя, как зарегистрированного, на сайте нужно определять его принадлежность к той или иной группе. Предлагается следующий вариант формирования таких списков групп.
После регистрации на сайте (которая заключается в вводе логина, пароля и email) пользователю будет предложено заполнить более подробную анкету (профиль) как члена той или иной группы. У разных групп анкеты будут разными.
Пользователи, вводя информацию о себе, будут формировать списки групп. На каждого пользователя должна быть только одна запись в блоке анкеты. В шаблоне с анкетой должно быть предусмотрено поле для идентификатора пользователя.
Теперь, чтобы проверить, является данный пользователем членом группы, будет достаточно проверить в блоке анкеты наличие хотя бы в одной записи с идентификатором данного пользователя.
Если в шаблонах ничего дополнительного не предпринимать, то, и посетители, и авторы увидят одно и тоже, кроме того, что авторы будут видеть кнопки редактирования на своих записях. Однако, цели, с которыми заходят на сайт посетители и авторы, разные: первые что-то ищут, а вторые редактируют свои данные. И авторам будет неудобно искать собственные записи среди остальных записей.
Поэтому было бы правильнее сделать совершенно разные страницы для редактирования и для публичного просмотра. К тому же, автор по отношению к другим авторам всегда является простым посетителем.
Лучше на сайте сделать два типа страниц: публичные страницы и приватные. Последние должны быть доступны только для авторизованных пользователей. Совокупность приватных страниц назовем личным кабинетом. Соответственно должно быть два меню: публичное меню и приватное.
Одни и те же блоки путем делегирования будут представлены, как на публичных, так и на приватных страницах. В шаблонах таких блоков должно быть предусмотрено, чтобы на приватных страницах отображались записи только самого автора.
Концепция списков групп и личного кабинета реализована в представленном ниже сайте по трудоустройству.
На этом сайте есть две группы внешних зарегистрированных пользователей: работодатели и соискатели. Работодатели могут размещать вакансии, а соискатели - свои резюме и портфолио.
Вы можете скачать комплект шаблонов этого сайта. В комплекте – 7 основных шаблонов, поэтому коды в данной статье приводить не будем. Шаблоны короткие – в среднем по 15 строк кода. Дадим только несколько комментариев.
В дескрипторе этого шаблона (файл _page.tdd) имеются настройки сайта, а именно, глобальные переменные с указанием номеров некоторых страниц и блоков. Вам не придется изменять их, если в самом начале обойти все пункты меню по порядку, как это описано ниже:
Сначала нужно щелкнуть по каждой ссылке публичного меню:
|
При щелчке по последней ссылке (Личный кабинет) появится приватное меню:
Это меню нужно также пройти сверху вниз. |
Настройки из файла _page.tdd можно перенести в экстраданные или в конфигурационный файл config.php (чтобы они были на виду).