usare funzioni esterne nella visualizzazione blocchi in base a codice php,

6 contenuti / 0 new
Ultimo contenuto
usare funzioni esterne nella visualizzazione blocchi in base a codice php,

salve,

mi capita di dover impostare del codice php relativamente complesso e spesso ripetitivo, a parte qualche parametro, come condizione per la visualizzazione di alcuni blocchi.

tutto bene, funziona. ma mi farebbe molto comodo scrivermi da qualche parte una funzione, e richiamare direttamente quella nell'apposita finestrella del codice php. ridurrei le possibilità di errore, modificherei il codice con più facilità e potrei soprattutto parametrizzare la chiamata.

ho provato ad usare funzioni messe nel template.php del tema o in altri posti sicuramente raggiungibili, ma non ha funzionato.

qualcuno sa se è possibile richiamare codice esterno e come?

Potresti postare il codice che dici funzionante nei blocchi? Sai creare una funzione passandogli dei parametri dovrebbe essere semplice, l'importante è che ti ritorna il valore. Se mi mandi il codice lo testo in locale poi ti do la dritta se posso.

Ciao

intanto grazie della disponibilità.

pare che in realtà ci stia riuscendo. probabilmente modificavo il codice sul server di test e ricaricavo la pagina in produzione... :-)

ad esempio, per caricare un certo blocco solo se il contenuto corrente è del tipo 'progetto' e gli ho assegnato il termine 'Francia' dalla tassonomia (vocabolario) 'Nazioni', nella condizione di visibilità php ora inserisco semplicemente:

<?php
return controlla_tiponodo_tassonomia(arg(1), 'progetto', 'Nazioni', 'Francia');
?>

il che fa una chiamata alla funzione controlla_tiponodo_tassonomia() che ho messo nel file template.php del mio tema:

function controlla_tiponodo_tassonomia($nid, $node_type, $txn_name, $term_name) {
$sql = "
SELECT COUNT(node.nid)
FROM {vocabulary} AS voc
JOIN {term_data} AS term ON term.vid = voc.vid
JOIN {term_node} AS tn ON tn.tid = term.tid
JOIN {node} AS node ON node.nid = tn.nid
WHERE node.nid = '%1\$d'
AND node.type = '%2\$s'
AND voc.name = '%3\$s'
AND term.name = '%4\$s'
";
$sql = sprintf($sql, $nid, $node_type, $txn_name, $term_name);
$result = db_query($sql);
$q = db_result($result);
if($q > 0) {
   return true;
} else {
   return false;
}
}

parlando di php in generale, noto che non ho visto in nessun esempio di sprintf che ho visto in giro il carattere $ (non obbligatorio ma utile per specificare esplicitamente l'ordine dei parametri) escappato, il che mi preoccupa un po'. senza escape la stringa si "romperebbe".

parlando di drupal in particolare ho come la sensazione che la pagina di documentazione di db_query (almeno per la versione 6) sia incompleta e lasciata in sospeso:

http://api.drupal.org/api/drupal/includes--database.mysql-common.inc/fun...

si fa riferimento alla sintassi di printf() rimandando all'apposito link su php.net che dice "per la sintassi vedi sprintf()...", insomma si ha la sensazione di essere una pallina da flipper. succedesse in qualche ufficio pubblico uno si sentirebbe giustamente maltrattato: non sarebbe male che alla documentazione di un aspetto tanto importante di un progetto opensource come l'interazione diretta col db si dedicasse un po' più di cura.

sono anche perplesso dal fatto che la pagina non riporti esempi e che per avere informazioni "vere" mi sia dovuto basare sul messaggio di un tizio qualsiasi (cui, per carità, sono assai riconoscente - ma perché ci ha dovuto pensare lui e non un team di sviluppo?):

http://drupal.org/node/395700

in certe situazioni aziendali mi troverei in grande difficoltà a giustificare al management la scelta di un sw documentato in questo modo rispetto ad altri se ci si dovesse basare su parametri oggettivi e non sul sentito dire/passaparola.

un metodo che ti consiglio è di creare un file .php in cui metti tutto quanto funzione e richiamo e poi ci fai un include

ealmuno wrote:
un metodo che ti consiglio è di creare un file .php in cui metti tutto quanto funzione e richiamo e poi ci fai un include

grazie.

credo di aver capito cosa intendi, ma potresti per favore elaborare comunque questo suggerimento in modo più dettagliato?

dove includo, ad esempio? nella casella della condizione di visibilità?

alcune osservazioni che forse possono tornare utili.

la funzione esterna da richiamare nel box delle condizioni di visibilità del blocco deve dare in output solo ed esclusivamente un valore true o false, niente altro.

ad esempio, una cosa del genere:

<?php
 
...
function
pensavi_fosse_false_eh() {
  echo
"test";
  return
false;
}
...
?>

sarà comunque letta dalla condizione di visibilità come true e provocherà la visualizzazione del blocco.

in ogni caso non c'è modo di avere alcunché stampato a schermo dalla funzione di controllo visibilità.