一連のノードをインポートするために migrate を使用していて、移行中にパスエイリアスを設定したい。パスエイリアスを次のようにうまくインポートできます。
$this->addFieldMapping('path', 'url_alias');
インポートされたノードを見ると、path
フィールドに正しいパスが表示されていますが、Generate automatic URL alias
チェックボックスは引き続きオンになっているため、設定は無視されます。
移行中にノードでその設定を無効にするにはどうすればよいですか?
基本的に、$node
オブジェクトは、保存時にpathauto
をfalseに設定して渡されます。
移行クラスで:
function prepare(&$row) {
$row->path['pathauto'] = 0;
}
$this->addFieldMapping('pathauto')->defaultValue(0);
私のために働く。 Pathauto:エイリアスを実行します(移行中にエイリアスが生成されないように0に設定します)詳細については、 'drush ma' +クラスの名前を参照してください
常にではないが着信パスエイリアスがある場合は、エイリアスを設定していない場合にのみ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を使用しなかった場合に有効になります。