Разработка на Drupal с использованием профилей и features

Разработка с использованием профилей и features даёт больший контроль над конфигурацией приложения на Drupal. Но возникает ряд вопросов по выгрузке конфигурации в этом случае:

  • Как выгрузить настройки модулей?
  • Как выгрузить блоки?
  • Как выгрузить настройки темы оформления?

Как выгрузить настройки модулей?

Настройки модуля можно установить через variable_set внутри функции инсталляции Вашего профиля - для того, чтобы понять, какие именно variable хранят нужные нам настройки надо смотреть как работает системная форма настроек и какие alter к ней применяются. Например: admin/config/media/file-system и модуль transliteration

  • Модуль transliteration добавляет следующие чек боксы: https://yadi.sk/i/_lhxvtIurekAi, которые добавляются в transliteration_form_system_file_system_settings_alter().
  • Форма system_file_system_settings() - системная (т.е. оборачивается в system_settings_form https://yadi.sk/i/5QeyJW6DrekWB) т.е. у формы будет использован сабмит system_settings_form_submit() -- в котором видно что все values формы будут сохранены в variables по ключу внутри массива form_state[values].
  • Т.е. для того чтобы сохранить настройку "Транслитерировать имена файлов во время загрузки." - нам надо сделать variable_set('transliteration_file_uploads', TRUE). По такому же принципу можно получить название нужных Вам variable...

Пример установки настройки модуля transliteration в Вашем профиле your_profile:

<?php
/**
 * @file your_profile.install
 * 
 */
/**
 * Implements hook_install().
 */
function your_profile_install() {
  variable_set('transliteration_file_uploads', TRUE);
}

Как выгрузить блоки?

Блоки. В основ это блоки views либо кастомные(программные блоки). А- надо будится что добавленна вьюха которая создает Блок. Б - при инсталяции профиля сделать нужные записи в БД. Пример можно посмотреть в profiles/standart/standart.install: https://yadi.sk/i/UsqQXM0Vrem8V . Пример реализации внутри Вашего профиля your_profile:

<?php
/**
 * @file your_profile.install
 * 
 */
/**
 * Implements hook_install().
 */
function your_profile_install() {
  _your_profile_enable_blocks('bartik');
}
/**
 * Enable default blocks.
 */
function _your_profile_enable_blocks($default_theme) {
  $values = array(
    array(
      'module' => 'user',
      'delta' => 'login',
      'theme' => $default_theme,
      'status' => 1,
      'weight' => 0,
      'region' => 'sidebar_first',
      'visibility' => 0,
      'pages' => '',
      'cache' => -1,
    ),
    array(
      'module' => 'system',
      'delta' => 'management',
      'theme' => $default_theme,
      'status' => 1,
      'weight' => 1,
      'region' => -1,
      'visibility' => 0,
      'pages' => '',
      'cache' => -1,
    ),
    // ... Пример выгрузки блока views.
    array(
      'module' => 'views',
      // Машинное имя блока, можно узнать на странице конфигурации блоков посмотрев в URL.
      'delta' => '-exp-erp_cities-page',
      'theme' => $default_theme,
      'status' => 1,
      'weight' => -9,
      'region' => 'content',
      'visibility' => 1,
      'pages' => 'dictionary/tradepoints/cities',
      'cache' => -1,
    ),
  );
  $query = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'visibility', 'pages', 'cache'));
  foreach ($values as $record) {
    $query->values($record);
  }
  $query->execute();
}
?>

Как выгрузить настройки темы оформления?

Здесь возможны два варианта.

  • Прямо внутри вашей темы установить настройки по-умолчанию. Подходит в том случае, если Вы сам разрабатываете своб тему оформления под проект. Подробнее тут: https://www.drupal.org/node/171205#theme-settings
  • Установить нужные настройки темы в hook_install вашего профиля. По теме: http://drupal.stackexchange.com/questions/91067/ho... - Настройке темы хранятся в variable theme_[THEME_NAME]_settings. Пример установки настроек темы.
<?php
<span class="redactor-invisible-space">/**
 * @file your_profile.install
 * 
 */
<span class="redactor-invisible-space">
</span></span>/**
 * Implements hook_install().
 */
function your_profile_install() {<span class="redactor-invisible-space"></span>
    // Получаем набор настроек темы Bartik.
    $tsettings = variable_get('theme_bartik_settings', array());
    // Тема не будет использовать стандартную иконку.
    $tsettings['default_favicon'] = 0;
    // Указываем путь к кастомной иконке.
    $tsettings['favicon_path'] = drupal_get_path('module', 'custom_module') . '/favicon.png';
    // Указываем что темы использует фавикон.
    $tsettings['toggle_favicon'] = 1;
    // Сохраняем.
    variable_set('theme_admin_btl_settings', $tsettings);
}
?>
Drupal 7 Best Practises
comments powered by Disqus