пример текста основной части курсовой работы ФКН ВГУ ПиИТ
Primary tabs
2.2. Общие сведения о CMS Drupal 7
2.2.1 Общая схема функционирования системы
Для создания модуля CMS Drupal 7 необходимо понимание основ функционирования изначально поставляемого (в любом типе сборки) ядра системы.
В основе общей программной архитектуры друпал лежит широко известный паттерн MVC, или Model-View-Controller [2]. Таким образом, схема работы системы в общем виде может быть представлена следующим образом (см. рис.1)
Рис. 1. Реализация MVC модели в Drupal
2.2.2 Система хуков в Drupal
Также важно понимание процесса взаимодействие ядра системы и модулей. В друпале для осуществления подобного взаимодействия используется система так называемых «хуков» (см. определение в разделе “Используемая терминология” выше ).
Разрабатываемый модуль будет при собственной установке добавлять к материалам сайта специальное моле и использовать его в процессе работы, а потому имеет смысл проиллюстрировать взаимодействие модуля с ядром системой при вызове хуков [1] именно той частью этих вызовов, которые имеют отношение к использованию полей.
Со схемой взаимодействия и порядком вызова хуков для существующих полей можно ознакомиться, изучив диаграмму, приведённую ниже (см. рис. 2)
Рис. 2. Диаграмма последовательностей взаимодействия модуля и ядра
2.2.3. Система фильтров в Друпал
В то же самое время, стандартным решением для динамического преобразования внешнего вида страницы – во время её передачи клиенту является использование системы фильтров.
Информация о существующих фильтрах (во многом для удобства администрирования) хранится в базе данных системы, и в стандартном варианте представлена двумя таблицами (см. рис. 3)
Рис. 3. Схема хранения информации о фильтрах в СУБД
Фильтры могут быть сгруппированы, а порядок их вызова строго определён.
Так например с помощью системы с помощью фильтров в друпал традиционно осуществляются:
1. Подавление XSS атак в частности, а в целом – «обезвреживание» запрещённых символов разметки.
2. Подсветка кода программ.
3. Динамическое преобразование ссылок, записанных в виде текста в гипер-ссылки HTML разметки.
4. Обработка пользовательских тэгов во время разметки пользовательских сообщений (внедрение html, CSS).
Работа системы фильтров в друпал 7 общем виде может быть проиллюстрирована следующей схемой (см. рис.4 ).
Рис. 4. Схема работы фильтров в CMS Drupal
2.2.4. Работа с полями в CMS Drupal
Далее – помимо фильтров при разработке данного модуля были использованы поля друпал (см. определение выше). В дополнение к приведённому выше определению общего поля в друпал следует заметить, что в седьмой версии данной системы управления контентом относительно хранения данных в системе существует также понятие экземпляра поля («fieldinstance»).
Экземпляр поля представляет собой более подробную спецификацию существующего поля, и включает в своё описание в частности следующую информацию (дополнительную по отношению к той, которая используется для описания поля):
1. Тип контента , к которому добавляется поле
2. Отображаемое имя
3. Отображаемое описание поля
4. Машинное имя поля
5. Конкретный тип сущности к которой привязан данный экземпляр поля (дело в тос, что в общей информации о поле указывается массив сущностей, привязка к котором допустима – для экземпляра же требуется указать конкретную сущность )
Такая форма представления данных о полях друпал 7 также отражается и в структуре храния данных , имеющих отношение к полям в базе данных. Часть схемы базы данных Друпал 7 представлена на рисунке ниже (см. рис. 5)
Рис. 5. Схема таблиц ,хранящих информацию о полях в CMS Drupal
Так на этой схеме приведены четыре таблицы (см. рис. 3). Вкратце их назначение может быть представлено следующим образом:
1. Field_config – эта таблица хранит общую информацию о созданном поле (хранит список типов полей). Свойства перечисленные на схеме будут общими для всех экземпляров данного поля.
2. Field_config_instance–данная таблица содержит информацию о существующих (созданных) типах экземпляров полей.
3. Field_data_body – представляет собой пример таблицы в которой хранится информация имеющая непосредственное отношение к информационному содержимому поля. Здесь используется префикс Field_data_ - дял имени таблицы – а body – это машинное имя поля, которое является главным полем, например, контента типа «статья». Точно такие же таблицы - имена которых начинаются с указанного префикса создаются для всех без исключения созданных экземпляров полей. В них хранятся данные относящиеся к каждой странице, где данное поле было задействовано.
4. Field_revision_comment_body - также таблица именованная по шаблону (используется префикс Field_revision_). Этот тип таблиц подобно Field_data_таблицам автоматически создаётся для каждого созданного экземпляра поля и служит для хранение предыдущих состояний полей.
Таким образом выше была приведена базовая информация, затрагивающая те особенности архитектуры друпал 7, знание которых необходимо для более последовательного понимания особенностей разрабатываемого модуля, сведения о непосредственном устройстве которого будут приведены ниже.
3. ПРОЦЕСС УСТАНОВКИ И ИСПОЛЬЗОВАНИЯ МОДУЛЯ
Для удобства дальнейшего изложения материала следует сказать ,что модуль в тестовой версии своей разработки получил названия Light Library кратко - LL. По-русски же данное название можно перевести как «лёгкая библиотека» так как модуль позволяет относительно легко выстраивать иерархию страниц в момент их создания.
Но прежде чем описывать процесс использования ,стоит упомянуть о процессе установки модуля LL.
3.1. Установка модуля LL
Для установки модуля LL в Drupal 7 следует войти в систему под аккаунтом администратора и выбрать пункт меню выделенный на рисунке (см. рис. 8)
LL в режиме полной функциональности зависит от двух сторонних модулей CMS Drupal 7, один из которых входит в стандартную комплектацию.
LL требует необязательной предустановки одного модуля не входящего в состав стандартной сборки. Также для полноценной работы модуля следует включить стандартный модуль Book - входящий в состав ядра Drupal 7.
Базовый пример использования специальных тэгов приведён на следующем рисунке (см. рис. 6)
Рис. 6. Иллюстрация главного меню CMS Drupal
Далее следует поставить галочку рядом с названием модуля и нажать кнопку «сохранить» (Save) - так , как это показано на рисунке ниже (см. рис. 7)
Рис. 7. Иллюстрация выбора модуля из списка в панели администрирования
После выполнения операций, указанных выше модуль устанавливается, производя следующие действия:
1. Записывает в память друпал собственные переменные (так называемые хранимые переменные).
2. Создаёт в таблице полей запись о новом поле , указывая его свойства.
3. Создаёт в специальной таблице экземпляров полей новый экземпляр поля и привязывает его (в текущей версии модуля) к контенту типа «статья» (“article”).
Общее размещение компонентов модуля может быть проиллюстрирована диаграммой развёртывания (см. рис. 8.).
Рис. 8. Диаграмма развёртывания модуля LL
Подробнее эти действия будут описаны в разделе «описание процесса разработки модуля» ниже.
3.2. Настройка и администрирование модуля
Получить доступ к настройкам модуля можно несколькими способами. Наиболее простой из них - также как и при установке модуля перейти в раздел «Modules», после чего найти модуль LL в списке и выбрать “Configure” – так как это показано на рисунке ниже (см. рис. 9).
Рис. 9. Иллюстрация расположения меню опций модуля в Drupal 7
После чего станет доступна страница администрирования модуля, на которой выведены значения различных параметров, которые администратор может изменить. Данные настройки необходимы в случае, если , например, тэг указанный в качестве тэга по умолчанию уже используется иным модулем.
Общий вид панели настроек представлен на скриншоте ниже (см. рис. 10).
Рис.10. Скриншот панели администрирования модуля LL
Для использование функционала фильтра [8] , предоставляемого модулем следует перейти в меню конфигурации модуля ядра «Filter» [9] и в его настройках для текущего текстового формата включить предоставляемый модулем фильтр (по-умолчанию его название - “filter-2000” ). При этом рекомендуется установить фильтр перед другими фильтрами -в смысле порядка запуска (см. рис. 11).
Рис. 11. Иллюстрация настройка фильтра filter-2000
3.3. Использование модуля Light Library
Ключевой идеей , лежащей в основе функционирования данного модуля было использования простой пользовательской разметки [2], на основании которой пользователь может указать системе - страницы с какими заголовками он хотел бы создать.
Рис. 12. Скриншот формы редактирования сообщения
Так на основании разметки приведённой в примере выше модуль автоматически создаст страницу с заголовком «особенности архитектуры Drupal 7».
В случае если используется стандартная тема оформления (см. определение выше) созданная (родительская) страница будет выглядеть следующим образом (см. рис. 13).
Рис. 13. Вид родительского сообщения после сохранения
При этом на рисунке выше (см. рис. 7) видно, что выделенный фрагмент отображается в виде гипер-ссылки - это ссылка на сгенерированную в процессе сохранения ноды страницу. Ниже на том же рисунке можно видеть ещё две ссылки - но о них будет сказано позже.
Соответственно , дочерняя страницу в той же теме оформления , после сохранения родительской создаётся и имеет следующий вид (см. рис. 14)
Рис.14. Вид дочерней страницы сразу после создания
При этом ссылка “[go back]” указывает на родительскую страницу – равно как и ссылка «Процесс создания модуля».
Общее же представление относительно имеющихся вариантов использования для разных пользователей системы даёт следующая диаграмма (см. рис. 15).
Рис. 15. Диаграмма вариантов использования модуля LL
4. ПРОЦЕСС РАЗРАБОТКИ МОДУЛЯ
4.1. Парсинг – разбор содержимого страницы
Чтобы выполнить данное действие модуль использует поиск в тексте с помощью регулярных выражений [5].
Каждый раз при сохранении ноды посредством реализованного модулем LL хука hook_node_insert() [8] (аналогично – node_hook_update()) модуль получает доступ к структуре объекта $node.
Взаимосвязи основных классов, используемые модулем LL можно представить в виде диаграммы (см. рис.16).
Рис. 16. Диаграмма классов модуля LL
4.2. Общая схема взаимодействия после получения сведений о новых страницах
Общая последовательность работы компонентов модуля такова:
1. Пользователь сохраняет некую ноду.
2. После вызова инициирующего хука экземпляр класса LlistSet запускает из собственного конструктора парсер, который пытается выделить из текста ноды фрагменты, выделенные специальными тэгами (см. раздел демонстрации работы модуля).
3. После чего на основании выделенных фрагментов создаются экземпляры класса Llist и запускается генерация дочерних страниц.
4. Затем на основании полученной информации о сгенерированных страницах модуль делает запрос к ядру системы и загружает экземпляр родителькой ноды для обновления её содержимого - так как требуется разместить ссылки на вновь созданные страницы.
5. После того как нода обновлена друпал «перебрасывает» пользователя на сохранённую родительскую страницу, запустив фильтр [9].
В общем случае работу системы описывает диаграмма последовательности (см. рис. 16)
Рис. 17. Диаграмма последовательностей взаимодействия компонентов модуля и ядра системы Drupal
4.3. Реализация добавления обратных ссылок
Как видно из скриншотов , приведённых выше в разделе описания процесса использования модуля, после создания дочерней страницы к ней добавляются обратные ссылки на родительскую страницу - таким образом, осуществляется автоматическая перелинковка с одной стороны ,а с другой навигация пользователя по сайту улучшается.
На скриншоте видно ,что помимо ссылки “[go back]” – которая добавляется непосредственно в тело страницы , также создано поле с заголовком «вернуться к оглавлению» - такая избыточность обусловлена попыткой предоставить администратору конкретного сайта решить - что удобнее использовать в частом случае.
Дело в том, что поле лучше смотрится, но в тоже время, использование других полей, может не позволить эффективно использовать поле [1] предоставляемое модулем LL.
Тип поля , используемого LL для установки обратный ссылки предоставляется модулем Reference. То есть LL требует предустановки одного модуля не входящего в состав стандартной сборки (для обеспечения режима полной функциональности).
4.4. Реализация редактирования иерархии страниц и книг
Для реализации редактирования иерархии страниц – взаимного перемещения ветвей относительно друг друга достаточно использовать стандартный редактор модуля Book [8] – для той книги ,которая является корнем библиотеки Light Library по –умолчанию. (см. рис. 18).
Рис. 18. Иерархия страниц. Результат работы модуля
Данный подход подразумевает, что корневая страница книги Book [9] - это и есть библиотека, на следующих же уровнях иерархии могут быть реализованы отделы, разделы, книги и в конечном итоге – страницы этих книг.
- drudev's blog
- Log in to post comments
- 6112 reads