Posted by hemofilia on January 12, 2013 at 3:56pm
Hola a todos, soy nuevo en Drupal y tengo una duda.
He agregado a la cuenta de usuarios algunos campos, que quisiera mostrar desde la plantilla page.tpl.php, pero no logro que me muestre esos campos. Estoy usando lo siguiente:
<?php
print $user->field_nombre
?>Notice: Undefined property: stdClass::$field_nombre en include() (línea 95 ... page.tpl.php).
Seguramente es algo sencillo que estoy obviando, pero no me doy cuenta. Gracias de antemano.
Saludos
H
Comments
Vista
Por que no creas una vista de usuarios tipo bloque y colocas el bloque donde quieras.
Mostrarlos en la presentacion
Hola
Creo que basta con agregarlos en admin/config/people/accounts/fields
y mostrarlos en la presentacion, puedes definir que sea obligatorio llenarlo en el registro o no
saludos
Lo que pasa es q en
Lo que pasa es q en page.tpl.php no esta accesible la variable $user.
Si quieres tener acceso debes hacer lo siguiente:
global $user;Por otra parte esta variable no trae un atributo field_name, sino somplemente 'name', al tratarse de un objeto lo referencias asi:
print($user->name);Puedes ver la estructura de la variable $user haciendo un var_dump:
var_dump($user);Sin embargo, como mensiona meickol, esta no es la manera correcta, ya que no deberias de necesitar editar el template page.tpl.php.
La forma correcta es usando un bloque y simplemente colocandolo donde lo necesitas. Una forma muy sensilla de hacer esto seria creando un view de tipo USER y le pones como filtro el 'User:Current' y como campo el nombre del usuario. Hay otras formas pero esta seria una muy facil.
Espero q te sirva esta informacion.
Si se puede imaginar, se puede programar.
Solución mas optimizada
Como bien dice x7ian, no aparece porque no es visible desde page.tpl.php sin embargo discrepo en que la manera óptima sea una vista en un bloque, és mas rápido de hacer, pero penalizas el rendimiento.
Algo más optimo seria cargar tu propia variable para page.tpl.php con los campos concretos, modificando page.tpl.php.
Ten en cuenta que lo que muestres en ésta plantilla estará visible en todo el portal, si no es lo que quieres, entonces usa el bloque.
He aqui la solucion que he encontrado
Amigos gracias a todos por sus consejos, pero no me valia hacerlo con views ni en un bloque, por razones organizativas del proyecto. Al final buscando por ahi encontre algo cercano y le agregue algunas cosas mas que me hacian falta. Aqui les pongo la solucion que use para que si alguno tiene similar necesidad pueda utilizarlo:
function getUserNameAndRole() {
global $user;
$user = user_load($user->uid);
$rolenames = "";
$entidadUsuario = entity_metadata_wrapper('user',$user);
$nombre = $entidadUsuario -> field_nombre->value();
$apellidos = $entidadUsuario -> field_apellidos->value();
$getRoleNames = db_query("SELECT r.name FROM {users_roles} u INNER JOIN {role} r ON u.rid = r.rid WHERE u.uid = :uid ORDER BY r.rid ASC", array(':uid' => $user->uid));
foreach ($getRoleNames as $record) {
if (empty($rolenames)) {
$rolenames = $record->name;
} else {
$rolenames .= "/".$record->name;
}
}
return $nombre.' '.$apellidos.' ('.$rolenames.')';
}
Resultado ej.: Juan Carlos Carlos Juan (Profesor/Tutor)
Simplemente usando entity api y una consulta a la bd para obtener los role names logre lo que queria. Seguramente hay forma de optimizar el codigo, pues no me considero un experto, pero funcionó para mi. Cualquier aporte sera bienvenido.
Ah! Olvidé algo, por supuesto el resto es simplemente llamar la funcion getUserNameAndRole() en la tpl. La funcion la declare en template.php.
Gracias a todos nuevamente.
Hemofilia
Excelente solucion
Es lo genial de drupal que hay siempre muchas formas de hacer las cosas.
Si se puede imaginar, se puede programar.