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


15

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

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

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

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

回答:


10

基本的に、$nodeオブジェクトpathautoが保存されるときにfalseに設定されて渡されることを確認する必要があります。

移行クラスで:

function prepare(&$row) {
  $row->path['pathauto'] = 0;
}

私はそれを試しましたが、Generate automatic URL aliasまだチェックされています。
ケニーワイランド

しかし、私はprepareRow()の代わりにprepare()メソッドであなたの提案を試みましたが、うまくいきました!投稿を編集する場合は、回答として受け入れます。ありがとう!
ケニーワイランド

編集-最初に間違った方法を
見つけた

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を使用していない場合は有効になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.