Ghost/core/server/services/routing/registry.js
kirrg001 a1b55509df Dynamic Routing Beta: collection name behaviour
refs #9601

Example:

```
collections:
  /podcast/:
    permalink: /{slug}/
```

- the name of the collection is remembered as `routerName` (in the case above: "podcast")
- the name of the collection is important for two things
  1. context value
  2. template name
- the context value is available for specific theme helpers e.g. is helper, body_class helper
- we auto-lookup the collection name in your theme e.g. podcast.hbs
- this logic does not apply to static routes
- if you define templates on your collection, they are stronger than the collection name
2018-06-21 20:59:43 +02:00

70 lines
1.5 KiB
JavaScript

const _ = require('lodash');
let routes = [];
let routers = {};
module.exports = {
setRoute(routerName, route) {
routes.push({route: route, from: routerName});
},
setRouter(name, router) {
routers[name] = router;
},
getAllRoutes() {
return _.cloneDeep(routes);
},
getRouter(name) {
return routers[name];
},
/**
* https://github.com/TryGhost/Team/issues/65#issuecomment-393622816
*
* Hierarchy for primary rss url:
*
* - index collection (/)
* - if you only have one collection, we take this rss url
*/
getRssUrl(options) {
let rssUrl = null;
const collectionIndexRouter = _.find(routers, {name: 'CollectionRouter', routerName: 'index'});
if (collectionIndexRouter) {
rssUrl = collectionIndexRouter.getRssUrl(options);
// CASE: is rss enabled?
if (rssUrl) {
return rssUrl;
}
}
const collectionRouters = _.filter(routers, {name: 'CollectionRouter'});
if (collectionRouters && collectionRouters.length === 1) {
rssUrl = collectionRouters[0].getRssUrl(options);
// CASE: is rss enabled?
if (rssUrl) {
return rssUrl;
}
}
return rssUrl;
},
resetAllRoutes() {
routes = [];
},
resetAllRouters() {
_.each(routers, (value) => {
value.reset();
});
routers = {};
}
};