it-swarm.com.de

Begriff nach Namen laden

In Drupal 7) können wir den Begriff mit dem Namen zum Beispiel laden. taxonomy_get_term_by_name($name)

Gibt es eine Möglichkeit, einen Begriff über den angegebenen Namen in Drupal 8) zu laden?

21
Amit Sharma

Diese Funktionalität scheint in Drupal 8) veraltet zu sein.
Verwenden Sie stattdessen die Funktion taxonomy_term_load_multiple_by_name .

Beispiel

<?php

  /**
   * Utility: find term by name and vid.
   * @param null $name
   *  Term name
   * @param null $vid
   *  Term vid
   * @return int
   *  Term id or 0 if none.
   */
  protected function getTidByName($name = NULL, $vid = NULL) {
    $properties = [];
    if (!empty($name)) {
      $properties['name'] = $name;
    }
    if (!empty($vid)) {
      $properties['vid'] = $vid;
    }
    $terms = \Drupal::entityManager()->getStorage('taxonomy_term')->loadByProperties($properties);
    $term = reset($terms);

    return !empty($term) ? $term->id() : 0;
  }

?>
19
DRUPWAY

Sie können Snippet-Code wie folgt verwenden: entityTypeManager :

$term_name = 'Term Name';
$term = \Drupal::entityTypeManager()
      ->getStorage('taxonomy_term')
      ->loadByProperties(['name' => $term_name]);
35
MrD

Gemäß mbenennung der Taxonomiefunktionen, die mehrere Werte zurückgegeben haben , taxonomy_get_term_by_name($name, $vocabulary = NULL) wurde umbenannt taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) . Wenn Sie sich den Code der ersten Funktion ansehen und ihn mit dem Code der zweiten Funktion vergleichen, werden Sie feststellen, dass der wichtigste Unterschied darin besteht, den Aufruf von taxonomy_term_load_multiple(array(), $conditions) ersetzt zu haben mit dem Aufruf von entity_load_multiple_by_properties('taxonomy_term', $values) .

// Drupal 7
function taxonomy_get_term_by_name($name, $vocabulary = NULL) {
  $conditions = array('name' => trim($name));
  if (isset($vocabulary)) {
    $vocabularies = taxonomy_vocabulary_get_names();
    if (isset($vocabularies[$vocabulary])) {
      $conditions['vid'] = $vocabularies[$vocabulary]->vid;
    }
    else {
      // Return an empty array when filtering by a non-existing vocabulary.
      return array();
    }
  }
  return taxonomy_term_load_multiple(array(), $conditions);
}
// Drupal 8
function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
  $values = array('name' => trim($name));
  if (isset($vocabulary)) {
    $vocabularies = taxonomy_vocabulary_get_names();
    if (isset($vocabularies[$vocabulary])) {
      $values['vid'] = $vocabulary;
    }
    else {
      // Return an empty array when filtering by a non-existing vocabulary.
      return array();
    }
  }
  return entity_load_multiple_by_properties('taxonomy_term', $values);
}

Da taxonomy_term_load_multiple_by_name() nicht als veraltet markiert wurde, können Sie diese Funktion weiterhin dort verwenden, wo Sie taxonomy_get_term_by_name() verwendet haben. Beide erfordern dieselben Argumente, sodass beim Konvertieren von Code für Drupal 7 in Code für Drupal 8 in diesem Fall nur der Funktionsname ersetzt werden muss).

2
kiamlaluno

Um eine einzelne Term-ID nach Termname und Vokabular in Drupal 8) zu laden, können Sie das folgende Snippet verwenden.

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
  ->loadByProperties(['name' => $term_name, 'vid' => 'job_category']);
$term = reset($term);
$term_id = $term->id();
1
Renuka Kulkarni

Sie können auch Entitätsfeldabfragen verwenden, um Felder für den Begriff zu laden

$result = \Drupal::entityQuery('taxonomy_term')
          ->condition('field_my_field_name', 'Whatever Value')
          ->execute();
1
frazras