Wyłącz pathauto dla węzłów utworzonych za pomocą modułu migracji

14

Korzystam z migrowania, aby zaimportować kilka węzłów i chcę ustawić alias ścieżki podczas migracji. Jestem w stanie zaimportować alias ścieżki tak:

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

Kiedy patrzę na zaimportowane węzły, widzę poprawną ścieżkę w pathpolu, ale pole Generate automatic URL aliaswyboru jest nadal zaznaczone, co oznacza, że ​​ustawienie jest ignorowane.

Jak wyłączyć to ustawienie w węźle podczas migracji?

Kenny Wyland
źródło

Odpowiedzi:

10

Zasadniczo musisz upewnić się, że $nodeobiekt jest przekazywany z pathautoustawioną wartością false podczas zapisywania.

W twojej klasie migracji:

function prepare(&$row) {
  $row->path['pathauto'] = 0;
}
jhedstrom
źródło
Próbowałem tego, ale Generate automatic URL aliasnadal jest sprawdzane.
Kenny Wyland
Ale wypróbowałem twoją sugestię w metodzie prepar () zamiast preparRow () i zadziałało! Jeśli edytujesz swój post, zaakceptuję go jako odpowiedź. Dzięki!
Kenny Wyland
Edytowano - po raz pierwszy wprowadzono złą metodę :)
jhedstrom
8
$this->addFieldMapping('pathauto')->defaultValue(0);

Pracuje dla mnie. Pathauto: Wykonaj aliasing (ustaw na 0, aby zapobiec generowaniu aliasu podczas migracji. Zobacz „drush ma” + nazwa swojej klasy, aby uzyskać pełny opis

Luc Bézier
źródło
0

Jeśli czasami, ale nie zawsze, masz przychodzący alias ścieżki, oto jak możesz uruchomić pathauto tylko wtedy, gdy nie ustawiłeś aliasu.

Po pierwsze, w konstruktorze, zarówno map pathi pathauto:

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

Następnie w ::prepareRow()ustaw pathautowłaściwość w zależności od tego, czy jest pathwartość przychodząca :

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

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

}

Powoduje to, że jeśli wyraźnie przeszedłeś ścieżkę, która będzie używana dla aliasu, a jeśli nie, Pathauto się włączy.

nedjo
źródło