Como cargar un field definido para los usuarios en page.tpl.php

Events happening in the community are now at Drupal community events on www.drupal.org.
hemofilia's picture

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
?>
pero no me aparece nada y me da el siguiente error:

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

meickol's picture

Por que no creas una vista de usuarios tipo bloque y colocas el bloque donde quieras.

Mostrarlos en la presentacion

alblez's picture

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

x7ian's picture

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

ecdani's picture

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

hemofilia's picture

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

x7ian's picture

Es lo genial de drupal que hay siempre muchas formas de hacer las cosas.

Si se puede imaginar, se puede programar.

Spanish

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week