Posted by Ciprian Oancia on February 20, 2011 at 2:14pm
16 followers
Jump to:
| Project: | Node Connect |
| Version: | 7.x-1.x-dev |
| Component: | Code |
| Category: | bug report |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | active |
Issue Summary
Hi everyone
Wow this is an amazing module!
would be awsome to have it integrated with the field_collection module :)
Comments
#1
@Ciprian Oancia
Do you know what that would entail?
#2
@e2thex no, but it woulve fit very well for an reseller website im building.
#3
Hi and thanks for the great module!
I came up into problems integrating this module with field_collection, I will try to give an short example:
Let's say we have a "field collection" field called "field_location" which consists of two normal fields "field_location_name" (a text field) and "field_location_hotels" (a multiple-value node reference field).
Now if we use nodeconnect to add hotels to the "field_location_hotels" field, two problems arise:
In "nodeconnect_add_edit_button_submit", the line $language = $form[$field]['#language']; (line 70)
gives us a warning, because field_location_hotels is not stored directly in the $form array (as $form['field_location_hotels'] ), but is instead stored in $form['field_location']['und'][0]['field_location_hotels']
The second problem that arises from this situation is in "nodeconnect_return_node_form_alter", line 160 which is the same problem as above with the language, and finally line 166, nodeconnect adds the newly created nid into $form_state['field_location_hotels']['und'][0]['nid'] but as before the actual field value is expected at $form_state['field_location']['und'][0]['field_location_hotels']['und'][0]['nid']
Any ideas how field_collection fields should be dealt with? The only clue I guess would help is checking for $form[$field]['und'][0]['#entity_type'] == 'field_collection_item' or scanning the $form tree to find $field
#4
Ok so I think the problem here is that we should be not looking at $form[$field] but building this from the #parents tag.
That way we find the correct field to update.
@christopher_skauss do you think you could check and see if that is possible? I do not think i will have time to deep dive until late next week
#5
I've managed to bypass this with an ugly recursive array scan, but I'll try to squeeze sometime to look into #parents, sounds reasonable unless field collection did any dirty tricks with that too
#6
subscribe
#7
subscribe
#8
@e2thex How much time investment are we taking to get this integration working?
#9
See http://drupal.org/node/1217150 for a similar issue that was solved for noderefcreate.
#10
Not sure if it's this simple, but in the dev release this is all the code that references "$form_state"
nodeconnect.module
37 /*38 * implements of hook_field_attache_form()
39 */
40 function nodeconnect_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {
41 foreach (_nodeconnect_get_ref_fields() as $field_name => $field) {
42 if (isset($form[$field_name])) {
43 nodeconnect_include_form();
44 _nodeconnect_field_attach_form($entity_type, $entity, $form, $form_state, $langcode, $field_name, $field);
45 }
46 }
47 }
66 function nodeconnect_form_node_form_alter(&$form, &$form_state, $form_id) {67 $child = isset($_REQUEST['child']);
68
69 // We can get the cid two different ways
70 // first we try the $_REQUEST param. if we do not getting it from there we try
71 // the arg(3) if we are on a add form. Also if we are on an add form we know that
72 // we are a child page.
73 if (
74 (isset($_REQUEST['build_cache_id']) && ($cid = $_REQUEST['build_cache_id']) ) ||
75 ((arg(1) == 'add') && ($cid = arg(3)) && $child = TRUE)
76 ) {
77 $cache = cache_get($cid);
78 nodeconnect_include_form();
79 if ($child) {
80 $form_state['#nodeconnect_child_form'] = $cache;
87 }
82 if (isset($_REQUEST['return'])) {
83 unset($_REQUEST['build_cache_id']);
84 nodeconnect_return_node_form_alter($form, $form_state, $form_id, $cid, $cache);
85 }
86 }
87 // If this for is a child form lets add alter for that purpose
88 // Note that we are doing this here becuase when we retrun to a form it gets rebuild
89 // so this will get cuaght in the rebuild
90 if (isset($form_state['#nodeconnect_child_form'])) {
91 $cache = $form_state['#nodeconnect_child_form'];
92 module_load_include('inc', 'nodeconnect', 'nodeconnect.form');
93 nodeconnect_child_node_form_alter($form, $form_state, $form_id, $cache->cid, $cache);
94 }
95 }
#11
deleted