Drupal 7 开发内部培训资料, 分头诗人

如何实现在一对多关系中自动建立映射关系(使用entity reference或者不使用)

赞成!
0
否决!

我有这样一个需要,在这里和大家探讨一下实现的思路.

 

我要做一个旅游网站,

有两个content type 

place (景点)

travel guild (游记攻略)

 

一个place内容类型页面下,注册用户可以添加多个 travel guild,在place页面里,有一个链接,用户打开以后,创建travel guild内容类型的 表单里的entity reference field 自动关联 刚才的那个 place 类型页面.

 

用什么模块可以直接实现,或者需要单独写代码吗?这是一个相当普遍的问题.在很多种应用下都能用到.

 

entity reference  entity selection mode支持两种模式 simple和views模式,这种情况肯定是使用views模式,

views ui创建一个entity reference,我用的是CONTEXTUAL FILTERS在url中传递要引用的node id值,

比如创建travel guild的链接为http://www.usuqian.com/node/add/travel-guild/1

但是仍然要手动选择entity reference field的值,修改的时候也仍然需要传递那个place的node id.

 

想问大家有没有一种更好的方法来自动填充 entity reference field的值,在修改这个travel guild的时候这个值是无法修改的

 

4 个回答

赞成!
0
否决!

其实你只是添加travel guild内容,然后直接就指定到place上面。这个涉及到几大drupal知识:

1,建立表单(form API),通过表单提交函数,对内容进行修改

2,node_save或 drupal_write_record或db_insert,通过他们把数据保存,最好用node_save

3,了解entity reference所需要的表,提交后的表数据变化。

赞成!
0
否决!

你这种方法需要自己写代码,而且实现方法也不通用.需要对drupal有很多的了解才行,我在drupal.com上发现一个叫做 entity reference autofill的模块,再研究看看

赞成!
0
否决!

终于找到一个相当完美的方案了,自己的问题还是要自己回答呀!也再次验证了drupal功能的强大,没有做不到只有想不到

 

使用https://www.drupal.org/project/entityreference_prepopulate 完美的解决了问题,贴上这个module的readme

 

Description
===========
Allows the contents of an "Entity Reference" field to be pre-populated by
taking a parameter from the URL path.

Install
=======
1. Download and enable the module.
2. Visit admin/structure/types/manage/[ENTITY-TYPE]/fields/[FIELD-NAME]
3. Enable "Entity reference prepopulate" under the instance settings.

Configuration
=============
Enable Entity reference prepopulate:
  Check this to enable Entity reference prepopulate on this field.
Action
  Using the select box choose the action to take if the entity reference
  field is pre-populated.
Fallback behaviour
  Select what to do if the URL path does NOT contain a parameter to
  pre-populate the field.
Skip access permission
  This is a fallback override, the fallback behaviour will not be followed
  for users with the specified permission.

Usage
=====
In order to pre-populate an entity reference field you have to supply the
parameter in the URL.

The structure is
node/add/article?[field_ref]=[id]

Where [field_ref] is the name of the entity reference field and [id] is
the id of the entity being referenced.

Examples:
node/add/article?field_foo=1
node/add/page?field_bar=1,2,3

 

===================================================================

在后台开启这个模块后,编辑entity reference field设置如下

 

在place 内容中手动添加一个链接

<a href="/node/add/travel-guild/?field_target=1">写游记攻略</a>

field_target是我自己的entityreference field 的名子,1是reference node 的id

赞成!
0
否决!

cool, 感谢 waipy 无私奉献