Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

layout personalizado para perfil

Estas en el tema de layout personalizado para perfil en el foro de Drupal en Foros del Web. Hola gente, pido perdón por adelantado, ya que llevo muchos post sobre Drupal en los últimos dias, pero a medida que voy avanzando me surgen ...
  #1 (permalink)  
Antiguo 31/07/2011, 09:33
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
layout personalizado para perfil

Hola gente, pido perdón por adelantado, ya que llevo muchos post sobre Drupal en los últimos dias, pero a medida que voy avanzando me surgen nuevas dudas respecto a la modificación de la apariencia de determinadas partes.

El tema es que quiero mostrar el perfil del usuario que como lo hace por defecto (Drupal 6) y me gustaría saber los pasos; por lo que he leído por ahí tengo que:

1 Crear una función dentro de mi theme que se llame (en template.php) :
function phptemplate_preprocess_user_profile_category(&$variables)

2 Crear un layout dentro de mi theme que se llame:
user-profile-category.tpl.php

He probado a poner algo (como un "hola mundo") dentro de user-profile-category.tpl.php y veo que funciona, lo que no tengo claro es que debo poner en
phptemplate_preprocess_user_profile_category porque eso no lo encuentro por ningún lado por mucho que busco.

Utilizo una herramienta del módulo DEVEL que me muestra lo siguiente:
File used:
sites/all/themes/mi_garland/user-profile-category.tpl.php

Es decir que eso al menos lo he hecho bien , estoy utilizando ya mi propio layout ,pero ahora necesito saber lo más importante que no encuentro por ningún lado, como recuperar todos los datos del perfil desde allí para poderlos mostrar a mi antojo.

Nota:utilizo Drupal 6 y el theme Garland.

Gracias de antemano y perdonar por el coñazo.
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 31/07/2011, 11:57
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: layout personalizado para perfil

No se si conozcas el patron Modelo - Vista - Controlador (MVC), pero ponete a pensar que el modelo es la base de datos, la vista son los tpls en donde programar ... y el controlador es lo que interactua con el modelo para pasarle los datos a la vista.

Resumiendo: En tu preprocess vos declaras las variables, y en los tpls las usas.
Es muy comun que dentro de los ficheros tpls tambien hagas llamadas a la base de datos, o declares variables y demas. Pero, siendo puristas, no deberiamos hacerlo, ya que la vista es para mostrar el html, y el controlador lo usamos para declarar esas variables que iran dentro de un tpl....

Declara la siguiente funcion:

