[RISOLTO]intercettare node/add/content-type

3 contenuti / 0 new
Ultimo contenuto
[RISOLTO]intercettare node/add/content-type

Ciao a tutti

mentre riesco ad intercettare , nel template (function phptemplate_preprocess_page) la pagina edit di un content-type

<?php
 
if ($vars['node']->type == "contatti" && arg(2) == 'edit') {
   
$vars['template_files'][] = 'page-contatti-edit';
  }
?>

Non riesco a fare la stessa cosa con
www.miosito.it/node/add/content-type[/codefilter_code]

Ho provato con :

<?php
 
if ($vars['node']->type == "contatti" && arg(1) == 'add') {
   
$vars['template_files'][] = 'page-contatti-add';
  }
?>

con

<?php
 
if (arg(0) == 'node' && arg(1) == 'add' && $vars['node']->type == "contatti") {
   
$vars['template_files'][] = 'page-contatti-add';
  }
 
?>

e anche con questo trovato in rete

<?php
 
if (isset($vars['node/add'])) {
  if (
$vars['node']->type == "contatti"){
   
$vars['template_files'][] = 'page-contatti-add';
  }
  }
?>

ma senza nessun risultato.

Qualcuno sa come mai ?

Domanda preventiva: Hai pulito la cache? :)

Nel caso la risposta sia "sì e continua a non funzionare":

shotgun debugging mode ON
Puoi provare con un po' di "cattiveria" a stampare i valori contenuti in $vars e ritornati da arg() in questo modo:

// Prima dell'if per assicurarsi che i valori tornati siano quelli voluti
for ($i=0;$i<5;++$i) {
  var_dump(arg($i));
}

// come ultima istruzione dell'if per verificare sia di esserci dentro che per analizzare il contenuto della variabile.
var_dump($vars);
exit;

shotgun debugging mode OFF

Non è la soluzione più pulita ma ti può aiutare a renderti conto di cosa capita. Controlla inoltre che $vars nella dichiarazione della funzione di preprocess sia passata per riferiferimento e non per valore, altrimenti una volta uscito dalla funzione le tue modifiche verranno perse.

L'alternativa allo shotgun debugging è l' utilizzo di un debugger vero e proprio, che però è un po' più complesso da installare ed utilizzare, per cui non so se è il caso, mi auguro che quanto detto sia sufficiente ;)

Ciao omissis
grazie per l'intervento.
Yes , cache più che pulita e continuaVA a non funzionare.

Ho testato il tuo shotgun debug...carino :-)

IL risultato, che conoscerai ovviamente, è stato questo :
string(4) "node" string(3) "add" string(8) "contatti" NULL NULL

Riflettendo su queste string mi è venuto un sospetto....non è che il maledetto, in questa fase, non si considera ancora "dentro" un content-type, ma solo in fase di creazione di un semplice "node", che putacaso, come arg() finale ha semplicemente una stringa ?

Giusto per provare ho modificato in :

<?php
 
if (arg(0) == 'node'  && arg(1) == 'add'  && arg(2) == 'contatti') {
   
$vars['template_files'][] = 'page-contatti-add';
  }
 
?>

E adesso come per magia funziona.....grrrrrr.
E' il content-type che evidentemente , in fase di aggiunta di un node, non viene riconosciuto come tale. Per lui al momento è solo un nodo qualsiasi.

Grazie mille!!