2010-06-26 13 views
3

J'essaye de stocker par programme des noeuds de type CCK en utilisant drupal_execute(). Les nœuds vides sont créés. aucun des champs CCK n'est sauvegardé. De toute évidence la première ligne drupal_process_form() est responsable:

$form_state['values'] = array(); 

Alors ma question est pourquoi s'efface « valeurs », et plus important encore, comment puis-je enregistrer les champs CCK en utilisant drupal_execute()?

J'ai essayé save_node() aussi qui a bien fonctionné; cependant je préférerais le premier puisqu'il invoque la validation.

Répondre

3

Le tableau de valeurs est effacé dans drupal_process_form() car il sera rempli à partir du $_POST global ultérieurement. Si vous jetez un oeil à drupal_execute(), vous verrez qu'il fait le contraire, c'est-à-dire, peupler le $_POST global de la passé en $form_state['values'].

Je pense que ceci est fait pour permettre au traitement de formulaire de fonctionner de la même manière que pour un formulaire 'normal', donc drupal_execute place principalement la scène de sorte que tout ressemble plus ou moins à un 'normal' Soumettre plus tard. Cela signifie que votre approche est fondamentalement correcte et devrait fonctionner - si ce n'est pas le cas, il doit se passer quelque chose d'autre. Je ne peux pas deviner ce que cela pourrait être, mais vous pouvez vérifier this thread pour des discussions sur votre approche, et le sujet de champ CCK spécifiquement (c'est un fil mixte discutant l'approche node_save() aussi, mais la partie liée pourrait correspondre à votre situation spécifique) .

+0

Merci pour l'explication. Je pense que j'ai rencontré ce fil auparavant; ça a été utile. Je fais face à plus de 200 champs dans un seul type (c'est juste un prototype, il devrait être normalisé par la suite) pour le moment, et il est plutôt difficile de localiser le coupable. J'ai remarqué que form_get_errors() émet des messages concernant uniquement les champs standard tels que title; Y at-il peut-être une manière différente d'extraire les erreurs de validation? – Stan

+0

@Stan: Il n'y a pas de façon différente que je connais. Êtes-vous sûr que ce n'est pas juste un problème de synchronisation (poids), c'est-à-dire que votre appel à 'form_get_errors()' se produit avant que les fonctions de validation de CCK ne soient appelées? –

+0

Bien 'form_get_errors()' est appelé juste après 'drupal_execute()'. Je vais utiliser 'node_save()' pour le moment ou jusqu'à ce que le nombre de champs devienne plus gérable. – Stan