2011-01-17 3 views
4

커스텀 드루팔 (Drupal) 노드 내의 특정 필드에 저장된 값을 얻는 "적절한"방법은 무엇입니까? 사용자 정의 노드가있는 사용자 정의 모듈을 사용자 정의 URL 필드와 함께 작성했습니다. 다음 작품 :Drupal 7 사용자 정의 노드의 특정 필드에 포함 된 값을 어떻게 얻어야합니까?

$result = db_query("SELECT nid FROM {node} WHERE title = :title AND type = :type", array(
    ':title' => $title, 
    ':type' => 'custom', 
))->fetchField(); 
$node = node_load($result); 
$url = $node->url['und']['0']['value']; 

...하지만 더 나은 방법, 어쩌면 새로운 필드 API 함수를 사용하여이?

답변

6

node_load() 내가 로케일 하드 코딩하지 않도록 약간 다르게 할 거라고하지만 속성이 적절한 방법으로 다음 필드를 액세스 :

$lang = LANGUAGE_NONE; 
$node = node_load($nid); 
$url = $node->url[$lang][0]['value']; 

방법 당신이 꾸벅 꾸벅를 얻기 위해 사용하고 있는지 그것을 파생 시키는데 특히 곤란한 방법이다. 그 리팩토링에 초점을 대신 EntityFieldQueryentity_load()을 사용하십시오 : 필드 노드가 아닌 다른 기관에 나타나면 제목이 독특한 속성이 아닙니다이며, 이후

$query = new EntityFieldQuery; 
$result = $query 
    ->entityCondition('entity_type', 'node') 
    ->propertyCondition('type', $node_type) 
    ->propertyCondition('title', $title) 
    ->execute(); 

// $result['node'] contains a list of nids where the title matches 
if (!empty($result['node']) { 
    // You could use node_load_multiple() instead of entity_load() for nodes 
    $nodes = entity_load('node', $result['node']); 
} 

당신은 특히이 작업을 수행 할 것입니다. 이 경우 entityCondition()을 삭제합니다.

+0

와 일치하는 사용자 정의 필드의 슬러그입니다 의견을 보내 주셔서 감사합니다! 계속 진행할 노드의 제목 만 있으면 nid를 얻는 더 좋은 방법을 알고 있습니까? –

+0

@Matt EntityFieldQuery와 엔티티 API를 사용합니다. 필드가 노드가 아닌 다른 것에 나타날 수 있다고 생각하면 특히 그렇습니다. 내 대답을 리팩터링 할 수있는 방법으로 업데이트했습니다. –

1

EntityFieldQuery가 논의되는 이유는 모르지만 확인해보십시오. :) 실제로는 field_get_items() 함수를 사용하려고합니다.

if ($nodes = node_load_multiple(array(), array('type' => 'custom', 'title' => $title)) { 
    $node = reset($nodes); 
    if ($items = field_get_items('node', $node, 'url')) { 
    $url = $items[0]['value']; 
    // Do whatever 
    } 
} 
+3

코드에서 사용중인'node_load_multiple()'의 조건 매개 변수가 사용되지 않기 때문에'EntityFieldQuery'가 논의되고 있습니다. (http://api.drupal.org/api/drupal/modules--node--node .module/function/node_load_multiple/7)를 사용하여'EntityFieldQuery'를 사용합니다. 그리고 ['field_get_items()'] (http://api.drupal.org/api/drupal/modules--field--field.module/function/field_get_items/7)와 똑같은 일을 할 수있는 먼 길입니다. 노드에서 속성으로 필드에 액세스합니다. –

+0

매개 변수가 더 이상 사용되지 않지만 ['node_load()'] (http://api.drupal.org/api/drupal/modules--node--node.module/function/node_load/7)는 다음과 같습니다. 여전히 그것을 사용하고 있습니다. 아마도 Drupal 8에서는 사용되지 않을 것입니다.하지만 Drupal 7에서 사용하는 것이 안전하다고 생각합니다. – kiamlaluno

-1

propertyCondition ('field_order_no', '값', '검색 키', '=')

field_order_no는 & 검색 키 값이

관련 문제