Nascondere nodo completo a utenti anonimi

4 contenuti / 0 new
Ultimo contenuto
Nascondere nodo completo a utenti anonimi

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 campo uid, o esiste e ha un campo uid, 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 :-)