Система управления web-сайтом «Редактор»
Версия 3.0
Руководство разработчика
Концепция 1
Структура 1
Классы данных 1
Структура класса 1
Списки значений 1
Шаблоны вывода 2
Дизайн 2
Пользователи 2
Права на доступ к разделам сайта 2
Права на доступ к системе администрирования 3
Алгоритм проверки 3
Функции и переменные 3
Переменные используемые в шаблонах дизайна 3
Функции используемые в шаблонах дизайна 3
Переменные используемые в шаблонах вывода объектов класса 5
Концепция
Сайт в системе представлен как совокупность следующих сущностей:
1 Структура: древовидная структура разделов сайта.
2 Классы данных (сами данные заносятся в БД и редактируются пользователями сайта)
3 Дизайн: набор HTML-шаблонов оформления страниц сайта.
4 Пользователи: каждый пользователь может иметь права на доступ к определённым разделам сайта и системе администрирования в целом.
Более подробно эти сущьности и связи между ними рассмотрены ниже.
Структура
Описывает древовидную структуру разделов сайта. Главная страница соответствует первому корневому элементу дерева.
Для каждого раздела указывается, данные какого класса будут в нём отображаться и настройки этого отображения (количество объектов, показываемых на странице, сортировка и т. п.). Но следует помнить, что в разделе содержаться только те данные, которые были в нём созданы. Т. е. если задать для двух разделов один и тот же класс данных, это не будет означать, что они оба будут содержать одинаковый набор объектов: объекты создаваемые в одном разделе не видны в другом.
Также к разделу привязывается один из шаблонов дизайна (либо указывается, что визуальное оформление должно наследоваться от родительского раздела).
Для каждого раздела указывается, будет ли он включаться в карту сайта или нет. Если раздел не входит в карту сайта, то туда также не входят и все его дочерние подразделы.
В системе имеется возможность включения премодерации объектов раздела: это такой режим работы, при котором вновь создаваемые объекты будут показываться на сайте только после их проверки пользователями, имеющими право на премодерацию.
Классы данных
Структура класса
Класс данных - это шаблон, в соответствии с которым будут храниться и редактироваться данные на сайте. Он описывает структуру этих данных как набор полей следующих типов:
- Строка – текстовая строка, длинной до 255 символов. Целое число. Текстовый блок – блок текста произвольного объёма, возможно с HTML-оформлением. Дата и время. Файл – произвольный файл сохраняемый на сервере (в т. ч. изображения). Множество – тип, позволяющий приписывать полю несколько заранее определённых значений из какого-либо списка значений. Логическое (да/нет) – поле может принимать два значения: «да» и «нет». Список выбора (radio) – может принимать значение из некоторого списка значений (выбор – галочка в списке элементов «RadioButton»). Список выбора (combobox) – может принимать значение из некоторого списка значений (выбор – из выпадающего списка). Дробное число.
При определении класса, для каждого поля указывается: его название, ключевое слово (латинскими символами), тип данных (см. выше), формат (данные, специфичные для каждого типа), и галочка «Обязательно для заполнения» (показывает, может ли поле оставаться пустым).
Для типа «Дата и время» в поле «Формат» записывается формат вывода даты и времени в соответствии с правилами PHP-функции date(). Для полей типа «Множество» и «Список выбора» «формат» должен содержать ключевое слово списка, значения которого будут использоваться для заполнения.
Для остальных типов даных, «Формат» - это значение поля по умолчанию.
Списки значений
Для заполнения полей типа «Множество» и «Список выбора» используются списки значений. Сами списки и их элементы доступны на вкладке системы администрирования: «Списки значений». Для каждого списка указывается его название и ключевое слово. Чтобы использовать значения некоторого списка для заполнения поля, необходимо в этом поле, в строке «формат» прописать ключевое слово этого списка.
Шаблоны вывода
Объекты каждого класса могут показываться на страницах сайта в одном из трёх видов (в соответствии с одним из своих шаблонов вывода):
1 В виде списка с постраничным выводом,
2 Один объект на странице,
3 В виде формы для редактирования объекта.
Шаблонов вывода у класса может быть несколько: например, разные шаблоны для новости на главной странице и в разделе «Новости». Какой из них использовать в данном конкретном разделе сайта указывается в настройках этого раздела.
Каждый HTML-шаблон состоит из трёх подшаблонов, соответствующих трём вышеперечисленным способам вывода (см. «Функции и переменные, используемые в шаблонах вывода объектов класса»).
Дизайн
Под дизайном страницы понимается набор HTML-шаблонов оформления внешнего вида этой страницы: «верхней» и «нижней» частей. «Верхняя» и «нижняя» части - понятия относительные, и обозначают не место раположения на странице, а порядок вывода. Т. е. сначала выводится «верхняя» часть страницы, потом сами данные, и потом «нижняя» часть.
Один дизайн может быть назначен нескольким страницам. В этом случае они визуально будут выглядеть одинаково, и различие только в том, данные какого класса будут выводиться на них (см. «Структура»).
Пользователи
Каждый пользователь может иметь привилегии на доступ к различным разделам сайта, и системе администрирования.
Пользователи в системе идентифицируются по имени и паролю. Однако, есть возможность, для каждого пользователя ограничить перечень ip-адресов, с которых ему будет разрешён вход (для этого, в настройках пользователя надо поставить галочку: «Разрешить доступ только с указанных ip-адресов» и ввести перечень этих адресов).
Права на доступ к разделам сайта
Каждый пользователь системы имеет свой набор привилегий на доступ к различным разделам сайта. При этом различаются привилегии на доступ ко всем объектам раздела, и на доступ к своим объектам (т. е. объектам, созданным самим пользователем). Для каждой из этих групп объектов выставляются права на доступ, которые бывают пяти уровней:
1 «Нет» - у пользователя нет никакого доступа к объектам раздела;
2 «Список» - пользователь может просматривать только перечень объектов в разделе (не имеет доступа к самим объектам);
3 «Просмотр, список» - то же что в п.2 + возможность смотреть сами объекты;
4 «Добавление, просмотр, список» - то же что в п.3 + права на создание новых объектов в разделе;
5 «Полный доступ» - права на просмотр, создание, изменение и удаление объектов в разделе.
Нельзя задать две привилегии разных уровней на один раздел для одного пользователя.
Также, в системе присутствует один предопределённый пользователь (в списке обозначен как «Все»), привилегии которого распространяются на всех пользователей системы, в том числе и неавторизованных.
Пример: допустим у некоторого пользователя установлен следующий набор привилегий на раздел «Статьи»: Право на все объекты: -> «Просмотр, список»; Право на свои объекты -> «Полный доступ». Это означает, что данный пользователь, зайдя в раздел «Статьи», будет иметь возможность просматривать любые статьи, добавлять собственные статьи, редактировать и удалять статьи созданные им самим (статьи, созданные другими пользователями он сможет только смотреть).
Права на доступ к системе администрирования
Любой пользователь, также может иметь права на доступ к системе администрирования сайта. На каждый модуль системы права задаются отдельно. Перечень уровней доступа и их смысл такой же как и для разделов сайта.
Алгоритм проверки
Т. о. при попытке доступа пользователя к какому-либо разделу сайта (или можулю системы администрирования) система действует по следующему алгоритму:
1 Сравнение уровня привилегий всех пользователей и текущего (если он авторизовался) на доступ к данному разделу. И выборка максимального из них.
2 Если привилегии на данный раздел не заданы, и в настройках раздела стоит галочка «Наследовать права доступа», запрашиваются привилегии на родительский раздел. Иначе доступ откланяется.
3 Если это привилегия только на просмотр - осуществляется простой вывод объектов. Если это привилегия на редактирование - то для всех объектов отображаются кнопки управления (см. «Функции и переменные, используемые в шаблонах вывода объектов класса»). Если привелегий на данный объект нет - выводится сообщение «У вас нет прав на доступ к этим данным».
Функции и переменные
Все HTML-шаблоны должны быть обработаны следующим образом: необходимо заменить все символы ” на комбинацию \” (экранировать двойные кавычки). В шаблонах оформления (дизайна, вывода объектов) можно использовать функции и переменные описанные ниже. Для вывода значения переменной необходимо в теле шаблона просто указать её имя: «<td>$variable_name</td>». Для вызова функции необходимо использовать конкатенацию строк по правилам PHP: «<td>”.function_name([параметры]).”</td>». И вообще, полезно рассматривать эти шаблоны в контексте использования PHP-функции print (т. е. на них распространяются все привила, действующие на строки, выводимые этой функцией).
Переменные используемые в шаблонах дизайна
$sys_chapter_id
Идентификатор текущего раздела (числовое значение).
$sys_curr_chapter
URL текущего раздела (например: “index. php? chapter_id=[id текщего раздела]”). Можно использовать в ссылках следующим образом: <a href="$sys_curr_chapter&auth=login”> - аутентификация в текущем разделе.
$sys_current_level
Уровень вложенности текущего раздела в структуре сайта (для корневых разделов = 1).
$sys_site_title
Название проекта (из раздела «Настройки»)
$sys_site_url
URL проекта (из раздела «Настройки»)
$sys_site_description
Описание проекта (из раздела «Настройки»)
Функции используемые в шаблонах дизайна
sys_navigate($active, $unactive, $devider, $level)
Выводит навигацию уровня $level для текущего раздела (выводятся только разделы у которых отмечен фложок: «показывать на сайте»).
$active, $unactive - шаблоны вывода активного и неактивного разделов. При их описании можно использовать макроопределения %ID%, %KEYWORD%, %NAME% и %URL%, содержащие соответственно идентификатор, ключевое слово, название и URL раздела (если элементом навигации выступает объект в разделе, то для него макроопределение %KEYWORD% недоступно).
$devider – строка - разделитель элементов навигации.
$level - уровень навигации в структуре сайта (главная страница = 1).
Пример: (выводит «братьев» текущего раздела, сам текущий раздел выделен жирным шрифтом): sys_navigate('<a href=%URL%>%NAME%</a><br>', '', '<b>%NAME%</b><br>', $sys_current_level)
Для вывода «детей» надо указать: $sys_current_level + 1.
sys_parent($template, $level)
Выводит родительский раздел уровня $level, в соответствии с шаблоном $template. В шаблоне доступны макроопределения: %ID%, %KEYWORD%, %NAME% и %URL%.
sys_current_path($delimiter, $is_href)
Выводит путь к текущему разделу («хлебные крошки»).
$delimiter - разделитель элементов (по умолчанию равен « / » ).
$is_href - TRUE - элементы пути будут ссылками на соответствующие разделы, FALSE - не будут (по умолчанию равен TRUE).
sys_site_map($prefix, $suffix, $line_prefix, $line_suffix, $prefix_recurse, $links)
Выводит карту сайта. Внешним видом можно управлять определяя CSS-классы для элементов различных уровней вложенности. Эти классы должны называться: site_map_level_X, где Х - уровень вложенности элемента (1 - верхний уровень).
$prefix, $suffix - обрамление всего дерева (или каждой ветви, в зависимости от параметра $prefix_recurse). По умолчанию равны <ul>…</ul>.
$line_prefix, $line_suffix - обрамление элементов дерева (по умолчанию равны <li>…</li>).
$prefix_recurse - если равно TRUE, то парой $prefix, $suffix обрамляется каждая ветвь, иначе - только всё дерево целиком (по умолчанию TRUE).
$links – служебный параметр (= TRUE), определяет формат возвращаемых данных. Для вывода карты сайта всегда должен быть равен TRUE.
sys_inc($file)
Выводит файл $file.
sys_search()
Выводит форму для поиска строки с помошью встроенного поискового механизма.
sys_objects_list($chapter_id, $params, $template_number, $show_admin_buttons)
Выводит объекты из раздела, указанного в $chapter_id, с параметрами, заданными в $params.
$chapter_id - идентификатор раздела;
$params - параметры отображения объектов в разделе (строка запроса, как в URL этого раздела).
$template_number – номер шаблона оформления объектов.
В $params можно передавать следующие параметры:
Параметр | Назначение | Возможные значения | Описание |
do | Задаёт действие при отображениии раздела | view_list | Выводит список объектов |
view_single | Выводит объект с указанным идентификатором (его надо дополнительно указать: data_id=[идентификатор]) | ||
view_first | Выводит первый объект из раздела | ||
sort_field | Задание сортировки объектов | Название столбца, по которому будет осуществляться сортировка | |
sort_direct | asc | По возрастанию значений поля | |
desc | По убыванию значений поля | ||
filter_field[] | Задание фильтрации объектов | Перечень столбцов, по которым будет осуществляться фильтрация | |
filter_value[] | Значения, с которым будут сравниваться поля | ||
filter_field_value[] | Значение поля в БД, с которым будут сравниваться поля (используется для фильтрации по полям типа «Множество», когда надо выбрать все объекты у которых набор элементов поля типа «множество» перескается с другим набором). Если некоторые поля из массива filter_field[] должны сравниваться со значениями из filter_value[], а другие со значениями из filter_field_value[], то необходимо обеспечить нужный порядок следования элементов в этих массивах. Т. е. для каждого значения filter_field[] надо поставить пустое значение в filter_field_value[] и наоборот. |
Пример 1: sys_objects_list(139, “filter_field[]=name&filter_field[]=keyword&filter_value[]=поле&filter_value[]=слово”, 0) – приведённый вызов выведет все объекты из раздела с id = 139 у которых поле «name» содержит строку «поле» и поле «keyword» содержит значение «слово».
Переменные используемые в шаблонах вывода объектов класса
В шаблонах вывода объектов класса можно использовать все переменные и функции, доступные в шаблонах дизайна.
Для вывода полей объекта следует использовать переменные вида: $f_[ключевое слово поля]. Т. е. если объект имеет поле «Текст» (ключевое слово «text»), то для его вывода жирным шрифтом необходимо написать: <b>$f_text</b>.
Также, для полей типа «множество» доступна переменная $s_[ключевое слово поля]. Она содержит значение поля в базе данных (численное значение, однозначно идентифицирующее набор элементов множества для этого объекта). Эту переменную можно использовать для фильтрации по полям типа «множество» (см. описание параметра сортировки «filter_field_value[]» в разделе «Функции используемые в шаблонах дизайна»).
У всех объектов, независимо от их полей, есть предопределённое поле $f_view_count. В нём содержиться количество просмотров этого объекта пользователями.
Также доступны дополнительные переменные и функции:
$sys_data_id
Доступна для использования только в шаблонах «Объект в списке» и «Один объект на странице». Содержит идентификатор текущего объекта. Например ссылка на один объект на странице выглядит слудующим образом: <a href="$sys_curr_chapter&data_id=$sys_data_id&do=view_single">
$sys_curr_data
Доступна для использования только в шаблонах «Объект в списке» и «Один объект на странице». Содержит URL текущего объекта в формате (“index. php? chapter_id=[id текщего раздела]&data_id=[id объекта]”). Например ссылка на один объект на странице выглядит слудующим образом: <a href="$sys_data_id&do=view_single">
$sys_admin_buttons
Содержит HTML-код управляющих кнопок. При использовании в шаблонах «Префикс списка объектов» и «Суффикс списка объектов» - это кнопки управления всеми объектами в разделе («добавить», «удалить все»). В шаблонах «Объект в списке» и «Один объект на странице» - кнопки управления текущим объектом («изменить», «удалить»).
Если у пользователя отсутствуют права на редактирование объектов данного класса, то содержит пустую строку.
$sys_page_navigator
Содержит HTML-код строки выбора страницы с объектами, при постраничном выводе. Если страница только одна - содержит пустую строку.
$sys_object_number
Содержит номер объекта в списке вывода


