hook_pathauto_pattern_alter()
este invocat numai atunci când:
- Entitatea are un cale camp
- Procesarea Pathauto este activată
- Pentru entitățile care acceptă revizuiri, entitatea utilizează versiunea implicită
- Un model implicit a fost setat pentru acea entitate
$entity->toUrl()->getInternalPath()
nu arunca a EntityMalformedException
, UndefinedLinkTemplateException
, sau UnexpectedValueException
excepție
Cârligul afișat este, de asemenea, invocat numai atunci când o entitate este actualizată, nu atunci când este creată o entitate.
Când modulul Pathauto a fost setat să nu schimbe un alias de cale existent, chiar dacă hook_pathauto_pattern_alter()
au fost invocate, alias-ul căii nu va fi schimbat.
Ca o notă secundară, hook-ul ar trebui să verifice mai întâi că entitatea pentru care este invocat hook-ul este un nod, ceea ce este în exemplul hook-ului pathauto.api.php face.
funcția hook_pathauto_pattern_alter(\Drupal\pathauto\PathautoPatternInterface $pattern, matrice $context) {
if ($context['modul'] == 'nod' && ($context['op'] == 'actualizare')) {
$pattern->setPattern(preg_replace('/\[node:created(\:[^]]*)?\]/', '[node:updated$1]', $pattern->getPattern()));
}
}
Codul pentru cârligul afișat ar fi similar cu următorul.
utilizați Drupal\pathauto\PathautoPatternInterface;
function mymodule_pathauto_pattern_alter(PathautoPatternInterface $pattern, matrice $context) {
if ($context['modul'] == 'nod' && $context['op'] === "actualizare" && $context['bundle'] === "știri") {
$nod = $context['date']['node'];
$arhivat = $nod->get('field_archived')->getString() === "1";
dacă ($arhivat) {
$pattern->setPattern('/archive/[node::title]');
}
}
}
Obiectele sunt deja trecute prin referință; nu este necesar să se definească primul parametru ca &$model
.
De asemenea, aș verifica că nu există alte module implementate hook_pathauto_pattern_alter()
pentru care implementarea lor este invocată după implementarea prezentată în întrebare și asta modifică modelul pentru aceeași entitate și același pachet.
Referințe