Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NovoselovDRUPAL_FINAL_DRAFT.docx
Скачиваний:
8
Добавлен:
01.04.2015
Размер:
396.56 Кб
Скачать

Принципы разработки модулейDrupal.

В Drupal, как вCMF, расширение осуществляется посредствомAPI.APIвызываются, так называемыми хуками, позволяя взаимодействовать с ядром. Модули, используемые вDrupal, работают по принципу «хука» (англ. hook — крючок, ловушка). Хук — это PHP функция, которая имеет название module_name_hook_name(), где «module_name» — название модуля (имя файла module_name.module), а «hook_name» — название самого хука. Каждый хук имеет определенный набор параметров и типов результатов. Для расширения функциональности тех или иных частей Drupalа, нужно реализовать соответствующий хук. Когда Drupal хочет взаимодействовать с модулями, он определяет какие хуки предоставляются модулями и вызывает эти хуки для всех включённых на сайте модулей. Ниже перечислены хуки, вызов которых поддерживает Drupal. В определениях ниже, слово «hook» следует заменять на имя соответствующего модуля, в котором этот хук будет реализован. Например, если есть модуль example.module и в нём определён хук hook_help(), то в модуле реализацию хука следует определить в виде функции example_help().Schema API. Схема БД в Drupalе — структурированный массив, представляющий одну или более таблиц, и их связанные ключи и индексы. Схема определяется хукомhook_schema(), который обычно находится в файле modulename.install.

Реализовав hook_schema() и описав в нем таблицы, которые должен создавать модуль, можно легко создавать и удалять эти таблицы во всех поддерживаемых СУБД. Отпадает необходимость работать с разными диалектами SQL для создания или изменения таблиц в поддерживаемых СУБД. Хук hook_schema() должен вернуть ассоциативный массив, ключи которого соответствуют таблицам, которые определяет модуль.

Система темизации. Функции и шаблоны, которые выводят содержимое посетителю, и которые могут быть внедрены с помощью тем.

Уровень представления Drupalреализован в виде модульной системы — уровня темы (themelayer). Каждая тема контролирует почти весь выводDrupalи имеет полный контроль над CSS.

Внутри него, уровень темы реализуется с помощью функции theme(), которая передает имя компоненты темы (хук темы) и аргументы. Пример:theme('table', $header, $rows).

Также функция theme() может содержать массив хуков темы, которые могут быть использованы для реализации “fallback” (использования встроенной функции темы, если не будет найден более специфичный хук), для лучшего контроля вывода. Пример: функцияtheme(array('table__foo', 'table'),$header, $rows) попытается найти хук 'table__foo', а если не найдет, то будет использована встроенная функция темизации 'table'.

Эта возможность может быть использована для присвоения специфических функций темы именованным объектам, давая дизайнерам-авторам больше контроля над выводом специфических типов содержимого.

Начиная с 6-ой версии Drupalа, каждый хук темизации, определенный в модуле, нужно зарегистрировать в этом модуле, чтобы Drupal знал, где искать этот хук, и чтобы упростить темам поиск и модификацию этих хуков.

Хуки темизации регистрируются в hook_theme(). Этот хук должен возвращать массив описаний хуков темизации, которые реализованы в данном модуле. Каждое из описаний в свою очередь является ассоциативным массивом. Должны быть описаны параметры, которые требуются каждой функции или шаблону уровня темы, а также значения по умолчанию для всех этих параметров. Если хук темизации реализуется как функция, то по умолчанию она называется theme_HOOK().

Каждый модуль должен предоставить свою реализацию для всех хуков темизации, которые он регистрирует. Реализация может быть как в виде функции, так и в виде шаблона; реализации-функции необходимо указать в hook_theme(). По соглашению считается, что реализации хуков темизации в виде функций должны называться theme_HOOK(). Реализации хуков темизации в виде шаблонов должны находиться в одной директории с модулем, определяющим эти хуки.

Стандартный обработчик шаблонов Drupalпросто выполняет шаблон как скрипт PHP и возвращает результат. Структура темDrupalпозволяет расширить с помощью, таких как XTemplate, Smarty или PHPTal, добавив поддержку альтернативных обработчиков шаблонов. Чаще всего темыDrupalиспользуют под PHPTemplate (входит в стандартную поставкуDrupal, файлphptemplate.engine), использующий стандартный обработчик шаблоновDrupal.

