Template engine


#1

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.


#2

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.
http://blog.shingara.fr


#3

ç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.


#4

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.


#5

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 ?


#6

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.
http://blog.shingara.fr


#7

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
http://www.merbing.com/2008/10/15/bug-cross-thread-violation-on-rb_gc

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é …


#8

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.