-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The best way to relate hierarchical structure #4494
Comments
Ok it looks like the better way is simply to do
This type of content editing experience can really use breadcrumbs (#3687) |
You can also use the ContentPickerField. |
What about Tags & Taxonomies? |
Oh I didn't know this. Excellent.
Sector > Program > Project > Albums. It's hard to accommodate this using taxonomies. The relations are direct. |
Ya if it represents an entity aka content type, so |
Wouldn't using |
I don't think there are downsides. The only thing content picker field allows you to do is reuse a piece of content in many parents. For example, I am using the same form in many pages so I reference the form with a content picker. |
There is also a taxonomy picker field I believe. |
OK so we can use:
for relating contents. Do I miss anything else? |
It would be nice to know when choose what, for instance Use |
@dodyg There is also a LocalizationSetContentPicker for multilingual content. Use case: Event that has LocalizationPart. |
I have been greatly interested in this ability for a while now, its important to hammer this out. |
The highlighted part is the content id of the parent, then you can use
to obtain the parent info. or better
For more info, check here (https://orchardcore.readthedocs.io/en/dev/OrchardCore.Modules/OrchardCore.Liquid/#container) |
@dodyg this is specific to Lists. For the content picker(s) the code is a bit different see: |
@dodyg how did you end up implementing this one ? |
I am using ListPart for now but I am not sure whether this will be the final decision. I am still exploring. |
I am looking to do something similar as well. @sebastienros suggested I try with a taxonomy to define the hierarchy and just select the taxonomy term with a field in my types. This keeps all types flat but allows you to define a hierarchical structure of content without having lots of nesting. |
@jptissot that looks like an interesting approach actually. I wonder how it will look like in being able to query them though. If my hierarchy is Sector > Program > Projects, I will need to show "Sector : Social Empowerment"
|
@arkadiuszwojcik I haven't gone far in this. I will keep you updated. |
I believe there is a way to get all ContentItems that are tagged with a Taxonomy term. We would need to investigate and try. My use case was a Knowledge Base. So I had a Knowledge Base Article, which would be tagged with a Category. |
So far, for this type of structure
The problem with this arrangement though, when you are in the child content editor UI, you don't know what the parent is. It's not displayed. So if I am editing a 'Program', I have no idea what Sector it belongs to. |
The problem of using Taxonomy for
This display is a taxonomy field in the "Project" content type. As you can see from the UI, the field shows the whole hierarchy. User can pick the taxonomy term that is meant for "Sector" because there is no way to limit that user can only select "Program" taxonomy term. |
Isn't there? At least in Orchard 1 we have an option to define which level of the taxonomy can be selected. Don't we have it here too? If not we could add it. I am pretty sure we can already limit to "leaves" (last level) |
This doesn't exist at the moment
Yes this exists |
I assume it would be useful for your use case if the Taxonomy picker field could also be limited to display a subset of terms |
Yes. I can think of two ways:
|
The larger issue here is finding the best way to relate one content to another. Parent > Child (List Part) Right now to associate a child content to a parent via ListPart is to create the child content through the List Items interface of the parent Content Item. This is very restrictive. There is no way current to create a child content and associate it to the parent item. |
I'm going to throw in a different idea. In the entity framework system if I have 2 entities with a relationship to each other we actually have 3 objects. 2 for the entities and 1 for the relationship. I had thought about making a content definition type just for the relationship. This is actually best for many to many relationships. I don't believe any of this relationship stuff was thought through properly when Orchard Core was designed. The issue here is that I bet orchard core attracts a lot of developers where as drupal and wordpress attract a lot of web designers. We are trying to be developers with orchard core which is good. |
I am trying to use Content Picker at the moment for 'Sector > Program > Project > Albums'. So
So this solves the issue of editing child content and not knowing the parent (ListPart has this problem). The problem here the parent doesn't know its children. So it's a reverse situation. It's not a deal break because you can always query this information easily at the display level although admin support would be amazing. |
Summary of approaches to structure hierarchical content.The structure required is ListPartThis approach allows a Content Item to have children contents. Each child content is stored on its document. To achieve our required structure, we need to do the following:
The Good Part
The Bad Part
ContentPickerFieldThis feature allows you to associate a content with another piece of content filtered by their Content Types. This makes it very versatile. You can use ContentPickerField to model a child parent relationship. Note that the parent content has no idea that it has child contents. The information about the relationship is only stored at the child content. To achieve our required structure, we need to do the following:
The Good Part
The Bad Part
TaxonomyTaxonomy allows you to associate one content with another loosely. The taxonomy will represent the hierarchy and you associate your content with the relevant term within the taxonomy. The Good Part
The Bad Part
|
I really like the design of the ContentPickerField solution. How about this? Edit: Simplified proposal using Menu.
Example uses:
Thoughts? |
Is there any examples of how to use this Content Picker Programatically in Headless recipe |
I think that ultimately we would need to adjust the UI of the ListPart to allow moving content items from one list to another. Also, allow adding content items that are already created in a list. @dodyg I like what you did there, it should surely be copied over to a discussion "Show and Tell" as a small guideline to make it more evident for everyone. |
We now have docs for this: https://docs.orchardcore.net/en/latest/docs/topics/content-relationships/. |
For a structure such as
Sector > Program > Project > Albums, what is the best way to design the relation between them?
I think using the container/list will make the UI too complex because of the nested structure. Right now the way I think about it is to create a text field (with predefined input) for each children content to relate to their parents. The problem of course this list needs to be maintained manually.
Therefore
I wonder if there's a better way.
The text was updated successfully, but these errors were encountered: