Begriff nach Namen laden

21

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 einen Vornamen in Drupal 8 zu laden?

Amit Sharma
quelle

Antworten:

19

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;
  }

?>
DRUPWAY
quelle
Verknüpfter Blog-Beitrag wird anscheinend nicht mehr geladen. Fand dieses, das für andere hilfreich sein kann, die versuchen, dieses herauszufinden. btmash.com/article/2016-04-26/…
gcalex5
34

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

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

Gemäß Umbenannt wurden die Taxonomiefunktionen, die mehrere Werte zurückgaben , taxonomy_get_term_by_name($name, $vocabulary = NULL)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 an durch den Aufruf an taxonomy_term_load_multiple(array(), $conditions)zu ersetzen 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()diese Funktion nicht als veraltet markiert wurde, können Sie sie weiterhin an der Stelle verwenden, an der Sie sie früher verwendet haben taxonomy_get_term_by_name(). Beide benötigen dieselben Argumente. In diesem Fall muss der Funktionsname nur ersetzt werden, um den Code für Drupal 7 in Code für Drupal 8 zu konvertieren.

kiamlaluno
quelle
0

Sie können auch Entitätsfeldabfragen verwenden, um nach Feldern im Begriff zu laden

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

So laden Sie eine einzelne Term-ID nach Termname in Drupal 8:

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

Renuka Kulkarni
quelle