Again its been quite some time since my last update regarding this crowdfunding campaign, but I have good news for you all out there. The project is progressing and we are reaching points where actually something significant for everybody is happening. But before I get to the good parts, I wanted to apologise again for the totally screwed up schedule. I was hoping to get this all done a lot quicker and have this project be finished almost 6 months ago, but I simply miscalculated the necessary work by several orders of magnitude. Each step, be it analyzing the existing code, writing new code (in bite sized pieces that can be digested by the project) or getting that code tested by others and convincing people about the direction this is going and last but not least merging the change in, took infinitely longer than I hoped. I hope that you can accept this apology when you see the work that has been done in the last 1.5 months.
First of all, let me list all the PRs that resulted directly or indirectly from this campaign since my last update:
- Fixing canonical in SEF plugin - merged
- Removing unnecessary run of JRouter::parse() - merged
- Routing: Implementing an interface for component router rules - merged
- Finder: Fallback for routing is called with wrong parameters - merged
- Optimizing JComponentHelper::getComponent - merged
- JRouterInstallation::parse() made compatible with the interface - merged
- Initial codereview of languagefilter plugin - merged
- Routing: Adding application and menu objects to component routers - merged
- Routing: using the dependency injected $app and $menu in the core routers - merged
- Updating JComponentRouterRulesInterface - merged
- Tags: Fixing routing
- Language: Refactoring the language system to simplify the code
- Implementing a tree node interface
- Routing: Implementing routing stages
- ContentHelperRoute::getArticleRoute needs to be called with catid and language
- Routing: Discover Itemid in Router for com_content
- Routing: Discover Itemid in Router for com_contact
- Routing: Discover Itemid in Router for com_newsfeeds
What do these links mean?
Each of these links is a contribution that I made to the project since the last update mid-October and that is related to the URL routing in Joomla. Every link with the prefix "Routing:" is directly related to the campaign that you funded, while the others are basically bugs that I found on the way to writing the new system. Most of the other bugs are related to issues where our current API was not correctly used in Joomla itself or overly complex code was used.
There is however one PR that I want to draw special attention to: Language: Refactoring the language system to simplify the code This PR not only cleans up the multi-language implementation in Joomla greatly, it also allows to do some major change inside of Joomlas routing. One of the main problems in Joomlas routing right now are the *HelperRoute classes, like the ContentHelperRoute class. These classes are doing something that actually should be done by the router directly, namely to calculate the right Itemid. The Itemid is a major part of the URL and defines the menu item that the URL should point to and thus the modules that should be displayed on the page (and several other things, but that would go too far in this post). Sometime during Joomla 1.5, these *HelperRoute classes were introduced and have been a problem ever since. First of all, you have to correctly use them everywhere that you are creating a URL (Which you can see here, seems to be a problem on its own already: ContentHelperRoute::getArticleRoute needs to be called with catid and language) and second of all, the router does not know about those classes. They are arbitrarily named and called BEFORE the router (which begins when JRoute::_() is called) and their return value (normally something like this: index.php?option=com_content&view=article&id=42:galaxy&catid=23&Itemid=15) is handed over to the router. Now, if you have such a URL in your article, Joomla will properly convert it to the "right" URL. If you however change the menu item in some way, that link will not be the right link to that article anymore. If the link will work or not, is mostly luck. Anyway, what I'm trying to say is, that the Itemid should be dynamically calculated by the component router. With the Language: Refactoring the language system to simplify the code PR, it is now possible to move that part from the HelperRoute classes into the respective component router, like you can see here:
- Routing: Discover Itemid in Router for com_content
- Routing: Discover Itemid in Router for com_contact
- Routing: Discover Itemid in Router for com_newsfeeds
This will make sure that all your links across your site have at least the right Itemid for these 3 components. (The rest of the core components will follow shortly) This will also soon be changed into generalized code so that this code does not have to be added to each and every component separately, but can be used by all components in Joomla, be it core components or third party extensions. This will then also be the first component router rule that shows the new rules based component router system and which implements the respective interface: Routing: Implementing an interface for component router rules and Updating JComponentRouterRulesInterface
Your question will most likely be, why I did not write that component router rule directly and instead am creating yet another interim solution. At the time of writing this post, Joomla 3.4.0 is close around the corner and I wanted to get this change into the system as soon as possible. Unfortunately, the base-class that would implement the rules based component routers is not ready yet. The code is written, but I'm not happy with it yet and have to give this some more thought. You always have to remember that we will have to live with every class, method and function and their respective behavior that I'm introducing now until at least 4.0. So when I screw up here in some aspect, we might even go further down the backwards compatibility hell that we are already in.
How can I help?
One thing that stalls development the most is the lack of testing. I, and the Joomla project in general, need more people that test the existing code-proposals. So if you want to support this effort further, please look at the link list above and test those proposals that have not been marked as "merged" yet.
What is with my contribution perk?
When you donated to this campaign, you selected something that you wanted in return, be it the plugin to get these changes in Joomla 2.5 or a router for your component to use this new system. I can assure you, that I will honor each and every of the promises that I made and deliver the perks to you as soon as the project is in a somewhat stable phase. But as I described above, the schedule was to optimistic and it will still need more time.
What is the further plan?
I'm working hard on getting more and more code done and getting people to test the stuff that is there. Depending on how much more Joomla 3.4 is going to be delayed, some of the stuff that I described above could go into this version. Otherwise it will most likely be released with Joomla 3.5.
If you have further questions, feel free to write me a mail.