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?
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;
}
$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
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.