[Risolto] [D6] Title dinamico con voce Tassonomia

2 contenuti / 0 new
Ultimo contenuto
[Risolto] [D6] Title dinamico con voce Tassonomia

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.