form_alter, node_presave...field-X gelijk stellen aan de key-value van field-Y

Mmm...wat zie ik over het hoofd of wat doe ik fout? Ik probeer een field te updaten met de waarde van een ander field. Reeds verscheidene dingen geprobeerd maar het lukt mij niet volledig.
Code hieronder werkt goed (is puur informatief)
- een form_FORM_ID_alter met
$form['TestOptions'] = array(
'#type' => 'radios',
'#options' => array(
t('lijn00'),
t('lijn01'),
t('lijn02'),);
$form['#submit'][] = 'mijnsubmitfunctie';

- een submitfunctie met

dsm($form); //controle
$blabla = ($form['TestOptions']['#value']); //= key-value van de geselcteerde radio-button,vb "2" indien "lijn02" geselecteerd

drupal_set_message(t('key = '.$blabla)); //controle

Dit gaat dus allemaal perfect, maar een ander cck-text-field updaten met de variable $blabla (= key-value van de geselcteerdee radio-button, vb 0, 1 of 2) lukt maar niet. Geprobeerd met node_presave, node_update,...

$node->fieldY[['#value'] = $node->fieldX[$node->language][0]['value'];

of moet ik dit nog op een andere mannier doen? Waar ergens moet ik die $blabla gelijkzetten aan field-Y (in welke drupal functie).
Indien je een bestaand module weet die dit een beetje omvat ben ik al heel tevreden :-) Merci !

Drupalversie: 
7.x
Auteur: 
redjane
afbeelding van JDBI
Door JDBI op 23 september, 2011 - 14:26

Voorbeeld van een functie die dit doet met hook_node_presave:


function f2m_node_presave($node){
if ($node->type=="enquete") {
$result=f2m_calculate($node);

$t_a = 15;
$t_b = 15;
$t_c = 15;
$t_d = 15;
$t_e = 15;
$t_tot = $t_a + $t_b + $t_c + $t_d + $t_e;
$total = $result['A'] + $result['B'] + $result['C'] + $result['D'] + $result['E'];

$langcode=$node->language;

$node->field_result_a[$langcode][0]['value']=round($result['A']*100/$t_a);
$node->field_result_b[$langcode][0]['value']=round($result['B']*100/$t_b);
$node->field_result_c[$langcode][0]['value']=round($result['C']*100/$t_c);
$node->field_result_d[$langcode][0]['value']=round($result['D']*100/$t_d);
$node->field_result_e[$langcode][0]['value']=round($result['E']*100/$t_e);
$node->field_result_total[$langcode][0]['value']=round($total*100/$t_tot);

}// end if enquete
}

Door redjane op 23 september, 2011 - 14:51

Bedankt !
Hmmm... node_presave... Sebiet eens mijn code goed checken ! Tof :-) drupal wordt alsmaar leuker en leuker hoe meer je je erin verdiept.

afbeelding van JDBI
Door JDBI op 23 september, 2011 - 15:33

Dat is voor drupal 7, in Drupal 6 is het hook_nodeapi met $op = presave.

grts,
j.

afbeelding van be-web
Door be-web op 23 september, 2011 - 15:57

@Janered: als dit een kopie is van je code:

$node->fieldY[['#value'] = $node->fieldX[$node->language][0]['value'];

dan staat er een '[' teveel op positie 14. Is dat misschien de oorzaak?

-----
Met vriendelijke groet,
Hans Kuiters
BE-WEB

Door redjane op 24 september, 2011 - 08:25

@be-web : neen, was geen kopie van de code... maar hé, wel goed opgemerkt :-)

Ondertussen is het opgelost, er zat dus een fout in de node_presave.
Ik kreeg iedere keer een 'Undefined variable'. Hmm, en een hele tijd niet opmerken wat er fout aan was.
Tip voor mezelf : (copy / paste is niet altijd goed) :-)

Bookmark and Share

Drupal is een geregistreerd merk van Dries Buytaert. | Powered by Pantheon.

Drupal.be/Drupal.nl is de website van de Nederlandstalige Drupalgemeenschap.