18-03-2010, 02:40 PM
J'utulise l'architecture REST pour ce genre de chose. Grâce à elle, j'inclus une feuille de style comme d'habitude, sauf que ce fichier CSS n'est pas un fichier statique : il est généré à la volée par le serveur.
Voici un exemple (en imaginant que je sois dans la partie d'id 24) :
Côté serveur, j'ai configuré des routes :
Ça permet à mon application d'être capable de reconnaître les requêtes HTTP de la forme :
En l'occurrence, l'attribut href de notre balise link va envoyer une requête GET, c'est donc la première route qui va être utilisée. L'action "show" du contrôleurs "maps" va être exécutée. Cette action est configurée pour répondre quand on demande du CSS (ainsi que du JS ou du HTML).
Ensuite, la vue est toute bête. On a l'habitude de générer du HTML avec le serveur, ici c'est pareil sauf qu'on génère du CSS. Et bien sûr, on envoie le type MIME qui convient (text/css), mais ça c'est Rails qui s'en occupe, dans mon cas.
Comme d'habitude, les frameworks ouvrent souvent les yeux sur des solutions.
Sephi-Chan
Voici un exemple (en imaginant que je sois dans la partie d'id 24) :
<link type="text/css" rel="stylesheet" href="/games/24/map.css" />
Côté serveur, j'ai configuré des routes :
# On déclare une ressource game. Chaque ressource game dispose d'une ressource map.
resources :games do
resource :map
end
Ça permet à mon application d'être capable de reconnaître les requêtes HTTP de la forme :
GET /games/:game_id/map(.:format) { :action => "show", :controller => "maps" }
POST /games/:game_id/map(.:format) { :action => "create", :controller => "maps" }
PUT /games/:game_id/map(.:format) { :action => "update", :controller => "maps" }
DELETE /games/:game_id/map(.:format) { :action => "destroy", :controller => "maps" }
En l'occurrence, l'attribut href de notre balise link va envoyer une requête GET, c'est donc la première route qui va être utilisée. L'action "show" du contrôleurs "maps" va être exécutée. Cette action est configurée pour répondre quand on demande du CSS (ainsi que du JS ou du HTML).
class MapsController < ApplicationController
def show
@game = Game.find(params[:game_id])
@map = @game.map
respond_to do |format|
format.html # Rend la vue /views/maps/show.html.erb
format.js # Rend la vue /views/maps/show.js.erb
format.css # Rend la vue /views/maps/show.css.erb
end
end
end
Ensuite, la vue est toute bête. On a l'habitude de générer du HTML avec le serveur, ici c'est pareil sauf qu'on génère du CSS. Et bien sûr, on envoie le type MIME qui convient (text/css), mais ça c'est Rails qui s'en occupe, dans mon cas.
Comme d'habitude, les frameworks ouvrent souvent les yeux sur des solutions.
Sephi-Chan