[risolto] visibilità blocchi

7 contenuti / 0 new
Ultimo contenuto
[risolto] visibilità blocchi

ho cercato un sistema per far vedere un blocco solo quando il il nodo contiene una o più parole di un determinato vocabolario

e ho trovato il seguente codice

<?php
 
// This snippet returns TRUE if the node we are
  // currently viewing is tagged with a term which belongs
  // to the 'desired_vocab' and we are not in edit mode (arg(2)).
  // put here the vocabulary ID you're interested in
  $desired_vocab = 1;
  if ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
    // Yes, we're viewing a node in view mode.
    $node = node_load(arg(1)); // cached
    // If the term does not exist we're done
    if (is_array($node->taxonomy)) {
      foreach ($node->taxonomy as $term) {
        if ($term->vid == $desired_vocab) {
          return TRUE;
        }
      }
    }
  }
  return FALSE;
?>

Ma purtroppo non funziona e il blocco si vede in tutte le pagine lo stesso....
sarà forse sbagliato il codice?

Ciao,
per prima cosa attento agli and di php che sarebbe meglio usare && (in teoria non dovrebbero esserci problemi, però potresti avere strani comportamente con versioni recenti di php).
Secondariamente, hai:

<?php
 $desired_vocab
= 1;
?>

che identifica l'ID del vocabolario, mentre a te servirebbe l'ID del termine, difatti, più avanti, fai:
<?php
 
foreach ($node->taxonomy as $term) {
        if (
$term->vid == $desired_vocab) {
          return
TRUE;
        }
 }
?>

che è sbagliato, perchè cerchi tutte i termini che stanno dentro al vocabolario con id 1 (a meno che non ti serviva questo, ma dal problema ho capito altro).
Per cui, potresti trasformarlo in:
<?php
$myterm
= //ID del termine;
if ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
   
// Yes, we're viewing a node in view mode.
   
$node = node_load(arg(1)); // cached
    // If the term does not exist we're done
   
if (is_array($node->taxonomy)) {
      foreach (
$node->taxonomy as $term) {
        if (
$term->tid == $myterm) {
          return
TRUE;
        }else{
          return
FALSE;
        }
      }
    }
  }
 
?>

P.S.: anche il return FALSE alla fine potrebbe dare fastidi!
;)

Il blocco ho scelto l'opzione: "mostra se il seguente codice restituisce "true"

il blocco deve essere visibile solo se nel nodo o nei nodi c'è uno o più termini di un determinato vocabolario...

ho trovato quel codice negli snippest di drupal.org...

forse va modificato....

quello che hai fatto tu, non mi appare il blocco quando clicco su uno dei termini del vocabolario.

dragossido wrote:
Il blocco ho scelto l'opzione: "mostra se il seguente codice restituisce "true"

il blocco deve essere visibile solo se nel nodo o nei nodi c'è uno o più termini di un determinato vocabolario...

ho trovato quel codice negli snippest di drupal.org...

forse va modificato....

quello che hai fatto tu, non mi appare il blocco quando clicco su uno dei termini del vocabolario.


Ok,
allora avevo capito io male...
Però da come mi dici adesso vuoi che compaia su una pagine di un termine? Perchè in quel caso non hai accesso a $node dato che sei su un termine...
Dov'è esattamente che deve comparire?

Seconda cosa, i termini sono dei tag, per cui non sai a priori quali possono essere le pagine? Perchè io agirei con gli alias... imposti un un alias particolare con pathauto (ad esempio tags/nome_tag) e poi imposti la visualizzazione solo nelle pagine che iniziano con quell'alia (tags/*).
;)

Questo come vi sembra?

http://www.poakpong.com/node/1234

non ci siamo....

allora io ho un vocabolario....

con tutti i termini dentro ok

io voglio che il blocco sia visibile solo se i termini del nodo fanno parte di quel vocabolario... (anche tutti i termini)

Ecco....
ho trovato la soluzione!!! :):)

<?php
 $desired_vocab
= 10; // put here the vocabulary ID you're interested in
// check taxonomy first
 
if ( arg(0) == 'node' and is_numeric(arg(1)) ) {
   
// Yes, we're viewing a node.
  
$node = node_load(arg(1)); // cached
   
foreach ($node->taxonomy as $term) {
      if (
$term->vid == $desired_vocab) {
        return
TRUE;
      }
    }
  }
  if ( ((
arg(0) == 'taxonomy')
     && (
arg(1) == 'term')
     &&
is_numeric(arg(2))
     && (
$term = taxonomy_get_term(arg(2)))
     && (
$term->vid == $desired_vocab )) ) {
        return
TRUE;
  }
return
FALSE;
?>

può servire a qualcun'altro!