Пример кода работы с entityQuery и Entity API.
В данном примере мы пройдемся по синонимам терминов таксономии и произведем простую замену или создадим новый синоним согласно установленному в системе шаблону.
В 8ке синонимы (path_alias) — это entity объекты, и entityQuery работает с ними как и прочими entity объектами.
Задача: поменять /blog/ на /perspectives/ в существующих синонимах, а если синоним не задан, то создать его по шаблону. Шаблоны настраиваются вот тут (этот функционал предоставлен модулем pathauto):
/admin/config/search/path/patterns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Получим ID терминов из словаря blog_tags $tids = Drupal::entityQuery('taxonomy_term') ->condition('vid', 'blog_tags') ->accessCheck(FALSE) ->execute(); foreach ($tids as $tid) { // Для каждого термина ищем алиас $path_ids = Drupal::entityQuery('path_alias') ->condition('path', '/taxonomy/term/' . $tid) ->condition('alias', '/blog/', 'STARTS_WITH') ->accessCheck(FALSE) ->execute(); // Если синоним есть, то его нужно поправить if ($path_ids) { $path = Drupal\path_alias\Entity\PathAlias::load(array_pop($path_ids)); $path->setAlias(str_replace('/blog/', '/perspectives/', $path->getAlias())); $path->save(); } else { // Если синонима нет, то создадим его // пересохраняя термин $term = Drupal\taxonomy\Entity\Term::load($tid); $term->save(); } } |