[risolto] Modulo Profile: mostrare il valore di un campo

7 contenuti / 0 new
Ultimo contenuto
[risolto] Modulo Profile: mostrare il valore di un campo

Ho installato il modulo Profile e ho inserito qualche campo personalizzato.
Il valore di uno di questi campi vorrei mostrarlo nell'H2 del blocco dell'user al posto del valore di "username". Quindi, una volta loggato, anzichè comparire il nome dell'utente dovrebbe comparire quest'altra cosa.
Ho cercato su drupal.org info sulla la personalizzazione di Profile ma non spiega come richiamare i dati in giro per il sito...

La soluzione più semplice che mi viene in mente è mettere un if in block.tpl.php, facendo un controllo sul modulo e sul delta del blocco. Se risulta che il blocco è quello "Navigazione", fai scrivere, invece del titolo, il campo che vai a pescare dall'oggetto $user.

Non ho capito bene
- come intercettare il "delta"
- come "pescare dall'oggetto $user"
:(

Mi puoi dare un altro spunto?

Il mio blocco (sono loggato come admin, quindi user1) è fatto in output questo modo:

<div class="block block-user" id="block-user-1">
  <h2>admin</h2>
  <div class="content">qui i link relativi all'admin</div>>
</div>

Il codice che lo produce è in block.tpl.php nella dir del mio tema personalizzato:

<div class="<?php print "block block-$block->module" ?>" id="<?php print "block-$block->module-$block->delta"; ?>">
<?php
 
//added if contition to eliminate empty blocks header tags
 
if ($block->subject) { ?>
<h2 class="block-title"><?php print $block->subject ?></h2> <?php }?>
  <div class="content"><?php print $block->content ?></div>
</div>

Il nome del modulo che ti interessa è "user" e lo trovi nella proprietà $block->module.
Il delta del blocco che ti interessa è 1 e lo trovi nella proprietà $block->delta.
In block.tpl.php fai un if per controllare la corrispondenza di questi valori (con un AND).
Poi richiami l'oggetto $user con
global $user;
A questo punto, fai un
print_r($user)
(mettici intorno i marcatori per i commenti HTML così non disfi il layout) poi vai a vedere nel codice con quale proprietà dell'oggetto si richiama il campo che ti interessa e usi quella proprietà all'interno dell'IF, in sostituzione del titolo canonico del blocco.

Per esempio:

<div class="<?php print "block block-$block->module" ?>" id="<?php print "block-$block->module-$block->delta"; ?>">
<?php
global $user;
//added if contition to eliminate empty blocks header tags
if ($block->subject && $block->module == 'user' && $block->delta == 1) { ?>
<h2 class="block-title"><?php print $user->profile_campo ?></h2> <?php }?>
elseif ($block->subject) { ?><h2 class="block-title"><?php print $block->subject ?></h2> <?php }?>
  <div class="content"><?php print $block->content ?></div>
</div>

Pinolo wrote:

A questo punto, fai un
print_r($user)

Ho capito quello che dici, però il valore che cerco non sta nella tabella "users" del db di drupal e quel print_r non me lo mostra.

Avendo attivato il modulo Profile, drupal ha creato due nuove tabelle "profile_fields" e "profile_values" ed lì dentro che sta il valore che voglio reperire.
Ad esempio ho creato la categoria "Personal Info" con all'interno alcuni campi ... ad esempio "Cognome" (è il valore di questo che vorrei visualizzare)

Su drupal. org (http://drupal.org/handbook/modules/profile#comment-877888) viene suggerito di fare così:

global $user;
$profile =  profile_load_profile($user);
$custom1 = $user->profile_custom1

Ma la mia inesperienza non mi porta a capire bene quali modifiche giuste apportare.

Hai ragione, al mio consiglio mancava un passaggio:

global $user;
profile_load_profile($user);
print_r($user);

Pinolo wrote:
Hai ragione, al mio consiglio mancava un passaggio:
global $user;
profile_load_profile($user);
print_r($user);

Grandeeee!!!
:)