Sınıflandırma terimi kimliğini adından nasıl alabilirim?


Yanıtlar:


14

It adlı taxonomy_get_term_by_name () Eğer şu kodda olduğu gibi kullanırlar.

$term_array = taxonomy_get_term_by_name('Foo');
$term = reset($term_array); # get the first element of the array which is our term object
print $term->name;

1
Bu bana bir TID yerine bir dizi veriyor gibi görünüyor. $foo[0]->tidTID'lerle anahtarlanmış bir dizi döndürdüğü için hiçbir şey yapmaz. Yani TID almak için TID ihtiyacım var, ya da foreach()sadece bir öğe üzerinde olsa bile yapmak için ? Aksi takdirde:Undefined offset: 0
beth

3
Birden fazla terimin aynı ada sahip olmasını engelleyen hiçbir şey olmadığı için bir dizi döndürür. Bunun tek bir öğe olduğunu bilemezsiniz.
Letharion

2
@beth, belirli bir sözcük dağarcığını sınırlamak için ikinci parametreyi kullanın veya doğru döngüye sahip foreach ($terms as $term)olup olmadığınızı kontrol etmek için $term->viddüğmelerini kullanın.
mpdonadio

Hemen alışkın olduğum D6 versiyonunu hızlıca yazdım. Artık bağlantılarınız / URL'lerinizden D7 çalıştırdığınızı görüyorum. Yukarıdaki yorumlar sizin için bazı şeyleri açıklığa kavuşturmalıdır.
Jimajamma

22

taxonomy_get_term_by_name() hile yapacak:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}

4
Ayrıca, Drupal 7'ye bunu belirli bir kelime dağarcığıyla sınırlamak için eklenen ikinci bir argüman daha var. Bu, aynı adı paylaşan birden fazla teklifiniz olduğunda istediğiniz terimi bulmak için sonuçlar arasında geçiş yapma ihtiyacını ortadan kaldırır.
mpdonadio

2
Çizgide eksik noktalı virgül$first_term = array_shift($terms);
Kevin Siji

1

Bu işlev benim için çalıştı:

/**
 * Return the term id for a given term name.
 */
function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
  else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}

Başka bir kelime dağarcığı kullanıyorsanız (Etiketlerden farklı), satırın üstündeki kodda değişiklik yapın:

$vocabulary = 'tags';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.