Templates
Templates can be defined from their own section in the admin panel to store and use objects with given values and use them to create new ones using these values as default.
Model
The only requisite to create a template for a model is that the model class includes the Decidim::Templates::Templatable
concern.
Controller
A controller must be created in decidim-templates/app/controllers/decidim/templates/admin
for the template management actions: index
, new
, create
, edit
, update
, delete
and the additional copy
, apply
, skip
and preview
actions.
Commands
You should create at least the custom create
, copy
and apply
commands for the model templates in decidim-templates/app/commands/decidim/templates/admin
, and can use the general destroy
and update
commands in the controller, which need to be called only with the Template
itself.
Routes
The following routes should be defined in decidim-templates/lib/decidim/templates/admin_engine.rb
.
resources :$MODEL_templates do
member do
post :copy
resource :$MODEL, module: :$MODEL_templates # To manage the templatable resource
end
collection do
post :apply # To use when creating an object from a template
post :skip # To use when creating an object without a template
get :preview # To provide a preview for the template in the object creation view
end
end
Views
All views related to a model’s template management must be created inside decidim-templates/app/views/decidim/templates/admin/$MODEL_templates
.
Testing
The factory for a specific model’s template should be defined in decidim-templates/lib/decidim/templates/test/factories.rb
, inside the general :template
factory.
Other
Add the route to the model templates index inside decidim-templates/app/controllers/decidim/templates/admin/application_controller.rb
, providing the title and the index root.
def template_types
@template_types ||= {
I18n.t("template_types.questionnaires", scope: "decidim.templates") => decidim_admin_templates.questionnaire_templates_path,
I18n.t("template_types.$MODEL_PLURAL", scope: "decidim.templates") => decidim_admin_templates.$MODEL_templates_path,
}
end