我定义了两个profile2配置文件 - main和customer_profile。另外,我有一个名为Customer的节点类型。
创建新的Customer节点时,我想加载custom_profile表单。我们的想法是同时创建一个节点和一个配置文件。
我知道它肯定是一个hook_form_alter解决方案,但有人可以告诉我如何在创建或编辑客户节点时以编程方式加载配置文件。
答案 0 :(得分:4)
您可以使用这些功能
加载配置文件类型和数据$types = profile2_get_types();
profile2_load_by_user($account, $type_name = NULL)
例如:
$types = profile2_get_types();
if (!empty($types)) {
foreach ($types as $type) {
$profile = profile2_load_by_user($uid, $type->type);
}
}
答案 1 :(得分:0)
即使您能够加载customer_profile表单,您也需要单独处理这些值,因为它们是两个不同的节点。
我建议在客户节点表单中捕获这些字段,然后以编程方式从值创建customer_profile。
如果您想获取profile2表单,那么您可以使用类似
的内容module_load_include('inc', 'profile2_page', 'profile2_page');
$profile2 = profile2_by_uid_load($uid, 'seeker_profile');
$entity_form = entity_ui_get_form('profile2', $profile2, 'edit');
然后将其添加到要放入的表单中。
答案 2 :(得分:0)
您可以使用profile2_load_by_user()加载完整的个人资料数据; 如下: -
profile2_load_by_user($account,$type_name)
$account: The user account to load profiles for, or its uid.
$type_name: To load a single profile, pass the type name of the profile to load
所以代码如bellow
$account->uid = $existingUser->uid;
$type_name = 'user_about';
$profile = profile2_load_by_user($account, $type_name);
//$profile variable have full data of profile fields
//changing data profile2 fields
if(isset($_POST['field_user_first_name'])&& !empty($_POST['field_user_first_name'])){
$profile->field_user_first_name['und'][0]['value'] = $_POST['field_user_first_name'];
}
profile2_save($profile);
答案 3 :(得分:0)
当创建新的配置文件时,在手动保存完成之前,Profile2字段不可见。
要自动创建profile2对象,我们使用规则模块
步骤
1)转到Drupal admin / config / workflow / rules
2)创建新规则
3)给出一个名称并选择反应/事件“保存新用户帐户后”
4)动作,>>添加操作>>执行自定义PHP代码
5)插入php代码
$profile = profile_create(array('type' => 'profile2 type machine name', 'uid' => $account->uid));
profile2_save($profile);
6)保存>>保存更改。
这将在创建新用户时创建profile2字段。
答案 4 :(得分:-1)
我有类似的需要在用户页面创建自定义标签并在其中加载用户个人资料2。
以下是我如何成功实现的快照代码:
MYMODULE.module https://gist.github.com/4223234
MYMODULE_profile2_MYPROFILE2TYPE.inc https://gist.github.com/4223201
希望它有所帮助。