Index: flexinode.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/flexinode/flexinode.module,v retrieving revision 1.82 diff -u -r1.82 flexinode.module --- flexinode.module 23 Jan 2007 20:54:01 -0000 1.82 +++ flexinode.module 28 Jan 2007 00:52:53 -0000 @@ -145,23 +145,28 @@ */ function flexinode_load($node) { $ctype = flexinode_load_content_type(substr($node->type, 10)); - - // build the query - $fields_to_select = array(); - $table_joins = array(); - + $flexinode_arr_data = array(); + $flexinode_fields_data = db_query('SELECT * FROM {flexinode_data} fd WHERE fd.nid = %d', $node->nid); + $flexinode_arr = array(); + while ($field_data = db_fetch_object($flexinode_fields_data)) { + $fieldname = 'flexinode_'. $field_data->field_id; + $flexinode_arr_data[$fieldname] = $field_data; + } foreach ($ctype->fields as $field) { $fieldname = 'flexinode_'. $field->field_id; - - $fields_to_select[] = flexinode_invoke('db_select', $field); - $table_joins[] = 'LEFT JOIN {flexinode_data} '. $fieldname .' ON n.nid = '. $fieldname .'.nid AND '. $fieldname .'.field_id = ' . $field->field_id; + //example: flexinode_1.textual_data as flexinode_1, flexinode_1.numeric_data as flexinode_1_format + $fields_to_select = strtolower(flexinode_invoke('db_select', $field, $field)); + // [[flexinode_1.textual_data as flexinode_1][flexinode_1.numeric_data as flexinode_1_format]] + $field_arr1 = explode(',', $fields_to_select); + foreach ($field_arr1 as $field_tmp) { + //[[flexinode_1.textual_data][flexinode_1]] + $field_arr2 = explode(' as ', trim($field_tmp)); + //[[flexinode_1][textual_data]] + $field_arr3 = explode('.', trim($field_arr2[0])); + $flexinode_arr[trim($field_arr2[1])] = $flexinode_arr_data[trim($field_arr3[0])]->{trim($field_arr3[1])}; + } } - - if (count($fields_to_select) > 0) { - // make the query - $flexinode = db_fetch_object(db_query('SELECT '. implode(', ', $fields_to_select) .' FROM {node} n '. implode(' ', $table_joins) .' WHERE n.nid = %d', $node->nid)); - - // unserialize necessary fields + $flexinode = (object)$flexinode_arr; foreach ($ctype->fields as $field) { $fieldname = 'flexinode_'. $field->field_id; $field_data = flexinode_invoke('load', $field, $flexinode); @@ -169,10 +174,7 @@ $flexinode->$fieldname = $field_data; } } - } - $flexinode->ctype_id = $ctype->ctype_id; - return $flexinode; }