Ciao,
ho cercato la soluzione sia qui che su drupalorg, ma non ho trovato nulla.
Ho attivato i moduli Email (per inserire l'indirizzo email degli utenti) e Link (per inserire l'URL del sito) i quali funzionano perfettamente.
Vorrei, però, che fossero visibili solo se vengono inseriti dei valori, dato che non sempre gli utenti avranno un indirizzo email o un sito personale.
Ho provato a mettere nel tpl.php questo codice ma non funziona, il campo email non compare, anche se ha un valore:
<?php if($node->field_email[0]['value'] != ''):?>
<div class="field field-type-email field-field-email">
<div class="field-items">
<div class="field-item odd">
<div class="field-label-inline-first">
E-mail:
</div>
<?php print $node->field_email[0]['view'] ?>
</div>
</div>
</div>
<?php endif; ?>
Se elimino le stringhe
<?php if($node->field_email[0]['value'] != ''):?>
<?php endif; ?>
il campo email diventa visibile, ma è visibile sempre, anche quando non ha un valore.
Il codice sopra funziona con tutti i tipi di campi text, image, ecc, ma non con i campi email e link. Qualcuno mi sa dire come fare?
Grazie mille !
hai controllato con Devel (o con print_r($node)) come è fatto l'oggetto $node e se ha l'elemento 'value'?
Ciao Pinolo e grazie del suggerimento.
Ho controllato con print_r e non mi è comparso alcun elemento 'value'.
Il codice che mi ha restituito è:
stdClass Object ( [nid] => 114 [type] => negozio [language] => it [uid] => 1 [status] => 1 [created] => 1256130086 [changed] => 1257849183 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 114 [revision_uid] => 1 [title] => Fornaio [body] =>
Quindi? Che fare?
Dovrebbe esserci anche qualcos'altro dopo il body. Da qualche parte dovrebbe esserci $node->field_email[0]
Ho guardato meglio e... c'è un sacco di roba ! Facendo "print_r" compare anche il campo email con l'indirizzo email cliccabile. Ma se tolgo "print_r" il campo email scompare :-(
Ad ogni modo, quello che vedo dopo [body] => è:
[field_email] => Array
(
[0] => Array
(
[email] => [email protected]
[safe] => [email protected]
[view] => [email protected]
)
)
poi, per quanto riguarda il campo email, c'è anche:
[field_email] => Array
(
[#type_name] => negozio
[#context] => full
[#field_name] => field_email
[#post_render] => Array
(
[0] => content_field_wrapper_post_render
)
[#weight] => 1
[field] => Array
(
[#description] =>
[items] => Array
(
[0] => Array
(
[#formatter] => default
[#node] => stdClass Object
*RECURSION*
[#type_name] => negozio
[#field_name] => field_email
[#weight] => 0
[#theme] => email_formatter_default
[#item] => Array
(
[email] => [email protected]
[safe] => [email protected]
[#delta] => 0
)
[#title] =>
[#description] =>
[#theme_used] => 1
[#printed] => 1
[#type] =>
[#value] =>
[#prefix] =>
[#suffix] =>
[#children] => [email protected]
)
[#title] =>
[#description] =>
[#children] => [email protected]
[#printed] => 1
)
[#single] => 1
[#attributes] => Array
(
)
[#required] =>
[#parents] => Array
(
)
[#tree] =>
[#context] => full
[#page] => 1
[#field_name] => field_email
[#title] => E-mail
[#access] => 1
[#label_display] => above
[#teaser] =>
[#node] => stdClass Object
*RECURSION*
[#type] => content_field
[#children] => [email protected]
[#printed] => 1
)
[#title] =>
[#description] =>
[#children] =>
E-mail:
[email protected]
[#printed] => 1
)
Apparentemente sembra tutto a posto. Sembra simile al codice degli altri campi che vengono visualizzati. Ribadisco quanto ho detto nel primo post, e cioè che il problema esiste solo con i campi field-type email e field-type-link e solo se abbinati a "php if". È una mia supposizione, ma è l'unica cosa diversa che vedo tra questi campi e gli altri campi CCK.
Non esiste l'elemento $node->field_email[0]['value'], per questo il tuo IF non restituisce nulla. Il controllo fallo su $node->field_email[0]['email']
Grazie Pinolo. Hai ragione.
In effetti al posto di "value" va messo "view", cioè il codice
<?php if($node->field_email[0]['value'] != ''):?>
diventa
<?php if($node->field_email[0]['view'] != ''):?>
A questo punto funziona tutto.