Для того, чтобы в теме реализовать собственную версию какого либо хука темизации, нужно переопределить хук как функцию или шаблон. Такие реализации перекрывают реализацию по умолчанию хука. В «чистой» теме (теме, не использующей какой-либо движок тем) необходимо в файле темы реализовать хук hook_theme() и сообщить в нем Drupalуо всех хуках темизации, которые тема реализует; в темах, пользующихся движками тем, хуки темизации, названные соответствующим образом, регистрируются автоматически. Соглашения по названию хуков могут зависеть от движка тем, но большинство придерживаются стандарта, заданного PHPTemplate: функции должны носить название ENGINE_HOOK() (в случае PHPTemplate — phptemplate_HOOK()) или THEMENAME_HOOK(). Например, движок PHPTemplate будет искать реализацию хука 'table' в стандартной теме Drupalа (Garland) в функциях phptemplate_table() и garland_table(). Синтаксис ENGINE_HOOK() предпочтительнее, поскольку функции с такими именами будут видны и из подтем (тем с общим кодом но разными таблицами стилей). Система темизации реализуется в файлеtheme.inc.

Система доступа к нодам.Система доступа к нодам определяет, кто и что может сделать с определёнными нодами. Для определении прав доступа для ноды используетсяnode_access(). Эта функция сперва проверяет, имеет ли пользователь разрешение 'administernodes'. Такие пользователи имеют неограниченный доступ ко всем нодам. Затем вызывается хукhook_access() в модуле этой ноды (по умолчанию —node_content_access()), и возвращаемое значение, TRUE или FALSE, разрешит или запретит доступ. Например, это позволяет модулю blog всегда предоставлять доступ самому автору блога, а модулю book — всегда запрещать редактирование PHP страниц.

Если «нодовый» модуль не вмешивается в процесс ограничения доступа (возвращает NULL вhook_access()), тогда для этого используется таблица 'node_access'. Все такие модули опрашиваются при помощи хукаhook_node_grants() и в результате собирается список идентификаторов разрешений пользователя (grantIDs). Этот список сравнивается с таблицей по соответствию grant ID. Если в таблице присутствует запись с идентифкатором ноды или идентификатор ноды в таблице равен 0, то доступ к ноде (или нодам) разрешается. Отметьте, что эта таблица, по существу, является списком разрешений; любой совпадающий строки достаточно, чтобы разрешить доступ к ноде.

В списках нод процесс проверки правил доступа несколько иной. hook_access() не вызывается для каждой отдельной ноды по причине низкой производительности такого подхода, а также для нормальной работы пэйджера (листалки страниц). Поэтому, SQL-запрос, формирующий список, следует пропускать через функциюdb_rewrite_sql(), которая посредством вызовов хуковhook_db_rewrite_sql() дополнит запрос проверками доступа.

Недостатки Drupal.Критики Drupal ставят в упрёк разработчикам слабое использование объектных возможностей PHP. Действительно, API Drupal практически не использует имеющихся в PHP возможностей ООП. Разработчики аргументируют это слабой реализацией ООП в языке (особенно до версии PHP 5). Объектная модель в Drupal присутствует, но в несколько нетрадиционном для PHP виде.

Ввиду активного использования базы данных Drupal может быть слишком тяжёл для ресурсов, предоставляемых на дешёвых тарифных планах хостинг-провайдеров, хотя для небольших сайтов с посещаемостью в несколько сотен или тысяч посетителей в сутки этих ресурсов будет достаточно.

Вот список посещаемых сайтов на Drupal:

Apple — выставка и конференция Macworld,

Mozilla — Get Firefox,

Greenpeace UK — официальныйсайт,

HillaryClinton — предвыборный сайт,

NASA – корпоративный сайт,

Novell — community-сайты,

Second Life — сайтразработчиков,

Sun — сайт с расширениями для OpenOffice,

TheOnion– популярный в США журнал,

Ubuntu — официальный сайт,

US Magazine– популярный в США журнал,

Yahoo — Yahoo! Cайт поисковик

ООН — сайт кампании по борьбе с бедностью.

WhiteHouse.gov –Сайт президента США

Система материалов. Во многих CMS все материалы при добавлении помешаются в подпапку с название выбранной категории. Следовательно, перенос материалов можно делать вручную, материалы из одной папки в другую. В Drupal дела обстоят иначе.Все материалы независимо от выбора категорий и прочих параметров помешаются в одну таблицу “node”, или иную другую в зависимости от настроек содержания сайта. Это удобнее в том плане, когда создается огромное количество категорий и подкатегорий, при любой сложность категоризации не будет создано никаких дополнительных таблиц, все компактно будет лежать в одном месте. Кроме того для любого созданного материала в базе данных создается информация о нем. В таблицах базы данных “node” и в “node_access” создаются о свойствах материала и правам доступа к нему

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]