Template engine

Bonjour,

Je cherche a régler une problématique d’indépendance de la couche
présentation. Je m’explique. je veux pour la même logique métier des
présentations différentes, de la structure HTML/ERB au CSS en passant
pas les images. Alors j’ai regardé coté Engine template pensant
trouver une solution mais apparemment ça ne réponds pas a mon
problème.

Y en a t-il parmi vous qui ont déjà résolue cette problématique et
comment ?

J’ai pensé à positionner le nom d’un répertoire et modifier les
chemins au lancement de l’appli, ça pourrait marcher …

{RAILS_ROOT}/app/views/{my_path}/
{RAILS_ROOT}/public/stylesheets/{my_path}/
{RAILS_ROOT}/public/images/{my_path}/
{RAILS_ROOT}/public/javascripts/{my_path}/

des idées ou retours d’expériences ?

merci.

Joel A. wrote:

comment ?

J’ai pensé à positionner le nom d’un répertoire et modifier les
chemins au lancement de l’appli, ça pourrait marcher …

{RAILS_ROOT}/app/views/{my_path}/
{RAILS_ROOT}/public/stylesheets/{my_path}/
{RAILS_ROOT}/public/images/{my_path}/
{RAILS_ROOT}/public/javascripts/{my_path}/

des idées ou retours d’expériences ?
Quel est la variable qui fait changé ton path ? ca dépend de
l’utilisateur ou d’une conf en admin ?

Car tu as la gestion de theme de Typo que tu peux étudier. Si j’ai le
temps promis je la déplace en Rails::Metal :slight_smile:


Cyril M.

ça serait clairement une conf admin. Je ne sais pas encore où
et
comment changer le path mais ça doit sûrement pouvoir se modifier.

Je regard les sources de Typo merci.

J’aurai bien vue un système comme Engine, les vues présentent dans le
plugin sont chargées et utilisées à part si on les surchargent dans
l’application principale, finalement je me dis que c’est exactement le
mécanisme que je cherche.

Des idées ? Des personnes ayant mis ça en place ?

merci.

Dans Typo la notion de template ne dépasse pas les CSS ?! La structure
des vues restent la même si j’ai bien compris ?

Zaphod B. wrote:

Dans Typo la notion de template ne dépasse pas les CSS ?! La structure
des vues restent la même si j’ai bien compris ?

non, ça permet de tout modifier.

toutes les vues et on peux aussi ajouter des helpers spécifiques.


Cyril M.

Bon faut je regard ça de plus près …

Sinon rien à voir avec le schmibilik mais je suis en Ruby 1.8.7 avec
MacPort et l’installation de Typo génère une exception
particulièrement déroutante :
[BUG] cross-thread violation on rb_gc()
ruby 1.8.6 (2008-03-03) [universal-darwin9.0]

En recherchant sur google j’ai enfin trouvé le problème il semble que
de friser les gems avec une version de Ruby pose souci

I was having this weird issue for sometime when starting Merb in a
frozen app and I was even using ruby 1.8.6:

[BUG] cross-thread violation on rb_gc()
ruby 1.8.2 (2004-12-25) [universal-darwin8.0]
Abort trap

Google didn’t help me, then I remember about the new ‘thor
merb:gems:redeploy’ task that recompile gems on the target platform
and gave it a shot, resulting:

Building native extensions. This could take a while…
Successfully installed do_mysql-0.9.6
Building native extensions. This could take a while…
Successfully installed fastthread-1.0.1
Building native extensions. This could take a while…
Successfully installed hpricot-0.6.161
Building native extensions. This could take a while…
Successfully installed mongrel-1.1.5

Fastthread was probably compiled with the original OSX Ruby 1.8.2
resulting in this [BUG]!?

Awesome, I have my merb app working again in my dev box. Now updating
it to work with Merb RC1 and new merb-auth.

Thanks thor!

En supprimant les gems de vendor et les réinstallant ça a marché …

Bon je tente une approche :

Dans mon controller j’indique ceci

def show
@user = current_user
respond_to do |format|
format.html { render render_template_view
(‘users’,‘show.html.erb’) }
end
end

Et dans ApplicationController

protected

def render_template_view(controller_name,view_name)
template_view = File.join(RAILS_ROOT, File.join(“app”,
File.join(“views”,
File.join(“templates”,
File.join(@configuration.path_design,
File.join(controller_name,view_name))))))
if File.exist?(template_view)
return File.join(“templates”, File.join
(@configuration.path_design, File.join(controller_name,view_name)))
else
return File.join(controller_name,view_name)
end
end

def find_configuration
@configuration = (session[:configuration] ||= Configuration.first)
end

ça me permet de surcharger les vues que je veux modifier … ça vaut
ce que ça vaut … ça marche en tout cas. Je suis preneur de critiques
ou autre méthodes

Merci.