Как стать автором
Обновить

Создаем Installation Profile для Drupal 7

Installation Profile

отличный способ для создания своей собственной установочной сборки drupal

Это ускоряет процесс создания сайта, особенно когда на каждом из них мы используем стандартный пакет модулей и настроек. В этой статье я опишу как это делается в Drupal 7. Стоит отметить, что автором текста являюсь не я, я всего лишь перевел его с Англицкого на нашинский. Автором является Issac Sukin, а оригинал размещен под адресом ТЫК. Все установочные профили должны содержать фалы profilename.info и profilename.profile, а также могут содержать файл profilename.install.

profilename.info должен выглядеть так:

; $Id$
name = Profile Name
description = Description of what the profile does.
core = 7.x
dependencies[] = block
dependencies[] = color
dependencies[] = comment
dependencies[] = contextual
dependencies[] = dashboard
dependencies[] = help
dependencies[] = image
dependencies[] = list
dependencies[] = menu
dependencies[] = number
dependencies[] = options
dependencies[] = path
dependencies[] = taxonomy
dependencies[] = dblog
dependencies[] = search
dependencies[] = shortcut
dependencies[] = toolbar
dependencies[] = overlay
dependencies[] = field_ui
dependencies[] = file
dependencies[] = rdf
files[] = profilename.profile


Name, description, и core — должны присутствовать всегда; $Id$ используется для скрипта архивизации drupal.org. Список модулей — это те модули которые будут включены сразу после установки, приведенный тут список является списком из стандартной установки drupal 7. Список files[] — подключаемые файлы для регистрации динамического кода drupal.

В большинстве случаев, profilename.install должен выглядеть так:

<?php
/**
* Implement hook_install().
*
* Perform actions to set up the site for this profile.
*/
function profilename_install() {
include_once DRUPAL_ROOT . '/profiles/standard/standard.install';
standard_install();
}
?>


Можно использовать hook_install() для загрузки данных в базу данных во время установки drupal. В данном примере приведено содержание profilename.install из стандартного пакета установки Drupal.

Следующая часть содержит информацию о том что можно делать с файлом profilename.profile:

Добавление шагов в процесс установки:


Новые шаги, добавленные в процесс установки, могут быть вклчены в бэкграунде и ничего не выводить (используется для добавления данных в БД или для добавления кода, который потребуется в дальшей части процесса установки), или выводить что нибудь на экран. Новые шаги добавляются посредством hook_install_tasks() через возвращение асоциативного массива. Вот как выглядит каждый массив заданий (все элементы полностью опциональны):

<?php
$task['machine_name'] = array(
'display_name' => st('Human-readable task name'),
'display' => TRUE,
'type' => 'normal',
'run' => INSTALL_TASK_RUN_IF_REACHED,
'function' => 'function_to_execute',
);
?>


Давайте присмотримся ближе:

machine_name — название задания.

display_name — название задания понятное для человека.

display — определяет, показывать ли это задание в списке проводимых операций на экране установки drupal. если display_name на задано или

display поставлен на FALSE задание не будет появлятся в данном списке. display используется например для вывода например формы настройки какого то модуля во время установки drupal или кнопки подтверждения/возврата к предыдущему шагу.

type — принимает значения 'normal', 'batch' или 'form':

'normal' — может возвращать код html для показа на экране установки или NULL для определения, что задание завершено. Это стандартно. Помни, чтобы дать какую либо возможность для перехода к следующему заданию, например вставь кнопку «далее».
'batch' — задание возвращает пакетный массив (batch array) для обработки посредством Batch API, что полезно если хочешь импортировать что-то, довольно большое. Задание подтвердит завершение, когда batch завершит работу.
'form' — задание возвращает структурированную API форму, которая будет отображена на странице установки. Установщик позаботится о переходе к следующему заданию, когда форма будет отправлена.

Можешь посмотреть более подробно, что произойдет при каждом типе, используя install_run_task().

run — возможность три: INSTALL_TASK_RUN_IF_REACHED, INSTALL_TASK_RUN_IF_NOT_COMPLETED, или INSTALL_TASK_SKIP.

INSTALL_TASK_RUN_IF_REACHED — значит что задание будет запущено на каждом этапе установки, когда он будет достигнут. В большинстве случаев это используется ядром, для добавления каких-либо данных на каждую страницу установщика.
INSTALL_TASK_RUN_IF_NOT_COMPLETED — значит что задание будет запущено один раз на протяжении процесса установки. Это стандартно и используется для вывода информации, форм или для загрузки контента в БД.
INSTALL_TASK_SKIP — значит что задание не будет запущено. Это полезно, когда хочешь дать пользователю возможность выбора отключить задание в предыдущем шаге установки.

function — это функция, которая будет запущена, когда задание будет выполнено. Если ее название не определено, оно будет таким-же как и machine_name задания. Можешь назвать ее как нибудь иначе, чтобы использовать и в других местах, или для выбора определенной функции в предыдущем шаге установки.

Изменение и удаление шагов из установочного процеса.


hook_install_tasks_alter() — позволяет отключить или изменить какой либо шаг из установочного процеса. К примеру, если создаешь установочный

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

hook_install_tasks_alter() использует два параметра: $tasks и $install_state. Переменная $tasks содержит структурированный массив всех установочных заданий, таких как один из тех, который мы добавляли при помощи hook_instal_tasks().

Ниже перечислены стандартные задания, в порядке заданом функцией install_tasks():

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

install_select_locale — выбор языка для использования в установщике.

install_load_profile — загрузка выбранного профиля.

install_verify_requirements — проверка, выполняет ли сервер все требования данной весии Drupal.

install_settings_form — форма используемая для конфигурации и изменения settings.php

install_system_module — установка системного модуля, нужного для запуска системы, и пользовательского модуля для записи сессии во время начального запуска.

install_bootstrap_full — выполняет полный начальный запуск Drupal — загружая все ресурсы и функции ядра.

install_profile_modules — устанавливает и включает все модули задекларированные в .info файле а затем запускает profilename_install() (если он существует).

install_import_locales — грузит доступные языки в систему.

install_configure_form — форма для конфигурации информации и установок сайта.

Задания профиля



Теперь все задания, задекларированые текущим установочным профилем — запущены. Drupal уже полностью запустился, все запрошеные модули установились и включились и сам профиль тоже «установился», так что все задания имеют доступ ко всему, к чему имеет доступ обычный модуль Drupal.

install_import_locales_remaining — импортирует дополнительные языки в систему, если еще какие нибудь импортированы не были.

install_finished — выполнение заключительных процессов установки (таких как очистка кэша) и вывод информации о завершении процесса установки.

Послесловие


Это не полный перевод статьи, сюда попали только самые важные вещи, необходимые для написания своего, работающего установочного профиля под Drupal 7. Остальные, дополнительные материалы, я размещу чуть позднее. Коирование данного материала разрешено, при условии указания автора (Issac Sukin) и переводчика (тобишь меня) и ссылок на оба материала.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.