Как создать дамп меню и узлов (nodes) с использованием Drupal Drush?

Как я могу использовать drush для создания импорта меню и одной ноды? Я знаю о команде "drush config:export", но она не создает импорт меню и ноды. Я также нашел команду "drush entity:save", но не знаю, как использовать ее для импорта. Я не понимаю, как работать с меню вообще. Подскажите, как выполнять импорт/экспорт с drush?
  • 19 октября 2023 г. 8:59
Ответы на вопрос 1
Drush не предоставляет прямой способ экспорта или импорта меню и узлов. Однако, вы можете использовать модуль Features для выполнения этой задачи. Ниже приведены шаги, которые вы можете следовать для экспорта и импорта меню и узлов с использованием Drush и модуля Features:

1. Установите и включите модуль Features и Drush на вашем сайте Drupal.
2. Создайте новый модуль с помощью Drush команды "drush generate module" или создайте его вручную. Например, назовите его "my_import_export".
3. Включите ваш модуль, добавив его в папку "sites/all/modules" и выполните команду "drush en my_import_export".
4. В вашем модуле my_import_export, создайте файл my_import_export.features.inc и добавьте в него следующий код:

```php
function my_import_export_features_api() {
  return array(
    'api' => 1,
  );
}

function my_import_export_features_export() {
  $exports = array();

  // Export menu
  $menu_name = 'main-menu';
  $menu = menu_load($menu_name);
  $export = array(
    'name' => $menu_name,
    'items' => array(),
  );
  
  foreach ($menu['links'] as $item) {
    $export['items'][] = array(
      'title' => $item['title'],
      'link_path' => $item['href'],
      'menu_name' => $menu_name,
    );
  }

  $exports['menu_' . $menu_name] = $export;

  // Export nodes
  $nodes = node_load_multiple(array(), array('type' => 'article'));
  foreach ($nodes as $node) {
    $export = array(
      'title' => $node->title,
      'type' => 'article',
      'body' => $node->body[LANGUAGE_NONE][0]['value'],
      // Add any other fields you want to export
    );

    $exports['node_' . $node->nid] = $export;
  }

  return $exports;
}

function my_import_export_features_import($module, $api_version, &$sandbox = NULL) {
  if ($module == 'my_import_export' && $api_version == 1) {
    // Import menu
    $menu_names = array('main-menu'); // Add any other menu names you exported
    foreach ($menu_names as $menu_name) {
      if (isset($sandbox[$menu_name])) {
        $menu = $sandbox[$menu_name];
        foreach ($menu['items'] as $item) {
          $menu_item = array(
            'link_title' => $item['title'],
            'link_path' => $item['link_path'],
            'menu_name' => $item['menu_name'],
          );
          menu_link_save($menu_item);
        }
      }
    }

    // Import nodes
    $node_ids = array(); // To prevent duplicate imports
    foreach ($sandbox as $key => $value) {
      if (strpos($key, 'node_') !== FALSE) {
        $node = new stdClass();
        $node->type = $value['type'];
        $node->title = $value['title'];
        $node->language = LANGUAGE_NONE;
        $node->uid = 1; // Use the desired user ID
        $node->status = 1;
        $node->comment = 0;
        $node->promote = 0;
        $node->sticky = 0;
        $node->body[LANGUAGE_NONE][0]['value'] = $value['body'];
        node_save($node);

        $node_ids[] = $node->nid;
      }
    }

    // Delete previously imported nodes if any
    $query = db_select('node', 'n');
    $query->fields('n', array('nid'))
      ->condition('n.nid', $node_ids, 'NOT IN')
      ->condition('n.type', 'article') // Adjust the node type if needed
      ->execute()
      ->fetchAll();

    foreach ($query as $node) {
      node_delete($node->nid);
    }
  }
}
```

5. Запустите команду "drush cc all" для очистки кэша Drupal.
6. Далее командой "drush features-export my_import_export" можно выполнить
Похожие вопросы