Deaktivieren Sie pathauto für Knoten, die mit migrate module erstellt wurden

15

Ich verwende migrate , um eine Reihe von Knoten zu importieren, und möchte den Pfadalias während der Migration festlegen. Ich kann den Pfad-Alias ​​wie folgt importieren:

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

Wenn ich mir die importierten Knoten ansehe, sehe ich den richtigen Pfad im pathFeld, aber das Generate automatic URL aliasKontrollkästchen ist immer noch aktiviert, was bedeutet, dass die Einstellung ignoriert wird.

Wie deaktiviere ich diese Einstellung auf dem Knoten während der Migration?

Kenny Wyland
quelle

Antworten:

10

Grundsätzlich müssen Sie sicherstellen, dass das $nodeObjekt beim Speichern mit dem pathautoWert false übergeben wird.

In Ihrer Migrationsklasse:

function prepare(&$row) {
  $row->path['pathauto'] = 0;
}
jhedstrom
quelle
Ich habe das versucht, aber das Generate automatic URL aliaswird noch geprüft.
Kenny Wyland
Aber ich habe Ihren Vorschlag in der prepare () -Methode anstelle von prepareRow () ausprobiert und es hat funktioniert! Wenn Sie Ihren Beitrag bearbeiten, werde ich ihn als Antwort akzeptieren. Vielen Dank!
Kenny Wyland
Bearbeitet - habe beim ersten Mal die falsche Methode gefunden :)
jhedstrom
8
$this->addFieldMapping('pathauto')->defaultValue(0);

Funktioniert bei mir. Pathauto: Aliasing ausführen (auf 0 gesetzt, um die Generierung von Aliasen während der Migration zu verhindern. Eine vollständige Beschreibung finden Sie unter 'drush ma' + Name Ihrer Klasse

Luc Bézier
quelle
0

Wenn Sie manchmal, aber nicht immer, einen eingehenden Pfadalias haben, können Sie pathauto wie folgt nur auslösen, wenn Sie keinen Alias ​​festgelegt haben.

Ordnen Sie im Konstruktor zunächst beide pathund Folgendes zu pathauto:

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

Legen Sie dann in ::prepareRow()die pathautoEigenschaft fest, je nachdem, ob ein eingehender pathWert vorliegt :

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

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

}

Das Ergebnis ist, dass, wenn Sie explizit einen Pfad eingegeben haben, der für den Alias ​​verwendet wird, Pathauto aktiv wird, wenn Sie dies nicht getan haben.

Nedjo
quelle