답변:
entity_load
@Nikhil이 언급 한대로 엔티티를로드하는 데 사용하십시오 .
그런 다음 entity_extract_ids 를 사용하여 번들을 추출하십시오. 예:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
이 함수 entity_extract_ids
는 다음 요소를 포함하는 숫자 인덱스 배열 (해시 테이블이 아님)을 반환합니다.
여기서, 0
, 1
, 및 2
배열 인덱스이다. 그러나 코어 및 contrib 모듈에서 사용하는 방법은이 list()
기능 을 사용하는 것입니다.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
다음은 Organic groups 모듈 코드에서 얻은 가장 깨끗한 것입니다.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
예를 들어 다음과 같이 호출 할 수 있습니다.
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
편집 : @Clive가 지적했듯이 위의 방법은 엔티티 모듈에 따라 다릅니다.
추가 모듈에 의존하지 않는 다른 방법이 있습니다. https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW에 설명되어 있습니다.
해당 방법을 붙여 넣기 :
function _entity_get_bundle($entity, $entity_type) {
$info = entity_get_info($entity_type);
if (empty($info['entity keys']['bundle'])) {
return $entity_type;
} else {
return $entity->{$info['entity keys']['bundle']};
}
}
$group_type, $gid
? 그리고 가치는 $bundle
무엇입니까?
entity_load
방법은 깨끗한 방법으로?
entity_metadata_wrapper()
보다 깨끗 하다고 생각하지 않습니다 entity_extract_ids()
. 또한 설치중인 엔터티 모듈에 의존합니다.
entity_load를 시도 하십시오
데이터베이스에서 엔티티를로드하십시오.
엔티티는 정적 메모리 캐시에 저장되며 동일한 페이지 요청 중에 다시로드 된 경우 데이터베이스 액세스가 필요하지 않습니다.
$ entity_type :로드 할 엔티티 유형 (예 : 노드 또는 사용자).
$ ids : 엔터티 ID의 배열 또는 모든 엔터티를로드하는 FALSE
$ conditions : (더 이상 사용되지 않음) 키가 데이터베이스 필드이고 값이 해당 필드에 있어야하는 값인 기본 테이블의 연관 조건 배열입니다. 대신 EntityFieldQuery를 사용하여이 함수로로드 할 수있는 엔티티 ID 목록을 검색하는 것이 좋습니다.
$ reset : 요청 된 엔티티 유형의 내부 캐시를 재설정할지 여부입니다.
ID로 색인이 생성 된 엔티티 객체의 배열입니다. 결과가 없으면 빈 배열이 반환됩니다.
성능 측면에서 매우 가벼운 방법으로 노드 ID에서 노드 유형을 가져 오려면 노드 테이블에서 단일 선택 쿼리를 사용할 수 있습니다.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
그렇게하면 entity_load 등을 사용하여 전체 엔티티 후크 시스템을 호출 할 필요가 없습니다.
인덱싱 된 노드 ID를 사용하는 단일 선택 쿼리입니다.