Как мне получить значение, содержащееся в определенном поле пользовательского узла Drupal 7? - PullRequest
4 голосов
/ 17 января 2011

Каков «правильный» способ получить значение, хранящееся в определенном поле в пользовательском узле Drupal?Я создал пользовательский модуль с пользовательским узлом, с пользовательским полем URL .Работает следующее:

$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'];

... но есть ли лучший способ, возможно, с использованием новых функций Field API?

Ответы [ 3 ]

6 голосов
/ 17 января 2011

node_load() тогда правильный доступ к полю как свойству, хотя я бы сделал это немного иначе, чтобы избежать жесткого кодирования локали:

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

Метод, который вы используете дляполучить nid - это особенно хитрый способ получить его;Я бы сконцентрировался на рефакторинге этого и использовал бы EntityFieldQuery и entity_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']);
}

Вы хотели бы сделать это, особенно если titleне уникальное свойство, и если поле появляется на объектах, отличных от узлов.В этом случае вы удалите entityCondition().

1 голос
/ 17 января 2011

Не уверен, почему обсуждается 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
  }
}
0 голосов
/ 11 марта 2015

propertyCondition ('field_order_no', 'value', 'search key', '=')

field_order_no - фрагмент настраиваемого поля, а ключ поиска - значение, с которым нужно сопоставить

...