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_route
defines 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
andid
. 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 ispermalink
.
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 |