On April 21st, 2014 I started a campaign on to finance some work on the routing code for Joomla. (You can find the campaign here) The campaign ended on May 25th, 2014 and it already was successfull on April 25th. This is the place where the progress is being documented and where the contributors are listed. If you have any questions, please feel free to mail me via the adress in the Impressum.

While my updates were sparse, I haven't been idle in the last few weeks. The current situation is that the new routing classes are done and the old behavior has been put into rule classes, however this code is not backwards compatible yet.

JRouter has been reduced from 29 methods to 10 (those 19 methods have been left in but deprecated), and JRouterSite has been reduced to 2 methods from formerly 12. While the interface has been kept backwards compatible, the behavior has changed and this is where the problems set in. Is it still backwards compatible when the methods don't have the same effect as before? Right now, when you set the mode of the router between SEF and RAW, it changes the URLs. With the proposed changes, there is no mode anymore. It is just a changing set of rules that is applied to URLs. So I'm struggling on if and how this is B/C.

There is also the issue of the interface of rules. In the past, build-rules did not have a return-value while parse-rules did and in the new system, this has been unified so that both don't have a return-value. I think I have a sufficient solution for that, but it needs more testing.

Despite these issues, I'd like to give you a little insight on how this works right now. JRouterSite still extends JRouter, but it does not really override any methods anymore. Instead JRouterSite defines a set of rules that are added when the router is instantiated. It also takes an app- and menu-object that it provides to the rules, so that URLs for the frontend could be build both in front- and backend, depending on if you are able to get proper app- and menu-objects. JRouter then only provides a build() and parse() interface, which executes the different rules on the URLs. So JRouterSite is mostly empty and JRouter itself is pretty lean, too.

For the rules, there are two ways to add them to the system. Solution #1 would be a callback, that you can hand over to the router. Solution #2 is simply a rule-name, like "sef", which gets expanded into "JRouterRulesSef". That class should implement the JRouterRulesInterface and up till now, all those rules are autoloadable. Each rule provides a build() and a parse() method, which take the router and the URI object as parameters and can then modify them to their liking. Both objects are handed over as reference, so that the methods don't need a return value. While I could implement the rules as abstract classes, I decided to work with instantiated objects here, since this allows you to do some preliminary work like caching the menu or similar stuff.

I will try to keep you posted more often and as soon as the code is presentable, I will push it into my cloned Joomla-github repository. Thank you all for your patience, I definitely have not forgotten you.

Hello to everybody and especially all the contributors!

I can happily announce that the first pull request has been created:

This PR introduces a large chunk of tests to document the current behavior of the core router classes and is the foundation to rewrite the system in a backwards compatible way.

In the future, I will keep you all posted on the progress of this effort here on this site. Considering the timetable: I'm lacking a bit behind, but all major roadblocks should be gone now and I should be able to devote most of my time to this project.

This is an alphabetically ordered list of all the contributors to this little project. Let me say "Thank you!" to all of them. If you want to have other information displayed here instead of only the nickname, please mail me at I will publish your name, company name, link to a website and a mailadress if you ask me to.

  • 2in1-online
  • 4Web Inc.
  • a.sedelnikov
  • alexred
  • Andreas Ruttkamp
  • AndreD
  • babelfish
  • Claudia
  • d.grammatiko
  • Dan Knauss
  • David Jardin
  • Digital Peak
  • digitalcomputer2142
  • Dmitry Averin
  • Dmitry Rekun
  • Doxadigital
  • DrVolt
  • dumitru05
  • Gary Barclay
  • hechtnetz
  • HikaShop
  • Inge
  • ivangretsky
  • Ivo Apostolov
  • javier.gomez.corio
  • Joomlapolis .com
  • Kim Hjortholm
  • kroener
  • Marko Dedovic
  • Matt Thomas
  • Matthew Philogene
  • mbabker
  • mblass
  • mitchlowther
  • mpetrushkov
  • Octopoos Editor of SEBLOD
  • OSTraining .com
  • Papillon
  • Paul van Jaarsveld
  • Paulo Griiettner
  • Peguschwein
  • Pulsar Informatique
  • ralf.longwitz
  • ranelkobi
  • Robert Went
  • Roberto Segura
  • rowbyrowby
  • Signum Product Solutions
  • Simone Bussoni
  • smz11
  • SoftForge Ltd
  • SOHO Prospecting
  • stas.ivashkin
  • Tobs Bobs
  • Valentin Despa
  • Valentín García
  • Viktor Vogel
  • Webworker Berlin
  • Yireo
  • zikkuratvk