首页 / 帖子
Drupal7里面有没有比较好的获取字段值的方法?

Drupal7里面有没有推荐一下,比较好的获取字段值的方法?

entity_metadata_wrapper如果调用没有的字段也会报错,直接用node->field['un'][0]的写法比较丑陋,并且还得检查一下,有没有比较优美的做法?

早安!

3个答案
王斌
发布于:2015-10-16 10:42

获取 field大多数用 entity_metadata_wrapper 还是比较方便。

我有一个私人方法,推荐一下:

function get_field_value($field_name, $node) {
  $fields = array('nid', 'vid', 'uid', 'status', 'type', 'title', 'comment', 'status', 'sticky', 'language', 'created', 'changed');
  if (in_array($field_name, $fields)) {
    return $node->{$field_name};
  }
  else {
    $items = field_get_items('node', $node, $field_name, $node->language);
    if (!empty($items)) {
      $item = reset($items);
      return isset($item['safe_value']) ? $item['safe_value'] : $item['value'];
    }
    else {
      return NULL;
    }
  }
}


刘伯彪
发布于:2015-10-16 10:49

看到一个这个方法,参考网址:

http://dominiquedecooman.com/blog/drupal-7-tip-get-field-values-entity-objects-nodes-users-taxonomy


<?php
/**
 * Returns field values as actual entities where possible,
 * also allows selection of individual items to be returned
 */
function field_fetch_field_values($entity_type, $entity, $field_name, $get_delta = NULL, $get_key = NULL) {
  $values = array();
  if (isset($entity->$field_name) && !empty($entity->$field_name)) {
    foreach (field_get_items($entity_type, $entity, $field_name) as $delta => $item) {
      $value = $item;
      $keys = array_keys($item);
      if (count($keys)==1) {
        $key = $keys[0];
        switch ($key) {
          case 'nid':
            $value = array_shift(entity_load('node', array($item[$key])));
            break;
          case 'uid':
            $value = array_shift(entity_load('user', array($item[$key])));
            break;
          case 'tid':
            $value = array_shift(entity_load('taxonomy_term', array($item[$key])));
            break;
          case 'vid':
            $value = array_shift(entity_load('taxonomy_vocabulary', array($item[$key])));
            break;
          case 'value':
            $value = $item['value'];
            break;
        }
      }
      else {
        if ($get_key && isset($item[$get_key])) {
          $value = $item[$get_key];
        }
        elseif (array_key_exists('value', $item)) {
          $value = isset($item['safe_value']) ? $item['safe_value'] : $item['value'];
        }
      }
      $values[$delta] = $value;
    }
  }
  if (is_numeric($get_delta)) {
    return isset($values[$get_delta]) ? $values[$get_delta] : NULL;
  }
  return $values;
}
?> - See more at: http://dominiquedecooman.com/blog/drupal-7-tip-get-field-values-entity-objects-nodes-users-taxonomy#sthash.kM55fB1I.dpuf


陈蹊
发布于:2015-10-21 16:09

我一般这么弄的 就是用dpm把数据打印出来 然后取值其实非常好取.