--- menutrails.module.orig 2010-01-09 01:42:54.000000000 +0800 +++ menutrails.module 2010-02-02 20:59:02.376382000 +0800 @@ -158,6 +158,21 @@ function menutrails_node_location($node) } } } + // Node reference support. + if (module_exists('nodereference') && empty($href)) { + $node_ref_trails = variable_get('menutrails_node_references', array()); + foreach ($node_ref_trails as $key => $value) { + if (isset($node->$key)) { + $node_reference = $node->$key; + $href = 'node/'. $node_reference[0]['nid']; + // check if this path exists in menu_links + if (db_result(db_query("SELECT count(mlid) FROM {menu_links} WHERE link_path = '%s'", $href)) == 0) { + // it doesn't exist, we need to keep going, call self recursively + return menutrails_node_location( node_load( $node_reference[0]['nid'] ) ); + } + } + } + } if (!empty($href)) { $item['href'] = $href; return $item; @@ -249,6 +264,14 @@ function menutrails_menutrails_settings( $node_trails = variable_get('menutrails_node_types', array()); $vocabs = module_exists('taxonomy') ? taxonomy_get_vocabularies() : array(); $term_trails = variable_get('menutrails_terms', array()); + $fields = module_exists('nodereference') ? content_fields() : array(); + $node_ref_trails = variable_get('menutrails_node_references', array()); + $node_references = array(); + foreach ($fields as $key => $value) { + if ($value['type'] == 'nodereference') { + $node_references[$key] = $value; + } + } $form['menutrails_node_types'] = array( '#tree' => TRUE, '#type' => 'fieldset', @@ -330,6 +353,23 @@ function menutrails_menutrails_settings( '#description' => t('If a specific group node has an assigned menu item, use this as the trail for nodes which have that group as an audience. If present, this will override all other group settings.'), ); } + // Node references support. + if (module_exists('nodereference')) { + $form['menutrails_node_references'] = array( + '#tree' => TRUE, + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#title' => t('Node types'), + '#description' => t('Settings for nodes with node reference fields: these override node, taxonomy and organic groups settings'), + ); + foreach ($node_references as $key => $value) { + $form['menutrails_node_references'][$key] = array('#type' => 'checkbox', + '#title' => t('Use %field_name', array('%field_name' => $value['field_name'])), + '#default_value' => isset($node_ref_trails[$key]) ? $node_ref_trails[$key] : NULL, + ); + } + } return $form; }