Come dividere un campo di CCK in un campo a valori multipli

Libera traduzione da http://drupal.org/node/229893

Istalla il modulo devel per essere in grado di eseguire facilmente codice PHP e adata il codice che segue alle tue necessità:

divisione

Questo esempio divide i campi di CCK che contengono una lista concatenata di valori multipli (in questo caso gli autori nel campo di CCK ‘authorlist’) al loro giusto posto all’interno di un campo a valori multipli (in questo caso ‘authors’):

– seleziona i nodi da cambiare
– scorre i nodi (while)
– pulisce il campo ‘authorlist’
– divide il campo ‘authorlist’ con un punto e virgola ;
– scorre i valori separati (foreach)
– inserisce i valori in un campo a valori multipli ‘authors’
– esegue i cambiamenti

<?php
$results
= db_query(“SELECT * FROM {node} WHERE type=’%s’ “, “pub”);
// AND nid BETWEEN 0 and 100
while ($my_node = db_fetch_object($results)) {
$node = node_load($my_node->nid);
_content_widget_invoke(‘prepare form values’, $node);
$my_field = trim($node->field_authorlist[0][‘value’],“; “);

$values = array();
$my_authors = explode(“;”, $my_field);
$my_delta = 0;

foreach ($my_authors as $my_author) {
$values[‘field_authors’][$my_delta][‘value’] = trim($my_author);
$my_delta++;
}
drupal_execute(‘pub_node_form’, $values, $node);
}
?>

Esegui 2 o tre volte (tante quanti sono i valori separati /ne dovresti avere 3) dato che il form a valori multipli consente di inserire 3 nuovi valori per volta, cioè ad ogni preview (dato che qui stiamo usando drupal_execute).

unione

L’altro modo consiste nell’unire/concatenare un campo a valori multipli in un campo singolo:

<?php
$results
= db_query(“SELECT * FROM {node} WHERE type=’%s'”, “pub”);
while (
$mynode = db_fetch_object($results)) {
$node = node_load($mynode->nid);
_content_widget_invoke(‘prepare form values’, $node);
$my_authors = array();
foreach (
$node->field_authors as $my_author) {
$my_authors[] = $my_author[‘value’];
}
$values[‘field_authorsconcat’][0][‘value’] = implode(“; “, $my_authors);
drupal_execute(‘pub_node_form’, $values, $node);
}
?>

Annunci