Salve a tutti.
Vorrei rendere dinamico il title, scegliendo una voce della tassonomia associata al nodo.
Partendo dall'hook_nodeapi, op='presave', provo con il codice:
function nomeModulo_nodeapi(&$node,$op, $a3=NULL, $a4=NULL){
switch ($op) {
case 'prepare':
if($node->type=='nomeModulo'){
if(!$node->nid){
$node->status = 0;
$node->sticky = 0;
$node->promote = 0;
$node->comment = 0;
}
}
break;
case 'presave':
if($node->type=='nomeModulo'){
$terms = taxonomy_node_get_terms($node);
foreach ($terms as $term) {
$term_child = array(
'tid' => $term->tid,
'name' => $term->name
);
}
$sql = "SELECT td.name FROM {term_hierarchy} th LEFT JOIN {term_data} td ON th.parent = td.tid WHERE th.tid=%d";
$term_parent = db_result(db_query($sql,$term_child['tid']));
$node->title = ($term_parent) ? '['.$term_parent.'] '.$term_child['name']: $term_child['name'];
}
break;
default:
break;
}
}
Al momento del submit, la voce scelta di tassonomia viene registrata nella tabella term_node ma non nel campo title della tabella node.
L'edit del nodo presenta il title vuoto o con il valore da me predefinito, e la casella a discesa della tassonomina con la scelta effettuata.
Se premo submit, senza nessun cambiamento, trovo il title aggiornato.
Questo succede sia con tipi di contenuto creati via modulo, sia con quello standard "page" e anche con l'utilizzo del modulo auto_nodetitle con impostate:
- Automatically generate the title and hide the title field
- Pattern for the title: [termpath]
Voi come avete risolto, se vi siete imbattuti in questo problema?
Grazie.
Mi autorispondo.
Ho fatto una ulteriore prova; se modificavo il title con:
$node->title = "test ".time();
Allora ottengo il title aggiornato... Con la stringa inutile, però...
Quindi nel blocco del mio codice ci deve essere una funzione che, faceva saltare la scrittura del title.
Ho aggiunto al blocco switch il controllo dei casi: 'update' e 'insert', confrontando se il title registrato (e nell'oggetto $node) fosse diverso. In caso positivo, richiedo il salvataggio dello stesso nodo.
function nomeModulo_nodeapi(&$node,$op, $a3=NULL, $a4=NULL){
if($node->type == 'nomeModulo'){
$sql = "SELECT td.name
FROM term_node tn
LEFT JOIN term_hierarchy th ON th.tid = tn.tid
LEFT JOIN term_data td ON td.tid = th.parent
WHERE tn.nid=%d";
$parent = db_result(db_query($sql,$node->nid));
$sql = "SELECT td.name
FROM term_node tn
LEFT JOIN term_hierarchy th ON th.tid = tn.tid
LEFT JOIN term_data td ON td.tid = th.tid
WHERE tn.nid=%d";
$child = db_result(db_query($sql,$node->nid));
$new_title = ($parent) ? '['.$parent.'] '.$child: $child;
}
switch ($op) {
case 'prepare':
if($node->type=='nomeModulo'){
if(!$node->nid){
$node->status = 0;
$node->sticky = 0;
$node->promote = 0;
$node->comment = 0;
}
}
break;
case 'insert':
case 'update':
if($node->type=='nomeModulo'){
if($node->title != $new_title){
node_save($node);
}
}
case 'presave':
if($node->type=='nomeModulo'){
$node->title = $new_title;
}
break;
default:
break;
}
}
Ora il title è sincronizzato con la scelta della tassonomia.
Saluti.