โหลดคำตามชื่อ


21

ใน Drupal 7 เราสามารถโหลดคำโดยใช้ชื่อสำหรับ ex taxonomy_get_term_by_name($name)

มีวิธีใดบ้างที่จะโหลดเทอมผ่านชื่อที่ให้ไว้ใน Drupal 8?

คำตอบ:


19

ฟังก์ชันนี้ดูเหมือนจะเลิกใช้แล้วใน Drupal 8
ใช้ฟังก์ชันtaxonomy_term_load_multiple_by_nameแทน

ตัวอย่าง

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

?>

ดูเหมือนว่าโพสต์บล็อกที่เชื่อมโยงจะไม่โหลดอีกต่อไป พบสิ่งนี้ที่อาจเป็นประโยชน์สำหรับผู้อื่นที่พยายามคิดออก btmash.com/article/2016-04-26/…
gcalex5

34

คุณสามารถใช้โค้ดตัวอย่างเช่นโดยใช้entityTypeManager :

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

2

เป็นต่อเปลี่ยนฟังก์ชั่นอนุกรมวิธานที่ส่งกลับค่าหลาย , ได้รับการเปลี่ยนชื่อtaxonomy_get_term_by_name($name, $vocabulary = NULL) taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL)ถ้าคุณดูที่รหัสของฟังก์ชั่นแรกและคุณเปรียบเทียบกับรหัสของฟังก์ชั่นที่สองคุณจะสังเกตเห็นว่าแตกต่างที่เกี่ยวข้องมากที่สุดจะมีการเปลี่ยนการเรียกร้องให้มีการเรียกไปยังtaxonomy_term_load_multiple(array(), $conditions)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);
}

ตั้งแต่ยังไม่ได้ถูกทำเครื่องหมายว่าเลิกคุณยังสามารถใช้ฟังก์ชั่นที่ที่คุณใช้ในการใช้งานtaxonomy_term_load_multiple_by_name() taxonomy_get_term_by_name()พวกเขาทั้งสองต้องการอาร์กิวเมนต์เดียวกันดังนั้นการแปลงรหัสสำหรับ Drupal 7 ในรหัสสำหรับ Drupal 8 ในกรณีนี้เป็นเพียงเรื่องของการเปลี่ยนชื่อฟังก์ชั่น


0

นอกจากนี้คุณยังสามารถใช้แบบสอบถามเขตข้อมูลเอนทิตีเพื่อโหลดตามเขตข้อมูลในคำ

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

0

ในการโหลด ID คำเดียวโดยใช้ชื่อคำศัพท์ใน Drupal 8 -

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.