14 Oct
matte

matte il 14 October 2006 parla di Tutorial

Template e sottodomini

Avete mai avuto la necessità di creare dei sottodomini ad un dominio di secondo livello ed applicare ad ognuno di essi un template o creato dall’utente o scelto da un set di template predefiniti nel sistema? Ecco alcuni suggerimenti e linee guida per realizzare un sistema di questo tipo.

Supponendo di:

  • installare la gemma theme_generator con il comando gem install theme_generator.
  • installare il plugin theme_support con il comando ./script/plugin install http://mattmccray.com/svn/rails/plugins/theme_support
  • creare il modello Site con un campo subdomain e uno theme_name, il primo per inserire il nome del sottodominio e il secondo per specificare il nome del template da associare al sito
  • creare il controller site_controller per gestire i siti dei sottodomini

Inserire all’interno dell’application_controller il seguente codice:

    1 class ApplicationController < ActionController::Base
    2 
    3   attr_accessor :subdomain_theme
    4 
    5   before_filter { |c| c.subdomain = c.set_theme c.request.subdomains.first}
    6 
    7   def set_theme subdomain_name
    8     begin
    9     Site.find_by_subdomain(subdomain_name, :select => :theme_name).theme_name
   10     rescue
   11     end
   12   end
   13   
   14   ...
   ..   
   .. end

Vediamo in dettaglio il codice indicato sopra:

  • alla linea num. 3 introduciamo una variabile subdomain_theme in cui memorizziamo il nome del template da utilizzare nel sito.
  • alla linea num. 5 settiamo la variabile subdomain_theme prima di ogni azione chiamando la funzione set_theme.
  • alla linea num. 9 cerchiamo all’interno della tabella sites il record corrispondente al sottodominio che si sta visitando e dal cui record si estrae il nome del template.

A questo punto, supponendo di aver creato il controllore site_controller possiamo inserire la seguente linea di codice per richiamare il template associato al sito:

    1 class SiteController < ApplicationController
    2   
    3   layout 'default'
    4   
    5   theme :get_subdomain_theme
    6   
    7   def get_subdomain_theme
    8     subdomain_theme
    9   end
   ..   
   .. end

A questo punto vi trovate un’applicazione web che serve più sottodomini, con la possibilità di specificare un template diverso o in comune per ogni sito.

Scrivi un commento