이름에서 분류 용어 ID를 어떻게 얻습니까?


답변:


14

그것은의 taxonomy_get_term_by_name () 다음의 코드와 같이 사용합니다.

$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
그것은 TID가 아닌 배열을주는 것 같습니다. $foo[0]->tidTID로 키가 지정된 배열을 반환하기 때문에 아무것도하지 않습니다. 그래서 TID를 얻으려면 TID가 필요합니까, foreach()심지어 하나의 항목에만 있지만합니까? 그렇지 않으면 :Undefined offset: 0
beth

3
여러 용어가 같은 이름을 갖는 것을 막는 것이 없기 때문에 배열을 반환합니다. 당신은 그것이 단지 하나의 아이템이라는 것을 알 수 없습니다.
Letharion

2
@beth 어느과를 통해 특정 단어, 또는 루프에 제한을 두 번째 매개 변수를 사용 foreach ($terms as $term)하여을 확인 $term->vid당신이 권리를 가지고 있는지 확인 할 수 있습니다.
mpdonadio

방금 익숙한 D6 버전을 빠르게 입력했습니다. D7을 실행하고 있음을 포함하여 귀하의 링크 / URL에서 볼 수 있습니다. 위의 의견은 당신을 위해 명확하게해야합니다.
Jimajamma

22

taxonomy_get_term_by_name() 트릭을 할 것입니다 :

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

4
Drupal 7에 추가되어이를 특정 어휘로 제한하는 두 번째 주장도 있습니다. 따라서 동일한 이름을 공유하는 여러 개의 tis가있을 때 원하는 용어를 찾기 위해 결과를 반복 할 필요가 없습니다.
mpdonadio

2
줄에 빠진 세미콜론$first_term = array_shift($terms);
Kevin Siji

1

이 기능은 저에게 효과적이었습니다.

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

다른 어휘를 사용하는 경우 (태그와 다른) 행 위의 코드에서 수정하십시오.

$vocabulary = 'tags';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.