Código PHP:
function phptemplate_preprocess_user_profile_category(&$variables){
   global 
$user;
   
$variables["usuario"] = $user;

Dentro del tpl user-profile-category.tpl.php pone esto:

Código PHP:
<?php
    print_r
($usuario);
?>
Te deberia funcionar, siguiendo esta metodologia, declara las variables que vayas a usar en la primer funcion, y en el tpl solo imprimilas.

Saludos.
  #3 (permalink)  
Antiguo 31/07/2011, 13:45
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por MarioAraque Ver Mensaje
No se si conozcas el patron Modelo - Vista - Controlador (MVC), pero ponete a pensar que el modelo es la base de datos, la vista son los tpls en donde programar ... y el controlador es lo que interactua con el modelo para pasarle los datos a la vista.

Declara la siguiente funcion:

Código PHP:
function phptemplate_preprocess_user_profile_category(&$variables){
   global 
$user;
   
$variables["usuario"] = $user;

Dentro del tpl user-profile-category.tpl.php pone esto:

Código PHP:
<?php
    print_r
($usuario);
?>
Te deberia funcionar, siguiendo esta metodologia, declara las variables que vayas a usar en la primer funcion, y en el tpl solo imprimilas.

Saludos.
Si conozco ese concepto (MVC) bastante bien ,con lo que aún no estoy 100% familiarizado es con la forma de trabajar con Drupal ( llevo poco tiempo investigando este tema); la cosa es que en tu ejemplo utilizas la variable global user , pero si quiero acceder a los elementos del perfil (nombre, apellidos, etc etc) ¿como lo hago? ¿que variable debo utilizar?.

Gracias de antemano.
__________________
Videotutoriales de Drupal
  #4 (permalink)  
Antiguo 31/07/2011, 14:07
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: layout personalizado para perfil

Fijate que a la funcion phptemplate_preprocess_user_profile_category le pasas una variable llamada $variables, que esta pasada como referencia.
Esa variable trae informacion sobre todo lo que vos vas a necesitar, yo que vos le haria un print_r y veria lo que contiene, y vas a ver que seguro tendras, como minimo, el id del usuario del perfil que estas viendo.
A ese id le haces un user_load y tenes lo que necesitas, pero doy casi por seguro que todo lo que necesitas esta dentro de la variable $variables.

Yo puse la variable global por dar un ejemplo facil, pero vos podes poner lo que quieras, incluso cadenas de texto o codigo html...

Saludos.
  #5 (permalink)  
Antiguo 31/07/2011, 15:56
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: layout personalizado para perfil

Ya que tienes devel instalado, lo mejor es usarlo.

Código PHP:
Ver original
  1. function phptemplate_preprocess_user_profile_category(&$variables){
  2. krumo($variables);
  3.    global $user;
  4.    $variables["usuario"] = $user;
  5. }
Eso te va a imprimir las variables disponbles...
__________________
Drupal Argentina
  #6 (permalink)  
Antiguo 01/08/2011, 03:58
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por NUCKLEAR Ver Mensaje
Ya que tienes devel instalado, lo mejor es usarlo.

Código PHP:
Ver original
  1. function phptemplate_preprocess_user_profile_category(&$variables){
  2. krumo($variables);
  3.    global $user;
  4.    $variables["usuario"] = $user;
  5. }
Eso te va a imprimir las variables disponbles...
He intendado hacerlo lo mismo pero con dsm($variables); según un curso que seguí de lullabot donde en todos los ejemplos utilizaban dsm , supongo que krumo será similar , porque cierto es que dsm no me funciona con Drupal6.

Por cierto lo he hecho con krumo como me sugeriste, pero el problema que la verdad que me lo imaginaba despúes de haber revisado el código del módulo user ; es que me devuelve esto:

profile_items (String, 411 characters ) <span id="thmr_15" class="thmr_call"> <div cl...

<span id="thmr_15" class="thmr_call"> <div class="form-item"> <label>Grupos: </label> <span id="thmr_5" class="thmr_call"> <div class="item-list"><ul><li><a href="/mi_stio/node/58">Partidas 2007</a></li> <li><a href="/mi_stio/node/79">Partida 2007 Inicial</a></li> </ul></div></span> </div> </span> <span id="thmr_17" class="thmr_call"> <dt>Miembro durante</dt> <dd>46 semanas 3 días</dd> </span>


Claro que recuperar así dato a dato es complicado, (ya que devuelve un string no un array) si devolviera un array otro gallo cantaría , ¿o existe alguna otra forma de recuperar cada elemento del perfil a traves de un array (es decir por ejempo perfil['nombre'] , $perfil['apellido') etc etc..

Para recuperar estos datos de esta forma podría utilziar alguna expresión regular, pero lo veo demasiado complicarse la vida y demasiada sobrecarga para el script , por eso seguramente exista otro modo de hacerlo.

Un saludo y gracias
__________________
Videotutoriales de Drupal

Última edición por Dundee; 01/08/2011 a las 04:07
  #7 (permalink)  
Antiguo 01/08/2011, 05:54
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: layout personalizado para perfil

Tenes mal planteado tu theme entonces, recorda que el page.tpl padre debe imprimir $closure en el footer y en el header debes imprimir $head $styles y $scripts. Y si te sigue sin aparecer con Krumo, revisa tu modulo.

Ahora tambien lo podes hacer con print_r($variables) pero agregale un <pre></pre> para que lo puedas leer facilmente. o Vas a tener que ver html generado para entenderlo...
__________________
Drupal Argentina
  #8 (permalink)  
Antiguo 01/08/2011, 11:43
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por NUCKLEAR Ver Mensaje
Tenes mal planteado tu theme entonces, recorda que el page.tpl padre debe imprimir $closure en el footer y en el header debes imprimir $head $styles y $scripts. Y si te sigue sin aparecer con Krumo, revisa tu modulo.
Perdona por mi ignorancia, pero no digo que no imprima las variables , si hago lo que dices con krumo me muestra esto:

Código:
profile_items (String, 411 characters ) <span id="thmr_15" class="thmr_call"> <div cl...

<span id="thmr_15" class="thmr_call"> <div class="form-item"> <label>Grupos: </label> <span id="thmr_5" class="thmr_call"> <div class="item-list"><ul><li><a href="/mi_stio/node/58">Partidas 2007</a></li> <li><a href="/mi_stio/node/79">Partida 2007 Inicial</a></li> </ul></div></span> </div> </span> <span id="thmr_17" class="thmr_call"> <dt>Miembro durante</dt> <dd>46 semanas 3 días</dd> </span>
El problema es que es un string y no un array con todos los elementos del perfil para poder trabajar con ellos y "maquetarlos".
Ese contenido que yo sepa es del módulo user (del core) no es un módulo mio ni es de la plantilla mia (insisto según yo entiendo con mi corta experiencia con Drupal).

Por cierto (si sirve de algo), mi page.tpl es el que viene por defecto con GARLAND (me he fijado he imprime $closure y $head $styles).

Gracias
__________________
Videotutoriales de Drupal
  #9 (permalink)  
Antiguo 01/08/2011, 11:51
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: layout personalizado para perfil

Pudiste llegar a las variables?
de ultima pone

Código PHP:
echo "<pre>";
print_r($variables);
echo 
"<pre>"
Lo que te devuelve es un array si o si, mira lo que hay dentro y fijate si algo te sirve,si no, ahi lo podes declarar!

Saludos.
  #10 (permalink)  
Antiguo 01/08/2011, 12:05
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por MarioAraque Ver Mensaje
Pudiste llegar a las variables?
de ultima pone

Código PHP:
echo "<pre>";
print_r($variables);
echo 
"<pre>"
Lo que te devuelve es un array si o si, mira lo que hay dentro y fijate si algo te sirve,si no, ahi lo podes declarar!

Saludos.
Si así si que sale un array , pero no entiendo porque si hago lo que me decía NUKLEAR con krumo me salía todo el perfil dentro de un solo string, y de la manera que tu dices sale como array, hay algun concepto que no tengo claro.
Código:
Array
(
    [template_files] => Array
        (
        )

    [element] => Array
        (
            [profile_nombre] => Array
                (
                    [#required] => 
                    [#tree] => 
                    [#parents] => Array
                        (
                        )

                    [#description] => 
                    [#attributes] => Array
                        (
                            [class] => profile-profile_nombre
                        )

                    [#title] => Nombre
                    [#value] => Manolo
                    [#weight] => -10
                    [#type] => user_profile_item
                    [#printed] => 1
                )

            [profile_apellidos] => Array
                (
                    [#required] => 
                    [#tree] => 
                    [#parents] => Array
                        (
                        )

                    [#description] => 
                    [#attributes] => Array
                        (
                            [class] => profile-profile_apellidos
                        )

                    [#title] => Apellidos
                    [#value] => Perez
                    [#weight] => -9
                    [#type] => user_profile_item
                    [#printed] => 1
                )
Ahora si quiero acceder por ejemplo a profile_nombre tengo que hacer echo $variable [template_files] [profile_nombre] ??

Gracias y disculpar por tantas preguntas
__________________
Videotutoriales de Drupal
  #11 (permalink)  
Antiguo 01/08/2011, 12:30
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: layout personalizado para perfil

A ver, yo tampoco uso mucho el Devel la verdad ... Krumo es una variante al print_r clasico de php, que te devuelve toda la estructura de arrays y objetos de una manera "linda de ver", para que vos puedas hacer el dump de las variables mucho mas facil.

Sinceramente nunca use krumo, pero no deja de ser una alternativa al print_r, si te sirve lo que te puse yo, entonces listo, eso si, para que krumo te funcione tenes q tener habilitado el devel, y no se si alguna configuracion mas....en eso no puedo ayudarte, pq nisiquiera instalo devel en las webs que hago jaja. Es algo pendiente que tengo...

Para acceder a profile_nombre tenes que hacer

Código PHP:
 echo $variables["element"]["profile_nombre"]; 
template_files esta arriba, fijate como si todo fuera una estructura de arbol, donde hay arrays de arrays, luego dentro de profile_nombre tenes otro array en parents, pero si imprimis #value, obtenes el valor del profile nombre del perfil que estas accediendo.

Saludos,.
  #12 (permalink)  
Antiguo 01/08/2011, 12:45
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por MarioAraque Ver Mensaje
Para acceder a profile_nombre tenes que hacer

Código PHP:
 echo $variables["element"]["profile_nombre"]; 
Saludos,.
Ok, mi gracias, para recuperar el valor del nombre tengo que poner :

Código PHP:
 echo $variables["element"]["profile_nombre"]["#value"]; 
Pero lo que no tengo claro es desde donde tengo que llamar a este array , es decir creo que debo pasarle simplemente con un return $variables; a la vista estos valores y desde allí acceder a ellos , algo como esto;

Código:
function phptemplate_preprocess_user_profile_category(&$variables) {

return $variables;

 }
¿O se hace esto de otra forma?.

Mil gracias por la ayuda, ya empiezo a ver esto más claro.
__________________
Videotutoriales de Drupal
  #13 (permalink)  
Antiguo 01/08/2011, 23:52
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: layout personalizado para perfil

Proba poner esto en tu tpl.

Código PHP:
 echo $element["profile_nombre"]["#value"]; 
Te imprime lo que vos queres?

EDIT: No hagas un return en el preprocess, como su nombre lo dice, procesa las variables antes de entrar en el tpl ... por lo que vos debes usar esa funcion para declarar lo que vos quieras agregar a la vista, nada mas.

Última edición por MarioAraque; 02/08/2011 a las 00:11
  #14 (permalink)  
Antiguo 03/08/2011, 08:23
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por MarioAraque Ver Mensaje
Proba poner esto en tu tpl.

Código PHP:
 echo $element["profile_nombre"]["#value"]; 
Te imprime lo que vos queres?

EDIT: No hagas un return en el preprocess, como su nombre lo dice, procesa las variables antes de entrar en el tpl ... por lo que vos debes usar esa funcion para declarar lo que vos quieras agregar a la vista, nada mas.
Ok, sin ánimo de ser pesado; una vez que hago algo como esto:
Código PHP:
function phptemplate_preprocess_user_profile_category(&$variables) {
    
     
$profile= array();
  
$profile['profile_nombre']['title'] = $variables["element"]["profile_nombre"]["#title"];
    
$profile['profile_nombre']['value'] = $variables["element"]["profile_nombre"]["#value"];

      return 
$profile;

¿Como lo "recojo" en la vista. He hecho en la vista un var_dump($profile) y me tira NULL.

Gracias de antemano.
__________________
Videotutoriales de Drupal
  #15 (permalink)  
Antiguo 03/08/2011, 11:27
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: layout personalizado para perfil

No tenes que retornar nada, la funcion ya lo hace, en tu caso retorna un arreglo $variables que ha heredado de la supervariable todas sus "caracteristicas"
Ejm:

Código PHP:
Ver original
  1. function phptemplate_preprocess_user_profile_category(&$variables) {
  2.    
  3. $variables['mivariable'] = "<h2>Esta es mi variable</h2>";
  4.    
  5. }

y en tu tpl:

Código PHP:
Ver original
  1. print $mivariable
__________________
Drupal Argentina
  #16 (permalink)  
Antiguo 03/08/2011, 12:43
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: layout personalizado para perfil

Cita:
Iniciado por NUCKLEAR Ver Mensaje
No tenes que retornar nada, la funcion ya lo hace, en tu caso retorna un arreglo $variables que ha heredado de la supervariable todas sus "caracteristicas"
Ejm:

Código PHP:
Ver original
  1. function phptemplate_preprocess_user_profile_category(&$variables) {
  2.    
  3. $variables['mivariable'] = "<h2>Esta es mi variable</h2>";
  4.    
  5. }

y en tu tpl:

Código PHP:
Ver original
  1. print $mivariable
Ok gracias, era muy sencillo , pero por mucho que he buscado en Google no encontré ningún ejemplo.

Ya me devuelve los valores salvo con un inconveniente.

Esta es mi vista
Código:
<?php if ($title) : ?>
  <h3><?php print $title; ?></h3>
<?php endif; ?>
<?php echo $profile_nombre['title']."="; echo $profile_nombre['value']."<br/>";?>
<?php echo $profile_apellidos['title']."="; echo $profile_apellidos['value']."<br/>";?>

Y este el theme.php

Código:
function phptemplate_preprocess_user_profile_category(&$variables) {
	
	
$variables['profile_nombre']['title'] = $variables["element"]["profile_nombre"]["#title"];
 $variables['profile_nombre']['value'] = $variables["element"]["profile_nombre"]["#value"];
$variables['profile_apellidos']['title'] = $variables["element"]["profile_apellidos"]["#title"];
   $variables['profile_apellidos']['value'] = $variables["element"]["profile_apellidos"]["#value"]

}
<?php //var_dump($profile_items); ?>
Lo raro es que cuando visualizo el layout me sale:
Código:
Nombre=Manolo
Apellidos=Perez
Historial
= //estos dos iguales los mete extra no se porque
=
Me mete dos iguales extra y no entiendo porque , ya que solo llamo a dos variables , la que contiene el nombre y el apellido.

Gracias de antemano.
Por favor si sabéis algún sitio donde se profundice en esto os estaría agradecido si me pasáis el link.

Mil gracias
__________________
Videotutoriales de Drupal

Etiquetas: layout, perfil, personalizado, tema
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:45.