| Title | Extending the Nested Sets Model with "Hardlinked Nested Sets" |
|---|---|
| Student | Enno Klasing |
| Mentor | Louis Benton Landry |
| Abstract | |
|
Some of the most often requested new features for Joomla! are the abilities to
nest categories in an unlimited depth, and to place content into more than one category. The usage of the Nested Sets Model offers an elegant and efficient solution to this feature request. During this year's Google Summer of Code, I would like to extend the current Node Based Scheme libraries [1] – which implement a Nested Sets Model – with a feature which I call "Hardlinked Nested Sets". Often it is needed to place the same item into different parent items at the same time. This is a simple task when dealing with just one single item each time. However, as soon as one wants to duplicate a complete branch of items (e.g. for categories with sub-items in it), this task becomes a whole lot more complicated. Data integrity, execution time and the forming of valid routes to such sub-items are three major issues which need to be taken into account. * Data integrity should be achieved at the library level, so that whenever a node which has hardlinked duplicates is being changed, all duplicated nodes will be changed as well. The Nested Sets Model (which is used by the NBS) already performs non-atomic actions, and therefore requires transactions. So if all extensions use the provided libraries, data integrity can be guaranteed. * When the main functionality becomes implemented in the data-changing routines, the "Hardlinked Nested Sets" feature will have a very small impact on execution time of data reading functions, but requires a little bit more time for storing data. * Routes to such hardlinked sets should still contain the IDs or names of the original items (except for the item where the linked branch starts), to present unique IDs or names to the outside (important e.g. for human readable URLs) and inside (important for future ACL implementations). [1] http://code.google.com/soc/2006/joomla/appinfo.html?csaid=23A1F7A6CF74EC01 |
|