site patterns instalar drupal7 drupal-7 profile hook-form-alter

drupal-7 - patterns - token drupal7



Drupal 7 cargar perfil2 programáticamente (5)

Tengo dos perfiles profile2 definidos: main y customer_profile. Además, tengo un tipo de nodo llamado Cliente.

Al crear un nuevo nodo Cliente, me gustaría cargar el formulario custom_profile. La idea es crear un nodo y un perfil simultáneamente.

Sé que definitivamente es una solución hook_form_alter, pero alguien puede decirme cómo cargar un perfil mediante programación al crear o editar un nodo Customer.


Incluso si puede cargar el formulario customer_profile, tendrá que manejar los valores por separado, ya que son dos nodos diferentes.

Sugeriría capturar esos campos en el formulario de nodo de cliente y luego crear un perfil_cliente programáticamente a partir de los valores.

Si desea obtener el formulario profile2 en sí mismo, puede usar algo como

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'');

y luego agréguelo al formulario en el que desea ubicarlo.


Tenía una necesidad similar de crear una pestaña personalizada en la página del usuario y cargar el formulario de perfil de usuario2 en ella.

Aquí hay un código instantáneo de cómo logré lograr eso:

MYMODULE.module https://gist.github.com/4223234

MYMODULE_profile2_MYPROFILE2TYPE.inc https://gist.github.com/4223201

Espero eso ayude.


Puede cargar el tipo de perfil y los datos usando esta función

$types = profile2_get_types(); profile2_load_by_user($account, $type_name = NULL)

Por ejemplo :

$types = profile2_get_types(); if (!empty($types)) { foreach ($types as $type) { $profile = profile2_load_by_user($uid, $type->type); } }


Puede cargar datos completos de perfil usando profile2_load_by_user (); params como: -

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

Entonces codifique como abajo

$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);


Bien Al crear un nuevo Perfil, los campos de Perfil2 no son visibles hasta que se realiza un guardado manual.

Para crear automáticamente el objeto profile2, utilizamos reglas Module
Paso
1) Vaya a Drupal admin / config / workflow / rules
2) crear una nueva regla
3) Ponga un nombre y Seleccione en reaccionar / evento "Después de guardar una nueva cuenta de usuario"
4) Acción, >> Agregar acción >> Ejecutar código PHP personalizado
5) inserte el código php $profile = profile_create(array(''type'' => ''profile2 type machine name'', ''uid'' => $account->uid)); profile2_save($profile); $profile = profile_create(array(''type'' => ''profile2 type machine name'', ''uid'' => $account->uid)); profile2_save($profile);
6) Guardar >> Guardar cambios.
Esto creará el campo profile2 cuando se crea un nuevo usuario.