Інтеграція з модулем Features

28.12.2012
Features Module
Автор:

При розробці сайту часто виникає необхідність перенести якісь зміни в базі з одного сайту на інший, при тому що переливати всю базу процес досить проблематичний, а інколи й не можливий через появу на ньому нових матеріалів. Проблему вирішує модуль Features. Отож, у цій статті буде описано, як створювати свою фічу(feature), як створювати в фічі свої пункти, як експортувати частини сайту на інший сайт.

Отож, в нас є три значення в базі (ми далі створимо за допомогою функції variable_set()) , які нам потрібно перенести на інший сайт. При цьому постає потреба зробити вибір: які значення експортувати, а які ні.

1) Встановлюємо модуль Features.

2) Створюємо свій модуль.

В нашому випадку він буде називатись idevels. В файлі idevels.module добавляємо hook_features_api(). За дапомогою цього хуку ми оголосимо про свою фічу та задамо їй деякі параметри.

/**
 * Implements hook_features_api().
 */
function idevels_features_api() {
  return array(
    'values' => array(
      'name' => t('Deploy values'),
      'default_hook' => 'values_defaults',
      'default_file' => FEATURES_DEFAULTS_INCLUDED,
      'feature_source' => TRUE,
      'file' => drupal_get_path('module', 'idevels') .'/idevels.features.inc',
    ),
  );
}

Тепер створюємо файл в корені нашого модуля, який вказали  в hook_features_api, в нашому випадку це idevels.features.inc.

В цьому файлі додаємо хук hook_features_export_options().

Один дуже важливий момент - хуки, які стосуються роботи нашої фічі потрібно називати не назвою модуля, а назвою нашої фічі, в нашому випадку це буде values.

/**
 * Implements hook_features_export_options().
 */
function values_features_export_options()  {
  //only create variables
  variable_set('value1', 'value1');
  variable_set('value2', 'value2');
  variable_set('value3', 'value3');
  
  return array(
    'value1' => t('VALUE 1'),
    'value2' => t('VALUE 2'),
    'value3' => t('VALUE 3'),
  );
} 

Задля наочності створимо наші 3 значення за допомогою функції variable_set().

В хуці hook_features_export_options() ми задаємо перелік опцій, котрі користувач має можливість переносити. В нашому випадку це буде виглядати ось так:

Далі ми додаємо хук hook_features_export(), який буде показувати, що ми експортуємо вибравши одну чи іншу опцію:

 /**
 * Implements of hook_features_export().
 */
function values_features_export($data, &$export, $module_name = '') {
  foreach ($data as $name) {
    $export['features']['values'][$name] = $name;
  }
  return array();
}

І тепер, коли ми вибираємо якусь опцію то бачимо, що, власне, буде експортуватись. В нашому випадку це буде виглядати так:

 

Тепер додаємо хук hook_features_export_render(),  який рендерить в файл наші значення, що експортуються.

/**
 * Implements hook_features_export_render().
 */
function values_features_export_render($module_name, $data) {
  $code = array();
  $values = array();
  foreach ($data as $name) {
    $values[$name] = variable_get($name);
  }
  $code = '  $data = ' . features_var_export($values, '  ') . ';' . PHP_EOL;
  $code .= "  return \$data;";
  return array('values_defaults' => $code);
}

І нам залишилось описати два хуки, які відповідатимуть за внесення даних на новий сайт з нашої фічі -  це хук hook_features_rebuild() і хук hook_features_revert(). В нашому випадку вони будуть робити одну роботу, тому вони будуть виглядати ось так:

/**
 * Implements hook_features_rebuild().
 */
function values_features_rebuild($module) {
  values_features_revert($module);
}

/**
 * Implements hook_features_revert().
 */
function values_features_revert($module) {
  $data = module_invoke($module, 'values_defaults');
  foreach ($data as $name => $value) {
    variable_set($name, $value);
  }
}

Тобто ці 2 хуки будуть змінювати дані на новому сайті на ті, що лежать в нашій фічі.

Ну і, зрештою, все. На такому простенькому прикладі ми навчились експортувати частини сайту.

Модуль по якому була створена стаття добавлений для завантаження.

2 votes, Рейтинг: 5

Також по темі

1

В статті буде розповідатись про те, як швидко налаштувати модуль Search API та...

2

Трапляються завдання, для вирішення котрих необхідно створювати свою таблицю в базі даних і потім власними ж запитами взаємодіяти із цією таблицею. За таких обставин написання численних запитів...

4

В наші дні всі знають про такі ітернет магазини як eBay, Amazon і.т.д. Проте, мало хто знає...

5

Не всі знають, що модуль Views надає досить обширний API....

Subscribe to our blog updates