2014-10-20 63 views
0

我有3种类型的内容:餐厅,菜单和菜单项。Drupal 7 - 实体参考 - 仅显示与另一个节点相关的节点相关的项目

我已经设置了我的餐厅内容类型,以便在创建'餐厅'时,我可以使用实体参考和内联实体表单模块创建菜单项菜单项。这一切都很好。

我无法工作的部分是在'餐厅'页面中正确显示菜单项目。 我创建了一个菜单视图块,其中我添加了菜单项字段,并通过内容类型'菜单项'进行过滤。

当我把这个块在我的餐厅网页,我看到正在显示的所有菜单项...

我怎么能仅显示与该有关餐厅菜单的内容类型的菜单项被观看?

编辑: 在我的“餐厅”内容类型我创建了一个field_menu这是一个实体引用到菜单的内容类型,我用的是内联实体表单模块允许范围内“菜单”实体创建“餐厅的创作页面。

同样,在我的'菜单'内容类型中,我有一个field_menu_item,它是对菜单项内容类型的实体引用。

+0

你是如何设置实体的?在餐厅内容类型中有一个字段菜单,它是对菜单内容类型的实体引用,以及菜单内容类型中的字段菜单项,它是对菜单项内容类型的实体引用? – geoandri 2014-10-20 19:22:32

+0

我编辑了我的问题并添加了更多详细信息。谢谢! – barrakuda 2014-10-20 19:37:11

+0

由于通过实体引用进行实体引用,这很复杂。我做了一个尝试,但没有成功。我会再试一次,然后回去,我希望。 – geoandri 2014-10-20 19:58:40

回答

0

在这种情况下,您应该添加菜单项和餐馆之间的关系,以便访问菜单项视图中的菜单项。您可以在高级区域关系中执行此操作,并添加您需要的实体引用。在你的情况下,你应该添加菜单引用字段和餐厅引用字段。他们应该出现类似

Entity Reference: Referencing entity 
A bridge to the Content entity that is referencing Content via menu_item_field 

上述所有应导致菜单域视图的过滤器的外观。当在块视图的过滤器中可以访问菜单字段时,应该为该字段添加一个上下文过滤器。

然后在“当过滤器值不在URL”区域中的上下文过滤器中选择“提供默认值”并输入“PHP代码”(您应该为此启用php过滤器)。在你的php代码区你应该有下面的代码

$node=menu_get_object(); 
return $node->field_your_machine_field_name['und'][0]['target_id']; // this is the field you will use for filttering.It should be the menu field in the restaurant content type 

希望我没有把你搞糊涂。这不是一个简单的任务。

+0

我在添加关系弹出窗口中看不到restaurant_field的选项。我只看到field_menu和field_menu_item的选项。 – barrakuda 2014-10-20 20:00:48

+0

添加第一个关系后,第二个关系应该可用 – geoandri 2014-10-20 20:01:27

+0

我的菜单内容类型中没有restaurant_field,因此在创建视图时,我看不到选择“实体参考:参考实体..”的选项.. 。via restaurant_field“我将内容类型链接到一起的方式如下:餐厅>菜单>菜单项。因此,在餐厅内容类型中,我引用菜单,并在菜单中引用菜单项。这似乎是应该建立的,但我不确定我是否应该做其他事情。 – barrakuda 2014-10-21 14:33:20