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?

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

?>

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]);

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.


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();

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();

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.