我一直在修补这个问题并尝试研究几个小时。我仍然熟悉Drupal 7的实体API,并且一直在尝试使用PHP,但无济于事 - 我想我错过了一些非常明显的东西,因为我厌倦了大脑过度思考的事情。
我有两种内容类型,CT1和CT2。 CT1有一个可以保存多个Field Collection值的字段。在此字段集合(field_coll_ct2)中,其中一个字段(field_ct2_ref)是对内容类型为CT2的节点的实体引用。
现在,当我查看CT1类型的单个节点时,我想要一个块视图,它将显示CT1节点的field_coll_ct2字段集合字段中引用的所有CT2节点。
我的主要方法是在同一种关系的非字段集合字段上工作,就是在Content:NID上添加一个上下文过滤器。从那里,因为它是一个块和URL参数传递是不可能的(7-8种不同的内容类型之间有这么多种关系,每个节点不同的元组,使用URL是绝对不可行的对于参数传递)我将它设置为'提供默认值'类型'PHP'和'允许多个值',这里它是毛茸茸的。
我需要在当前查看的节点的field_coll_ct2字段集合中获取所有field_ct2_ref实体引用。我尝试过使用:
$wrapper = entity_metadata_wrapper($entity_type, $entity);
return $wrapper->field_coll_ct2->field_ct2_ref->value();
或
$node=menu_get_object();
foreach ($node->field_coll_ct2['und'] as $record)
{
$values[]= $record['value'];
}
foreach($values as $val){
$tgts[]=$val['every'][index]['possible'];
}
return $tgts[omg];
并且可能接近上述的一百种变体,试图让它返回一些模糊地类似于CT2类型节点的实体引用的东西。
我似乎无法深入挖掘实体/字段引用,以获得对所有非字段集合字段都有效的field_ct2_ref ['und'] [0] ['target_id']关系。或者我收到AJAX错误告诉我'未知数据属性field_coll_ct2'或控制台错误,说我试图抛出这些数组对象的每个索引(甚至只是获得其中一个值)是错误的。
有更简单的方法吗?我是否遗漏了一些简单而明显的东西 - 无论是我实现我的View还是PHP本身?
对于它的价值,通过选择与“引用实体:field_ct2_ref”的关系,我已经能够在没有任何上下文过滤器的情况下缩小视图结果,但它显示了由任何CT1类型节点引用的所有CT2节点而不是特定的CT1类型的节点我正在看。
谢谢!