web-dev-qa-db-ja.com

移行モジュールで作成されたノードのpathautoを無効にする

一連のノードをインポートするために migrate を使用していて、移行中にパスエイリアスを設定したい。パスエイリアスを次のようにうまくインポートできます。

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

インポートされたノードを見ると、pathフィールドに正しいパスが表示されていますが、Generate automatic URL aliasチェックボックスは引き続きオンになっているため、設定は無視されます。

移行中にノードでその設定を無効にするにはどうすればよいですか?

14
Kenny Wyland

基本的に、$nodeオブジェクトは、保存時にpathautoをfalseに設定して渡されます。

移行クラスで:

function prepare(&$row) {
  $row->path['pathauto'] = 0;
}
10
jhedstrom
$this->addFieldMapping('pathauto')->defaultValue(0);

私のために働く。 Pathauto:エイリアスを実行します(移行中にエイリアスが生成されないように0に設定します)詳細については、 'drush ma' +クラスの名前を参照してください

8
Luc Bézier

常にではないが着信パスエイリアスがある場合は、エイリアスを設定していない場合にのみpathautoをトリガーする方法を次に示します。

まず、コンストラクターでpathpathautoの両方をマップします。

_$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を使用しなかった場合に有効になります。

0
nedjo