В Drupal 9 термины таксономии играют решающую роль в организации и категоризации контента. Извлечение объектов терминов таксономии по их словарному имени (vid) может быть распространенным требованием при разработке Drupal. В этой записи блога мы рассмотрим различные методы и приведем примеры кода, которые помогут вам выполнить эту задачу.
Метод 1: использование службы TaxonomyTermStorage
Один из способов получения объектов терминов таксономии по имени словарной машины — использование службы TaxonomyTermStorage, предоставляемой Drupal. Этот метод позволяет запрашивать термины таксономии непосредственно из базы данных.
use Drupal\taxonomy\TermStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/
* Example code to retrieve taxonomy term objects by vocabulary machine name.
*/
function getTermsByVocabularyMachineName($vid) {
// Get the TaxonomyTermStorage service.
$termStorage = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term');
// Load the vocabulary by machine name.
$vocabulary = \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary')->load($vid);
// Get the term IDs for the given vocabulary.
$termIds = $termStorage->getQuery()
->condition('vid', $vocabulary->id())
->execute();
// Load the term entities using the term IDs.
$terms = $termStorage->loadMultiple($termIds);
return $terms;
}
Метод 2. Использование подхода EntityQuery.
Другой метод предполагает использование класса EntityQuery для создания запроса, который извлекает термины таксономии на основе имени словарной машины.
use Drupal\taxonomy\Entity\Term;
use Drupal\taxonomy\Entity\Vocabulary;
/
* Example code to retrieve taxonomy term objects by vocabulary machine name.
*/
function getTermsByVocabularyMachineName($vid) {
// Load the vocabulary by machine name.
$vocabulary = Vocabulary::load($vid);
// Use EntityQuery to retrieve the term entities.
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', $vocabulary->id());
$termIds = $query->execute();
// Load the term entities using the term IDs.
$terms = Term::loadMultiple($termIds);
return $terms;
}
Метод 3. Пользовательский запрос к базе данных.
Если вы предпочитаете более прямой подход, вы можете выполнить собственный запрос к базе данных, чтобы получить термины таксономии на основе имени словарной машины.
/
* Example code to retrieve taxonomy term objects by vocabulary machine name.
*/
function getTermsByVocabularyMachineName($vid) {
$database = \Drupal::database();
$query = $database->select('taxonomy_term_field_data', 't')
->fields('t', ['tid'])
->condition('vid', $vid)
->execute();
$termIds = $query->fetchAll(\PDO::FETCH_COLUMN);
// Load the term entities using the term IDs.
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple($termIds);
return $terms;
}
В этой статье мы рассмотрели различные методы получения объектов терминов таксономии Drupal 9 по имени словарной машины. Вы можете выбирать между использованием службы TaxonomyTermStorage, подходом EntityQuery или выполнением специального запроса к базе данных. Каждый метод обеспечивает разный уровень абстракции и гибкости, что позволяет вам выбрать тот, который лучше всего соответствует вашим конкретным требованиям. Освоив эти методы, вы будете лучше подготовлены к эффективной работе с терминами таксономии в Drupal 9.