Actualmente estoy desarrollando un sistema de reportes en los cuales necesito informacion del perfil del usuario en las diferentes etapas del sistema, para esto estoy usando el hook_user para que cuando el usuario se autentifique cargue la informacion en el objeto $user, lo que tengo es algo como esto, pero he echo pruebas con informacion directa pero no pasa nada, alguien puede decirme que esta mal???
function squad_user($op, &$edit, &$account, $category = NULL) {
switch($op) {
case 'load':
$account->puesto = "EL NOMBRE DEL PUESTO (profile_puesto)";
$account->departamento = "EL NOMBRE DEL DEPARTAMENTO (profile_departamento)";
break;
}
}
Solucion alternativa
Pueden ver los comentarios en: http://drupal.org/node/282999
Despues de varios post me dieron una alternativa a lo que estoy haciendo, la razon fue por que cuando quiero visualizar la informacion que tiene el objeto, no la puedo visualizar por que no se carga apropiadamente el objeto $user en la pagina, asi que se tiene que hacer un llamado explicito en donde se requiere por medio de user_load.
Gracias por tu tiempo :)
Mas informacion
- La version de drupal es 5.7
- Hice una impresion del parametro con drupal_set_message y parece correcto.
- Tengo un tipo de contenido llamado squad y en su formulario tomo la informacion del objeto $user, pero no aparecen los campos "puesto", "departamento", supongo que esta infomacion debio cargarse en la funcion "squad_user", el codigo es el siguiente:
<?PHP
/**
* Implementation of hook_form().
*/
function squad_form(&$node) {
$type = node_get_types('type', $node);
global $user;
print_r($user); // ---------------------------- Dont appear "nombre_completo", "puesto", "departamento"
$form['header'] = array(
'#type' => 'fieldset',
'#title' => t('Informacion de la persona que emite el reporte.'),
'#weight' => -5,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['header']['nombre_completo'] = array(
'#type' => 'textfield',
'#title' => t('Nombre completo'),
'#default_value' => $user->nombre_completo, // -------------Here
'#size' => 45,
'#requiered' => FALSE,
'#attributes' => array('class' => 'squad_trans_field'),
);
$form['header']['puesto'] = array(
'#type' => 'textfield',
'#title' => t('Puesto'),
'#default_value' => $user->puesto, // -----------------------Here
'#size' => 70,
'#requiered' => false,
);
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
);
$form['descripcion'] = array(
'#type' => 'textarea',
'#title' => check_plain($type->body_label),
'#default_value' => $node->body,
'#required' => FALSE
);
return $form;
}
/**
* Implementation of hook_user().
*/
function squad_user($op, &$edit, &$user, $category = NULL) {
switch($op) {
case 'load':
/* drupal_set_message( $user->name );*/
$user->nombre_completo = "NOMBRE COMPLETO (profile_firstname, profile_lastname)";
$user->puesto = "EL NOMBRE DEL PUESTO (profile_puesto)";
$user->departamento = "EL NOMBRE DEL DEPARTAMENTO (profile_departamento)";
break;
}
}
---------------------------------------------
Cualquier sugerencia es completamente util
Si firstname, lastaname ,
Si firstname, lastaname , puesto y departamento están en el profile, es ahí donde hay que ir a buscar los datos no en el objeto $user. Honestamente no se si hay un modo de guardar esos datos en el objeto $user, aunque creo que no es necesario. No tengo en claro que es lo que quieres hacer con esos datos tampoco, si quisieras cargar esos valores en el cck de squad_user, te recomiendo hacerlo mediante un form_alter, cargando los datos desde la tabla de profile, si es que ahi es donde estan los valores.
Espero haber sido de ayuda.
Creo que se hace con esta
Creo que se hace con esta función ;)
profile_load_profile($user);http://api.drupal.org/api/function/profile_load_profile/5
De Drupal y muchas mas cosas.
http://www.cambrico.net
No creo que guardarlas en el
No creo que guardarlas en el objeto user sea posible al menos que modifiques la tabla correspondiente a user para poder acoplar esos campos. Si la información esta guardada en el profile del usuario lo mas practico es crearte una función que extraiga esos valores y los muestre donde quieras.
Pro drupal development
En el capitulo 6 del libro "Pro drupal development" dice: "During the session phase of the bootstrap process, Drupal creates a global $user object that represents the identity of the current user.", este es el objeto al que me refiero, y dentro del mismo capitulo viene un ejemplo para agregar datos en ese objeto, pero no me funciona, tengo instalado drupal 5 la misma version que maneja el libro.
Lo unico extraño que noto es que en los parametros del hook_user usan el parametro &$user y en la pagina del api de drupal usan el parametro &$account, pero ya lo intente con los dos y nada.
Por ultimo nunca he sacado informacion directamente de profile del usuario, me podrias recomendar una forma simple que conozcas, :)
Saludos
¿No te valdria usar el
¿No te valdria usar el modulo profile para esto?
De Drupal y muchas mas cosas.
http://www.cambrico.net
Uso el module profile
El nombre del puesto y el departamento son campos que se encuentran en el perfil del usuario. Lo que quiero es que esa informacion quede guardada en el objeto $user para que pueda accesarla mas comodamente. Tienes una sugerencia para eso??, gracias por tu comentario