web-dev-qa-db-fra.com

Désactiver pathauto pour les nœuds créés avec le module de migration

J'utilise migrate pour importer un tas de nœuds et je veux définir l'alias du chemin pendant la migration. Je suis en mesure d'importer l'alias de chemin comme suit:

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

Lorsque je regarde les nœuds importés, je vois le chemin correct dans le champ path, mais le Generate automatic URL alias la case est toujours cochée, ce qui signifie que le paramètre est ignoré.

Comment désactiver ce paramètre sur le nœud pendant la migration?

14
Kenny Wyland

Vous devez essentiellement vous assurer que le $node l'objet est transmis avec pathauto défini sur false lors de son enregistrement.

Dans votre classe de migration:

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

Travaille pour moi. Pathauto: effectuer l'alias (défini sur 0 pour empêcher la génération d'alias pendant la migration Voir 'drush ma' + nom de votre classe pour une description complète

8
Luc Bézier

Si vous avez parfois mais pas toujours un alias de chemin entrant, voici comment vous pouvez déclencher pathauto uniquement lorsque vous n'avez pas défini d'alias.

Tout d'abord, dans le constructeur, mappez à la fois path et pathauto:

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

Ensuite, dans ::prepareRow(), définissez la propriété pathauto selon qu'il existe une valeur path entrante:

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

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

}

Le résultat est que si vous avez explicitement passé un chemin qui sera utilisé pour l'alias, alors que si vous ne l'avez pas fait, Pathauto se déclenchera.

0
nedjo