Problem
There are many modules that provide half solutions to the problem of referencing nodes in a hierarchical nature. We spoke with webchick about this tonight as a matter of fact. The probnlem rather simply is that while you can use nodereference field to relate nodes (and types) hierarchically ("My car" references "CVR" which references "Honda") this prevents you form storing that information with the actual node for use in views (sorting, filtering, etc) because only 1 portion (the first parent) of the relationship is stored at any level.
Possible Solutions
2 solutions seem apparent:
- design a good way to pull in these extended relationships to views for use
- store every level of the relationship with the children and use views as usual.
The second solution is already possible but has 2 drawbacks:
+ you can select nonsensical values because the fields arent "linked" to enforce referential integrity (e.g. Honda F-150 Truck is an invalid but possible selection with 2 node reference selection fields.
+ you have to sort through all thos invalid entries to find th eone you know s valid even though you created all the information to "know" this as you created the hierarchy above via node reference.
Proposed development
The open to suggestion but proposed solution for this problem would provide a cck field that allows you to spell out the relationships between content types (Manufacturer > Model > My Car) and the fields by which they relate to each other (nodereference). It would then provide the node creating and editing user with multiple select fields that are auto populated and updated (via AJAX) as the user selects down the hierarchy.
Usage Scenario
- Admin A creates a manufacturer node "honda"
- Admin A creates a model "CRV" and assigns the nodereference field (restricted by type manufacturer) on it to point to Honda as the manufacturer
- Admin A creates the car content type and adds the field that this proposed module would provide. this felds setting area asks him to select the content types and the fields that describe how they relate (A > B > C ... N).
- User wants to create a new "car" in the system to show pictures or sell it or something (imagine a music track if youd rather, or a city selection widget that uses sparql queries for the info).
- User A navigates to node/add/car and selects the manufacturer "Honda". The widget then assembles a list of all of the nodes that reference Honda using the node reference field that the administrator indicated. It populates those values into the next selection widget and repeats the process as necessary to drill down to the desired level.
- User A can change any higher level selection and have the widget respond accordingly by removing the children select inputs and populating the correct new child select.
- User A submits the form and EACH level of the selection widget is stored with the node so it can be queried and used in views for sorting, argument and filtering along with dozens of other uses.
Related development to unify and beg borrow and steal from:
- http://drupal.org/project/activeselect
- http://drupal.org/project/dependantDropdown
- http://drupal.org/project/dependent
- http://drupal.org/project/nr_autocomplete
- http://drupal.org/project/hierarchical_select
- http://drupal.org/project/multiselect (less so really)
With all of this seemingly related work i think we can carve out a strong module that satisfies the use cases at hand in an organized and robust fashion so we dotn have so much duplication and can integrate their functionality little better at least. If there is any interest im willing to flesh this out a further, contact module developers in question, and mentor a student.

Comments
I like the idea of
I like the idea of consolidating this functionality in one place. You'll need to take a hard look at Views 2, though, because it now has relationship handling so you can automatically bring back any field of a related node, and that may make this easier to accomplish (or at least will change the way it needs to be accomplished). That is a brand new feature that is just getting added in.
Also it would be good to work with the developers of the current modules to try to get some consensus on where to take it, and that might be the hard part.
But multi-level selects are frequently requested and we have a lot of duplication, so doing something about this is a good thought.
Did your proposal get anywhere in the last 2 years?
I'm working on a project with relationships similar to what you describe, but also even more complex (which I can't hope to solve if the issue you bring up hasn't been addressed yet). For example, to extend your car model...
There is this structure: Manufacturer > Model > My Car
And the My Car node has relationships to other content types: Residents > CarOwners > My Car; and note that a CarOwner node may have more than one My Car node associated with it.
So a My Car node is a child of the Model node AND of the CarOwners node, so views should be able to be created to answer questions like: Which CarOwners own CRVs? Which CarOwners own Hondas? Which car Models do Residents in Poughkeepsie have?
So when creating a Resident node the user specifies the Resident is a CarOwner, so the CarOwner node is created (with several fields specific to car owners only). From the CarOwner node a My Car node is created: user selects Manufacturer, then Model (from those that belong to the Mftr).
I don't even know if Drupal can handle blended families like this where the Child has Parents that are unrelated otherwise.
It's difficult finding discussions on this specific issue because the terms are prevalent on so many topics that only address simple 1-Parent-to-1-child relationship.
subscramble
subscramble