перенос псевдонима url с drupal6 на drupal7 как часть процесса миграции - PullRequest
0 голосов
/ 20 сентября 2011

Я перенес узлы, используя модуль миграции v2. В настоящее время я сталкиваюсь с проблемой, что предыдущий сайт использовал псевдонимы URL, которые не были перенесены в drupal7 и будут влиять на рейтинг сайта с точки зрения SEO.

Есть ли способ, которым я могу перенести псевдонимы пути при запуске самих классов миграции? Если нет, то какой будет лучший способ сделать это?

Ответы [ 4 ]

5 голосов
/ 13 ноября 2012

Вы можете перенести свои устаревшие псевдонимы непосредственно в поле пути Drupal 7:

$this->addFieldMapping('path', 'my_legacy_alias_field');
1 голос
/ 30 сентября 2014

Вот очень урезанный класс миграции , который включает в себя простой метод привлечения URL-адресов для поездки.Предназначен для использования с модулем Migrate .

class MyNodeMigration extends Migration {
  public function __construct(array $arguments) {
    $this->arguments = $arguments;
    parent::__construct();
    $source_fields = array('nid' => t('The node ID of the page'));

    $query = Database::getConnection('default', 'legacy')
      ->select('node', 'n')
      ->fields('n');
    $query->join('url_alias', 'a', "a.src = CONCAT('node/', n.nid)");
    $query->addField('a', 'dst');
    $this->source = new MigrateSourceSQL($query, $source_fields);
    $this->destination = new MigrateDestinationNode('my_node_type');
    $this->map = new MigrateSQLMap($this->machineName,
      array('nid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => 'D6 Unique Node ID',
        'alias' => 'n',
      )),
      MigrateDestinationNode::getKeySchema()
    );

    $this->addSimpleMappings(array('title', 'created', 'changed', 'status'));
    $this->addUnmigratedDestinations(array('sticky', 'log', 'nid'));
    $this->addFieldMapping('path', 'dst');
    $this->addFieldMapping('is_new')->defaultValue(TRUE);
  }
}
0 голосов
/ 14 октября 2011

Лучший способ (по моему мнению) иметь одинаковые псевдонимы URL:

1> установить модуль url_alias.

2> настроить узлы с шаблонами, подобными drupal6.Теперь этот шаг может вас беспокоить, если к новым URL-псевдонимам прикреплены nids. (Как в моем случае).

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

Теперь мы можем приступить к массовому генерированию псевдонимов url.

Пример создания такогоПользовательский токен будет выглядеть следующим образом:

/**
 * Implements hook_token_info().
 */
function custom_configuration_token_info() {  
  $type = array(
    'node' => array (
      'name' => t('Nodes'), 
      'description' => t('Tokens related to individual nodes.'), 
      'needs-data' => 'node',
     ),

         'term' => array(
           'name' => t('Taxonomy Terms'),
           'description' => t('Tokens related to taxonomy terms.'),
           'needs-data' => 'term',
         )
      );

      // tokens for node legacy nid.
      $tokens['node']['mapid'] = array(
        'name' => t("mapid"), 
        'description' => t("The nid of the node prior to migration."),
      );

      $tokens['term']['mapid'] = array(
        'name' => t('mapid'),
        'description' => t('The tid of taxonomy terms prior to migration.'),
      );

      return array(
        'types' => $type, 
        'tokens' => $tokens,
      );
    }


    now,

    function custom_configuration_tokens($type, $tokens, array $data = array(), array $options = array()) {
      $url_options = array('absolute' => TRUE);
      if (isset($options['language'])) {
        $url_options['language'] = $options['language'];
        $language_code = $options['language']->language;
      }
      else {
        $language_code = NULL;
      }
      $sanitize = !empty($options['sanitize']);

      $replacements = array();

      if ($type == 'node' && !empty($data['node'])) {
        $node = $data['node'];

        foreach ($tokens as $name => $original) {
              switch ($name) {

    <write your custom code for the token conditioned by the name attribute in info function>

        }
      }
    }

При написании пользовательского кода вам также понадобится устаревшая таблица.Drupal 7 поддерживает несколько баз данных, поэтому просто настройте устаревшие учетные данные таблицы в файле settings.php.

Используйте drupal_set_active при извлечении данных из разных таблиц.

Спасибо.

0 голосов
/ 20 сентября 2011

Как я вижу, таблица url_alias в целом одинакова, ожидайте названия полей, которые изменились с src на source и dst на alias. Так что я думаю, что вы можете легко скопировать контент с вашего Drupal 6 на ваш Drupal 7.

Я никогда не пробовал, но теоретически это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...