drupal中获取 entity reference field 的 node type 值

Posted by Y Cheung on Tue, Nov 25, 2014

标题很拗口我知道……

用过 entity reference 模组的朋友都知道,这个模组(module)能让你在节点(node)中添加一个 Entity Reference 的字段(Field),可以引用其他的实体(entity)。此次添加引用的是节点。根据需求,须输出节点类型(node type),但是 entity reference 的字段只能输出被引用实体的ID(本例是 nid),所以……

解决这个问题的思路是通过被引用节点的ID反查询它的节点类型然后输出到新的字段。但这里面有个问题就是当表单提交以后才能够获取到这个ID,所以实际上是要再编辑这个node的时候才能查询出这个node type。

代码如下:

 1  function entityreference_nodetype_form_alter(&$form, $form_state, $form_id) {
 2      if($form_id == 'test_1_node_form'){  //选择表单id
 3          $form['refer_node_type']['und']['#prefix'] = '<div id="refer-node-type-add-more-wrapper" style="display:none;">'; //为防止编辑者不慎改动这个nodetype值,将其设为不可见
 4          if(!empty($form['field_refer']['und'][0])){		//entity reference field 不为空
 5              $type = node_load($form['field_refer']['und'][0]['target_id']['#value'])->type; //查询该nid的node type
 6              if($form['refer_node_type']['und'][0]['value']['#default_value'] != $type){
 7                  $form['refer_node_type']['und'][0]['value']['#default_value'] = $type;    //设置字段值为千米那获取到的内容类型
 8                  drupal_set_message('內容類型設置完成,請點擊保存按鈕!');
 9              }
10          }
11      }
12  }