soif
Новичок
Делаю компонент для Joomla 1.5, который должен представлять собой систему для работы с курсовыми и дипломными работами студентов. (Это моя бакалаврская)
Пока готова только админка, начитавшись разных статей про шаблон MVC, никак не могу решить, как же реализовать фронтенд. Если с админкой было всё просто: есть список преподавателей, можно добавить-удалить-редактировать преподавателя. Реализована админка с одной моделью, одним вспомогательным классом таблицы, одним контроллером, и представлением с 2-мя шаблонами (первый шаблон список преподавателей, второй шаблон форма редактирования преподавателя).
Собственно точка входа в админку это вывод списка преподавателей. Модель строит запрос, получает все данные из таблицы преподавателей. У преподавателя помимо полей ид, фио, должность, звание, есть ещё числовые поля юзер и кафедра, в юзер заносится ид пользователя из обычной таблицы пользователей джумлы , а в кафедру ид из таблицы кафедр (моего компонента). При формировании списка добавляем соответствующие имя пользователя в джумле и название кафедры из таблицы кафедр.
У модели есть функция getData($type) возвращающая список кафедр если $type='department' и список преподавателей, сформированный, как описано выше, если type пустой. (список кафедр использую в форме редактирования преподавателя для генерации селект списка), также функции getLecturer, store и delete работающие с классом TableLecturers extends JTable. Представление View в зависимости от переменной layout выводит или список или форму.
Теперь необходимо сделать фронтенд и тут для меня непонятный момент это роли пользователей. У меня предусмотренно 3 роли: это гость (или зарегистрированный пользователь, разницы нет), студент и преподаватель.
Общие функции, доступные простому пользователю:
1) просмотр списка работ
1.1) выбор конкретной работы (но прикреплённые файлы не видно) т.е. видны только автор, краткое описание, преподаватель, тематика, кафедра дата начала и окончания работы, возможно график активности по стадиям работы (будет высчитываться по файлам, опубликованным на каждой стадии работы, стадия начинается тогда, когда опубликован первый файл относящийся к ней) но насчёт графика потом, сейчас суть вне в этом.
2) поиск работ в системе: по тематике, по научному руководителю, по дате и т.д.
3) просмотр списка тематик работ
3.1) просмотр работ по данной тематике, просмотр преподавателей, занимающихся данной тематикой
Меню выносить в отдельный модуль не хочу, пока пусть будет в самом компоненте. В данном случае 3 пункта: "каталог работ" (отсюда переход на страницу, отвечающую за функцию 1.1, "поиск работы", "тематика работ" (отсюда ведёт на страницу , отвечающую за функцию 3.1)
Функции, доступные преподавателю:
1) Помимо всего вышеперечисленного, в функции 1.1 общего назначения, преподаватель видит и может скачивать любой файл из каждой стадии.
2) Список студентов, с указанием работ, и ведущих на страницы этих работ
2.1) Список студентов, заполнивших форму, указавших в качестве научного руководителя, данного преподавателя, после подтверждения студент может начать пользоваться системой.
В меню добавляется дополнительный пункт: "мои студенты" по нему формируется страница с этими списками, возможно списки стоит разделить на разные страницы.
Функции, доступные студенту:
0) заполнить форму студента, с указанием научного руководителя, всех данных и создающую свою первую работу в системе. Ожидание подтверждения от научника.
1) Если из общего каталога студент выбрал свою работы попадает в 3-й пункт
2) Список работ, т.к. количество работ на каждого студента будет небольшим, по 1 работе в год, мне кажется можно не делать отдельную страницу для списка, а выводить его где-нибудь сбоку и последним пунктом "новая работа", который понадобится нескоро.
3) Собственно тоже самое что и функция 1.1 общего пользования, но с возможностью размещать и скачивать файлы для каждой стадии. Т.е. выбираем стадию, пишем комментарий, прикрепляем файл. (По-моему можно сделать с помощью mootools, ещё не пробовал) Удалять файлы и редактировать текст нельзя, чтобы не было подтасовки результатов.
Все файлы буду храниться в папке files в пользовательской части компонента, вся информация в соответствующей таблице.
Вообще говоря, в компоненте будут таблицы :
1) Кафедра (id кафедры, название, сокращённое название, факультет) факультет уберу потом
2) Тип документа: Презентация, Задание, Текст работы, Фрагмент работы, Отзыв, Рецензия,Комментарий и т.д. (ид и название типа)
3) Документы (ид документа, название, автор, тип документа, файл, стадия работы) автор, тип, файл и стадия работы хранят ид из соответствующих таблиц
4) Файлы (ид файла, заголовок, имя файла, директория, автор, дата создания и модификации) модификация наверное не нужна
5) Преподаватели (ид преподавателя, фио, должность, звание, joomla user id)
Больше 5 изображений не помещается в тему, таблиц всего 12, так что разбиваю на части в следующих сообщениях ))
Схема бд досталась готовая, как с ней работать понятно, вернёмся к функционалу, как создать конечный готовый шаблон вывода под каждую задачу я представляю себе, даже как строить страницу в зависимости от роли пользователя это понятно.
Не понятно, как организовывать модели и контроллеры, как хранить роль пользователя, допустим каждый раз при входе в компонент будет происходить идентификация роли пользователя и соответствующее построение страниц компонента, можно выполнить её 1 раз в начале и хранить в сессии. Правда я не не разбираюсь в безопасности, можно ли будет её оттуда утащить и, скажем, получить доступ к странице преподавателя??
По идее, вся логика должна ложиться на слой модели, а контроллер только обрабатывать действия пользователя.
Тут для меня начинается путаница: хочу создать 3 модели, 3 контроллера и 3 представления соответственно.
С различным количеством шаблонов вывода. И классы для работы с таблицами там, где это будет нужно.
Модели:
1) Модель общего назначения
2) Модель студента
3) Модель преподавателя
Будут одержать функции описанные выше для этих сущностей.
Класс хелпер, отвечающий за верификацию пользователя и построение меню в компоненте. При входе в компонент пользователь будет получать роль и хранить её в сессии.
Далее возможно придётся расширять функционал, как минимум обязательно нужно будет добавить график активности студента.
Меня мучает вопрос: корректно ли я планирую свой компонент с точки зрения MVC ??
Дальше буду приводить код, там будут замечания думаю, но пока не взялся за фронтедн, есть ли ошибки в проектировании?? Это мой первый опыт веб-разработки. Рад услышать любую критику.
Пока готова только админка, начитавшись разных статей про шаблон MVC, никак не могу решить, как же реализовать фронтенд. Если с админкой было всё просто: есть список преподавателей, можно добавить-удалить-редактировать преподавателя. Реализована админка с одной моделью, одним вспомогательным классом таблицы, одним контроллером, и представлением с 2-мя шаблонами (первый шаблон список преподавателей, второй шаблон форма редактирования преподавателя).
Собственно точка входа в админку это вывод списка преподавателей. Модель строит запрос, получает все данные из таблицы преподавателей. У преподавателя помимо полей ид, фио, должность, звание, есть ещё числовые поля юзер и кафедра, в юзер заносится ид пользователя из обычной таблицы пользователей джумлы , а в кафедру ид из таблицы кафедр (моего компонента). При формировании списка добавляем соответствующие имя пользователя в джумле и название кафедры из таблицы кафедр.
У модели есть функция getData($type) возвращающая список кафедр если $type='department' и список преподавателей, сформированный, как описано выше, если type пустой. (список кафедр использую в форме редактирования преподавателя для генерации селект списка), также функции getLecturer, store и delete работающие с классом TableLecturers extends JTable. Представление View в зависимости от переменной layout выводит или список или форму.
Теперь необходимо сделать фронтенд и тут для меня непонятный момент это роли пользователей. У меня предусмотренно 3 роли: это гость (или зарегистрированный пользователь, разницы нет), студент и преподаватель.
Общие функции, доступные простому пользователю:
1) просмотр списка работ
1.1) выбор конкретной работы (но прикреплённые файлы не видно) т.е. видны только автор, краткое описание, преподаватель, тематика, кафедра дата начала и окончания работы, возможно график активности по стадиям работы (будет высчитываться по файлам, опубликованным на каждой стадии работы, стадия начинается тогда, когда опубликован первый файл относящийся к ней) но насчёт графика потом, сейчас суть вне в этом.
2) поиск работ в системе: по тематике, по научному руководителю, по дате и т.д.
3) просмотр списка тематик работ
3.1) просмотр работ по данной тематике, просмотр преподавателей, занимающихся данной тематикой
Меню выносить в отдельный модуль не хочу, пока пусть будет в самом компоненте. В данном случае 3 пункта: "каталог работ" (отсюда переход на страницу, отвечающую за функцию 1.1, "поиск работы", "тематика работ" (отсюда ведёт на страницу , отвечающую за функцию 3.1)
Функции, доступные преподавателю:
1) Помимо всего вышеперечисленного, в функции 1.1 общего назначения, преподаватель видит и может скачивать любой файл из каждой стадии.
2) Список студентов, с указанием работ, и ведущих на страницы этих работ
2.1) Список студентов, заполнивших форму, указавших в качестве научного руководителя, данного преподавателя, после подтверждения студент может начать пользоваться системой.
В меню добавляется дополнительный пункт: "мои студенты" по нему формируется страница с этими списками, возможно списки стоит разделить на разные страницы.
Функции, доступные студенту:
0) заполнить форму студента, с указанием научного руководителя, всех данных и создающую свою первую работу в системе. Ожидание подтверждения от научника.
1) Если из общего каталога студент выбрал свою работы попадает в 3-й пункт
2) Список работ, т.к. количество работ на каждого студента будет небольшим, по 1 работе в год, мне кажется можно не делать отдельную страницу для списка, а выводить его где-нибудь сбоку и последним пунктом "новая работа", который понадобится нескоро.
3) Собственно тоже самое что и функция 1.1 общего пользования, но с возможностью размещать и скачивать файлы для каждой стадии. Т.е. выбираем стадию, пишем комментарий, прикрепляем файл. (По-моему можно сделать с помощью mootools, ещё не пробовал) Удалять файлы и редактировать текст нельзя, чтобы не было подтасовки результатов.
Все файлы буду храниться в папке files в пользовательской части компонента, вся информация в соответствующей таблице.
Вообще говоря, в компоненте будут таблицы :
1) Кафедра (id кафедры, название, сокращённое название, факультет) факультет уберу потом

