This seems like it'd be a pretty easy thing to do partially outside of SilverStripe once you've setup your pages to live under a specific parent. They'd have two URL's. The SilverStripe URL directly under the parent and then the mod_rewrite version of the URL.
I know that because this is SilverStripe(TM) your initial inclination is to use a parent/child taxonomy to handle basically everything, but things like this make a lot of sense to keep as simple as possible. A few major points you want to accomplish:
- Maintain a URL organized by date
- Ensure the URL is still unique per page (at least within the entire subsection, at most within the specific month)
- KISS (keep it simple, stupid)
I'd suggest either encoding this information into the URL segment before saving and instead of using dashes, use slashes, and then do a 301 to point to the slash version and use mod_rewrite to internally redirect to the dash version. Alternatively, which I like more if you're fine with having page URL segments be unique across the entire subsection is to follow the same technique but instead if you visit that specific URL that matches the month/year/urlsegment patterm internally redirect to that exact URL without the month/year and if you visit It without that pattern, simply redirect to the correct one. Then you can still (in either approach) centralize the determination of the correct URL and just compare in the controller with the current request uri.
Bundle that with a grid view (if you have a lot of pages) which is capable of handling versions objects, just to maintain them easily and keep them paginated (forgot the extension/module you need for this, it also needs a custom add button if you want to add that adjacent to the field). But that's just if you want it and are going to have thousands of pages.
That to me is waaaay easier than trying to do a jig around the draft vs published dance that the page will do as you transition the page's hierarchy by actually manipulating the parent id. Some things are easily accomplished outside of SilverStripe. In this case it's a concept. And that concept is to tackle 98% within SilverStripe's php code and the the remainder in a few lines of .htaccess.
Will that work?
Sent from my iPad