WebMaster |
Отправлено: 12 марта 2014 — 07:57
|
Advanced Member
Покинул форум
Сообщений всего: 428
Дата рег-ции: Окт. 2013
Репутация: 32
|
На счёт проверки доступа к определённым функциям, тоже есть наработки:
CODE:
user::checkForumAccess($forum_id, $access_name, $group_id=-1); // Проверяет доступ к функции отдельного форума, например может ли пользователь создавать темы в определённом форуме
user::checkGroupAccess($access_name, $group_id=-1); // Проверяет общие права доступа, например может ли пользователь отправлять ЛС
Структура MySQL таблицы с настройками доступа такова:
CODE:
CREATE TABLE IF NOT EXISTS `exbb_access` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`group_id` int(25) NOT NULL,
`forum_id` int(25) NOT NULL,
`access_name` varchar(255) NOT NULL,
`access_value` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Если у поля forum_id стоит значение 0 - то настройка является общей для группы(например "Может ли пользователь отправлять ЛС" |
|
|
1Bot |
Отправлено: 12 марта 2014 — 14:09
|
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
Цитата:Модель - содержит бизнес-логику приложения и включает методы выборки (это могут быть методы ORM), обработки (например, правила валидации) и предоставления конкретных данных, что зачастую делает ее очень толстой, что вполне нормально.
Модель не должна напрямую взаимодействовать с пользователем. Все переменные, относящиеся к запросу пользователя должны обрабатываться в контроллере.
Модель не должна генерировать HTML или другой код отображения, который может изменяться в зависимости от нужд пользователя. Такой код должен обрабатываться в видах.
Одна и та же модель, например: модель аутентификации пользователей может использоваться как в пользовательской, так и в административной части приложения. В таком случае можно вынести общий код в отдельный класс и наследоваться от него, определяя в наследниках специфичные для подприложений методы.
Вид - используется для задания внешнего отображения данных, полученных из контроллера и модели.
Виды cодержат HTML-разметку и небольшие вставки PHP-кода для обхода, форматирования и отображения данных.
Не должны напрямую обращаться к базе данных. Этим должны заниматься модели.
Не должны работать с данными, полученными из запроса пользователя. Эту задачу должен выполнять контроллер.
Может напрямую обращаться к свойствам и методам контроллера или моделей, для получения готовых к выводу данных.
Виды обычно разделяют на общий шаблон, содержащий разметку, общую для всех страниц (например, шапку и подвал) и части шаблона, которые используют для отображения данных выводимых из модели или отображения форм ввода данных.
Контроллер — связующее звено, соединяющее модели, виды и другие компоненты в рабочее приложение. Контроллер отвечает за обработку запросов пользователя. Контроллер не должен содержать SQL-запросов. Их лучше держать в моделях. Контроллер не должен содержать HTML и другой разметки. Её стоит выносить в виды.
В хорошо спроектированном MVC-приложении контроллеры обычно очень тонкие и содержат только несколько десятков строк кода. Логика контроллера довольно типична и большая ее часть выносится в базовые классы.
Модели, наоборот, очень толстые и содержат большую часть кода, связанную с обработкой данных, т.к. структура данных и бизнес-логика, содержащаяся в них, обычно довольно специфична для конкретного приложения.
Если в представлении необходим вывод циклических данных, то проще в цикле как раз и вызывать вывод представления для отдельных элементов. |
|
|
WebMaster |
Отправлено: 13 марта 2014 — 07:46
|
Advanced Member
Покинул форум
Сообщений всего: 428
Дата рег-ции: Окт. 2013
Репутация: 32
|
Цитата:Дополнительно рекомендую еще более структурировать код вокруг сущностей форума, т.е. использовать классы для описания пользователя, форума, группы, категории, сообщения и т.д. и описать в классах основные действия с вызовом событий до/после действий и при исключениях.
Написал класс для описания пользователя... Использовать можно так:
CODE:
// Изменение пользователя
$id = 1; // ID пользователя
$user = new User($id);
$user->setPosts($user->getPosts()+1);
$user->setName('Пользователь!');
$user->save(); // Сохранить новые данных в БД
// Создание пользователя
$user = new User();
$user->setLogin('UserLogin');
$user->setPassword('password');
$user->setMail('mail@mai.ru');
$user->setPosts(0);
$user->setName('Вася');
$user->setGroupId(3);
$user->save();
// Удаление пользователя
$user = new User(1);
$user->delete();
Таблица для пользователей в БД выглядит так, полей минимум.
CODE:CREATE TABLE IF NOT EXISTS `exbb_users` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`login` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`mail` varchar(50) NOT NULL,
`posts` int(10) NOT NULL,
`name` varchar(50) NOT NULL,
`group_id` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
|
|
YuraP0d |
Отправлено: 7 июня 2014 — 19:53
|
Member
Покинул форум
Сообщений всего: 133
Дата рег-ции: Июнь 2013
Репутация: 2
|
Привет всем, нужна помощь, есть страница на которой выводится форма коментариев спомощью JS
CODE:<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<link rel="stylesheet" href="/comment/ecomment.css" type="text/css"></script>
позже я подключил на эту страницу ещё один JS для увеличения картинок с классом CODE:class="magnify leftimg" это стиль размещения
CODE:<script type="text/javascript" src="/js/jquery.magnifier.js"></script>
картинки увеличиваются а форма с коментариями теперь не работает, либо отображается но не работает, либо её нет вообще(по разному пробовал), это из-за второго JS, можно ли его подключить так, что бы всё работало?
полностью всё рамещается так
CODE:<head>
<meta charset="UTF-8">
<title>...</title>
<meta name="description" content="...">
<meta name="keywords" content="...">
<link href="/style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<link rel="stylesheet" href="/comment/ecomment.css" type="text/css">
<script type="text/javascript" src="/js/jquery.magnifier.js"></script>
</head> (Отредактировано автором: 7 июня 2014 — 19:58) |
|
|
|