Module: Scrivito::RoutingExtensions
- Defined in:
- app/cms/scrivito/routing_extensions.rb
Instance Method Summary collapse
-
#scrivito_route(path, using:, format: nil, via: :get) ⇒ Object
scrivito_routedefines routes for Scrivito pages.
Instance Method Details
#scrivito_route(path, using:, format: nil, via: :get) ⇒ Object
To use scrivito_route Configuration.inject_preset_routes needs to be
disabled.
scrivito_route defines routes for Scrivito pages. The default routes are:
scrivito_route '(/)(*slug-):id', using: 'slug_id', via: :all
scrivito_route '/', using: 'homepage', via: :all
scrivito_route '/*permalink', using: 'permalink', format: false, via: :all
The first parameter of scrivito_route should look familiar - it is just a regular
Rails route pattern. You can make full use of the Rails route patterns when specifying
Scrivito routes.
In addition to directing incoming traffic to the code that handles it, Scrivito
routes have another distinct functionality: They determine which URL or path is generated
for a given CMS object. The using: option needs to be provided to tell Scrivito which
route should be used for which type of CMS objects. For example, using:
"permalink" instructs Scrivito to use the route for CMS objects to which a
_permalink has been assigned. The Scrivito routes expect the route pattern to contain
route parameters for dynamically inserting the values for individual CMS objects. If,
for example, the permalink of an object is about and the route pattern is
my_page/*permalink, Scrivito generates the url http://www.example.com/my_page/about.
Valid :using values and their required route parameters are:
[+slug_id+] Route pattern for a normal CMS object. Expected route parameters are slug
and id.
[+homepage+] Route pattern for a homepage CMS object. No route parameters needed.
[+permalink+] Route pattern for CMS objects that have a _permalink assigned to them. The
required route parameter is permalink.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/cms/scrivito/routing_extensions.rb', line 50 def scrivito_route(path, using:, format: nil, via: :get) assert_scrivito_route_enabled # @set is a ActionDispatch::Routing::RouteSet # see: http://git.io/v4UYF and http://git.io/v4UOI route_set = @set route_name = using.to_sym route = Route.register(route_set, route_name) = { to: 'scrivito/cms_dispatch#index', via: via, format: format, as: route.helper_name, } [:constraints] = {id: /[a-f0-9]{16}/} if route_name == :slug_id begin match(path, **) rescue ArgumentError => error if error..include?(route.helper_name) raise ScrivitoError, %(You have already defined a Scrivito route with the name "#{route_name}".) else raise error end end end |