Система управления web-сайтом «Редактор»

Версия 3.0

Руководство разработчика

Концепция 1

Структура 1

Классы данных 1

Структура класса 1

Списки значений 1

Шаблоны вывода 2

Дизайн 2

Пользователи 2

Права на доступ к разделам сайта 2

Права на доступ к системе администрирования 3

Алгоритм проверки 3

Функции и переменные 3

Переменные используемые в шаблонах дизайна 3

Функции используемые в шаблонах дизайна 3

Переменные используемые в шаблонах вывода объектов класса 5


Концепция

Сайт в системе представлен как совокупность следующих сущностей:

Структура: древовидная структура разделов сайта.

Классы данных (сами данные заносятся в БД и редактируются пользователями сайта)

Дизайн: набор HTML-шаблонов оформления страниц сайта.

Пользователи: каждый пользователь может иметь права на доступ к определённым разделам сайта и системе администрирования в целом.

Более подробно эти сущьности и связи между ними рассмотрены ниже.

Структура

Описывает древовидную структуру разделов сайта. Главная страница соответствует первому корневому элементу дерева.

Для каждого раздела указывается, данные какого класса будут в нём отображаться и настройки этого отображения (количество объектов, показываемых на странице, сортировка и т. п.). Но следует помнить, что в разделе содержаться только те данные, которые были в нём созданы. Т. е. если задать для двух разделов один и тот же класс данных, это не будет означать, что они оба будут содержать одинаковый набор объектов: объекты создаваемые в одном разделе не видны в другом.

НЕ нашли? Не то? Что вы ищете?

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

Для каждого раздела указывается, будет ли он включаться в карту сайта или нет. Если раздел не входит в карту сайта, то туда также не входят и все его дочерние подразделы.

В системе имеется возможность включения премодерации объектов раздела: это такой режим работы, при котором вновь создаваемые объекты будут показываться на сайте только после их проверки пользователями, имеющими право на премодерацию.

Классы данных

Структура класса

Класс данных - это шаблон, в соответствии с которым будут храниться и редактироваться данные на сайте. Он описывает структуру этих данных как набор полей следующих типов:

    Строка – текстовая строка, длинной до 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

Содержит номер объекта в списке вывода