Ho la necessità di nascondere la visualizzazione del nodo completo (relativamente alcuni tipi di contenuto) agli utenti anonimi, in modo che possano vedere solo il teaser.
Ho provato i moduli content access e node access ma non fanno esattamente quello che mi serve. Ovvero lo fanno ma poi fanno un override di funzioni che mi servono.
Ho trovato la seguente soluzione e mi funziona per i registrati:
<?php
global $user;
if (!$user->uid) { ?>
<div>contenuti per gli anonimi</div>
<?php } else { ?>
<div>contenuti per gli utenti registrati</div>
<?php } ?>
Quello che non riesco a fare è appunto mostrare solo il teaser agli anonimi. Se al posto di <div>contenuti per gli anonimi</div>
metto <?php print $teaser; ?>
il risultato è che viene visualizzato un 1 ma non il teaser.
Purtroppo non sono un programmatore e ovviamente non ho capito dove sbaglio...
Cosa devo aggiungere per avere il teaser per gli anonimi?
Ci sei quasi... gli variabili per node.tpl.php sono spiegati in http://drupal.org/node/11816
Dato che PHP (come la maggioranza dei linguaggi) funziona con la falsità (cioè quello che non è falso è vero) io invertirei il test:
<?php
global $user;
if ($user->uid) {
print $content;
}
else {
print '<div>Sei anonimo - no utente, no party</div>';
} ?>
In questo caso, se
$user
non esiste, o esiste ma non ha un campouid
, o esiste e ha un campouid
, ma è0
- tutti casi di 'falsità', viene eseguito il codice dentro l'else
. E se non è falso allora viene esiguito il codice dentro l'if
.Comunque,
$teaser
è solo un flag, il valore di$content
è la pagina intera o il teaser a secondo degli casi...Vedi http://drupal.org/node/53464, ma credo che per 'forzare' il teaser sarà necessario usare node_view -
$node
c'è già in node.tpl.php...HTH
John
Più imparo, più dubito.
Grazie per la risposta ma in questo modo gli utenti anonimi vedono comunque il testo :-(
Questo mi funziona in parte, cioè gli anonimi non vedono niente (ma dovrebbero vedere il teaser) e i loggati vedono tutto:
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">
<?php
global $user;
if (!$user->uid) { ?>
<div>Qui gli anonimi vedono questa frase e ci andrebbe il teaser</div>
<?php } else { ?>
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print t('Of !date ', array('!date' => format_date($node->created, 'custom', "d F Y"))); ?></span>
<?php endif; ?>
<div class="nodecontent">
<?php print $content ?>
</div>
<div class="meta clear">
<?php if ($links): ?>
<div class="links">
<?php print $links; ?>
</div>
<?php endif; ?>
<?php if ($page) { ?>
<?php if ($taxonomy): ?>
<div class="terms">
<span>Tags:</span><?php print $terms ?>
</div>
<?php endif;?>
<?php } ?>
</div>
<?php } ?>
</div>
Ci sono riuscito :-)
al posto di
<div>Qui gli anonimi vedono questa frase e ci andrebbe il teaser</div>
basta mettere:<?php if ($page == 0) { ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php print $content ?>
<div class="links">
<?php print $links; ?>
</div>
<?php } ?>
ciao ciao :-)