2) Тип документа: Презентация, Задание, Текст работы, Фрагмент работы, Отзыв, Рецензия,Комментарий и т.д. (ид и название типа)

3) Документы (ид документа, название, автор, тип документа, файл, стадия работы) автор, тип, файл и стадия работы хранят ид из соответствующих таблиц

4) Файлы (ид файла, заголовок, имя файла, директория, автор, дата создания и модификации) модификация наверное не нужна

5) Преподаватели (ид преподавателя, фио, должность, звание, joomla user id)

Больше 5 изображений не помещается в тему, таблиц всего 12, так что разбиваю на части в следующих сообщениях ))
Схема бд досталась готовая, как с ней работать понятно, вернёмся к функционалу, как создать конечный готовый шаблон вывода под каждую задачу я представляю себе, даже как строить страницу в зависимости от роли пользователя это понятно.
Не понятно, как организовывать модели и контроллеры, как хранить роль пользователя, допустим каждый раз при входе в компонент будет происходить идентификация роли пользователя и соответствующее построение страниц компонента, можно выполнить её 1 раз в начале и хранить в сессии. Правда я не не разбираюсь в безопасности, можно ли будет её оттуда утащить и, скажем, получить доступ к странице преподавателя??
По идее, вся логика должна ложиться на слой модели, а контроллер только обрабатывать действия пользователя.
Тут для меня начинается путаница: хочу создать 3 модели, 3 контроллера и 3 представления соответственно.
С различным количеством шаблонов вывода. И классы для работы с таблицами там, где это будет нужно.
Модели:
1) Модель общего назначения
2) Модель студента
3) Модель преподавателя
Будут одержать функции описанные выше для этих сущностей.
Класс хелпер, отвечающий за верификацию пользователя и построение меню в компоненте. При входе в компонент пользователь будет получать роль и хранить её в сессии.
Далее возможно придётся расширять функционал, как минимум обязательно нужно будет добавить график активности студента.
Меня мучает вопрос: корректно ли я планирую свой компонент с точки зрения MVC ??
Дальше буду приводить код, там будут замечания думаю, но пока не взялся за фронтедн, есть ли ошибки в проектировании?? Это мой первый опыт веб-разработки. Рад услышать любую критику.