Отключить pathauto для узлов, созданных с помощью модуля миграции

14

Я использую миграцию для импорта группы узлов и хочу задать псевдоним пути во время миграции. Я в состоянии импортировать псевдоним пути просто так:

$this->addFieldMapping('path', 'url_alias');

Когда я смотрю на импортированные узлы, я вижу правильный путь в pathполе, но Generate automatic URL aliasфлажок все еще установлен, что означает, что настройка игнорируется.

Как отключить этот параметр на узле во время миграции?

Кенни Уайлэнд
источник

Ответы:

10

Вам нужно убедиться, что $node объект передается с pathautoустановленным на false при сохранении.

В вашем классе миграции:

function prepare(&$row) {
  $row->path['pathauto'] = 0;
}
jhedstrom
источник
Я попробовал это, но Generate automatic URL aliasвсе еще проверено.
Кенни Уайлэнд,
Но я попробовал ваше предложение в методе prepare () вместо prepareRow (), и это сработало! Если вы отредактируете свой пост, я приму его в качестве ответа. Благодарность!
Кенни Уайлэнд,
Отредактировано - неверный метод в первый раз :)
jhedstrom
8
$this->addFieldMapping('pathauto')->defaultValue(0);

Работает для меня. Pathauto: Выполнить псевдонимы (установите в 0, чтобы предотвратить генерацию псевдонимов во время миграции. См. «Drush ma» + имя вашего класса для полного описания).

Люк Безье
источник
0

Если у вас иногда, но не всегда, будет псевдоним входящего пути, то вот как вы можете вызвать pathauto, только если вы не установили псевдоним.

Сначала в конструкторе отобразите оба pathи pathauto:

$this->addFieldMapping('path', 'path');
$this->addFieldMapping('pathauto', 'pathauto');

Затем ::prepareRow()установите pathautoсвойство в зависимости от того, есть ли входящее pathзначение:

public function prepareRow($row) {
  parent::prepareRow($row);

  if (!empty($row->path)) {
    $row->pathauto = 0;
  }
  else {
    $row->pathauto = 1;
  }

}

В результате, если вы явно указали путь, который будет использоваться для псевдонима, тогда как, если вы этого не сделаете, Pathauto включится.

nedjo
источник