lo there all. i have a website that i am writing in rails for three different companies, each with their own domain. Each domain will need to load its own logo, and have a little different look in its CSS style sheet. However, all the same code will be run for each. What i would like to do is set something up that knows what domain is pointed at in the browser, and then load the appropriate logo and stylesheet for that domain, i suppose in a before_filter. Anyone have an idea about how i can pull this off ? for example domain1.com should pull domain1_style.css and domain1_logo.jpg while domain2.com should pul domain2.com_style.css and domain2_logo.jpg. i can do this, right ? thanks --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I have also wanted to do this, but until someone pays me to solve this one it''s just a dream :) My thoughts were to use this http://weblog.jamisbuck.org/2006/10/26/monkey-patching-rails-extending-routes-2, then use the subdomains call (http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html#M000178) so my application could work out how to respond. By storing all your subdomains is a table, or in the directory structure, you should be able to have each subdomain inherit the layouts/stylesheets/etc from the parent. This was there is a default is no customizations are done for the hosted company. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 12/13/06, askegg <andrew.skegg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > I have also wanted to do this, but until someone pays me to solve this > one it''s just a dream :) > > My thoughts were to use this > > http://weblog.jamisbuck.org/2006/10/26/monkey-patching-rails-extending-routes-2 > , > then use the subdomains call > ( > http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html#M000178 > ) > so my application could work out how to respond. > > By storing all your subdomains is a table, or in the directory > structure, you should be able to have each subdomain inherit the > layouts/stylesheets/etc from the parent. This was there is a default > is no customizations are done for the hosted company. > > > > > dear God, i thought that this would be much easier. I have most of theapplication written already. thanks sk --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Stepping back a little, it would probably be quite easy to just use the "subdomains" call, then base the layout and stylesheets on that. In the application controller: find subdomain look for a directory with that name if found? Look for a layout/stylesheet and use them or use the defaults. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
i think that this is exactly what will work. using the differen tld_length so i can actually get the domain name instead of the www or whatever. would it be just as easy to create a session variable with the domain name and then load different looks based on that ? like domain1.com would be a :session[domain] and domain2.com would be a :session[domain] and i could load the stylesheet based on that right from the application.rhtml. could it be that easy ? thanks for your time on this by the way. sk --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Not that I have tried any of this, but: In the application controller (?) session[:domain] = request.subdomains.first In the application.rthml @stylesheet = File.file? session[:subdomain] || "default.css" Something like that..... --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hey, i thought you were not going to solve this until someone paid you ! thanks for your experience on this. i will be in a position to test it out in a couple of days (when we get the new server ). i will let you know. thanks so much again. shawn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Invoice is in the mail :) BTW - I am still learning rails, but part of my philosophy when trying to learn something is to get involved, ask questions and provide answers if I can. If I am wrong, some more experience person will say so and we all benefit. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
nephish wrote:> > i think that this is exactly what will work. using the differen > tld_length so i can actually get the domain name instead of the www or > whatever. > > would it be just as easy to create a session variable with the domain > name and then load different looks based on that ? > > like domain1.com would be a :session[domain] > and domain2.com would be a :session[domain] > > and i could load the stylesheet based on that right from the > application.rhtml. > > could it be that easy ? >Coming in a bit late with this but yes this will work. I have used very similar approach to provide an alternative view for PDA devices. You can try the following links to get an idea. http://www.edgesoft.ca/blog/read/2 http://mobile.edgesoft.ca/blog/read/2 Long --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
thanks guys, again. appreciate it a lot. shawn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> Coming in a bit late with this but yes this will work.Thanks - it''s nice to get validation for your ideas :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 12/13/06, nephish <nephish-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > lo there all. > > i have a website that i am writing in rails for three different > companies, each with their own domain. > Each domain will need to load its own logo, and have a little different > look in its CSS style sheet. However, all the same code will be run for > each. What i would like to do is set something up that knows what > domain is pointed at in the browser, and then load the appropriate logo > and stylesheet for that domain, i suppose in a before_filter. > > Anyone have an idea about how i can pull this off ? > > for example domain1.com should pull domain1_style.css and > domain1_logo.jpg > while domain2.com should pul domain2.com_style.css and > domain2_logo.jpg. > > i can do this, right ? >Yes! I built an application that runs many sites, doing exactly this. The domain, or hostname, can be retrieved via: request.env_table[''HTTP_HOST''] I used a method similar to the following in application_helper.rb def determine_site # search for domain in sites table @site = Site.find_by_domain(request.env_table[''HTTP_HOST'']) # get default site if no site was found @site = Site.find_by_domain("www.defaultdomain.com") if !@site end There''s obviously a ''sites'' table in the database that stores the domain name, amongst other things. ''determine_site'' is called in each controller action (this is what could be more elegant), but it returns info relating to the site including a field named ''code'' that I used to bring up the correct stylesheets and logos. The css and logo files are named using the site.code. This way I could keep all logos and stylesheets in the normal locations. You could simply use the @site.code in the image and stylesheet html in your layout. I chose to be sure the files actually exist before calling them, and keep my layout file pretty by defining and calling the following methods (also in application_helper.rb) def include_custom_stylesheet if File.file?("#{RAILS_ROOT}/public/stylesheets/#{@site.code}_styles.css") ''@import "/stylesheets/'' + @site.code + ''_styles.css";'' end end def display_logo if File.file?("#{RAILS_ROOT}/public/images/logo_#{@site.code}.png") ''<img src="/images/logo_'' + @site.code + ''.png" border="0" alt="Logo" />'' else # no logo found with that site code, use default ''<img src="/images/logo_default.png" border="0" alt="Logo" />'' end end So the layout.rhtml is basically <html> <head> <style type="text/css"> @import "/stylesheets/default_styles.css"; <%= include_custom_stylesheet %> </style> </head> <body> <div><a href="/" title="Home"><%= display_logo %></a></div> <div><%= @content_for_layout %></div> </body> </html> Note that you could simply return the default CSS file in the ''include_custom_stylesheet'' method, as done in ''display_logo''. Given the nature of CSS, it was simpler (and DRY''er in my CSS) for me to just change what was necessary (as changes were minimal) and let the "cascading" part of CSS do the magic of overriding the necessary default styles. YMMV You could also just call the logos from CSS too and avoid the logo trick all together, but that may or may not work in your situation. There are definitely other ways of doing this, but this fit my requirements fine so I went with it. Hope that helps. -- Chris Martin Web Developer Open Source & Web Standards Advocate http://www.chriscodes.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 12/13/06, Chris Martin <chriscodes-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > On 12/13/06, nephish <nephish-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > lo there all. > > > > i have a website that i am writing in rails for three different > > companies, each with their own domain. > > Each domain will need to load its own logo, and have a little different > > look in its CSS style sheet. However, all the same code will be run for > > each. What i would like to do is set something up that knows what > > domain is pointed at in the browser, and then load the appropriate logo > > and stylesheet for that domain, i suppose in a before_filter. > > > > Anyone have an idea about how i can pull this off ? > > > > for example domain1.com should pull domain1_style.css and > > domain1_logo.jpg > > while domain2.com should pul domain2.com_style.css and > > domain2_logo.jpg. > > > > i can do this, right ? > > > > Yes! I built an application that runs many sites, doing exactly this. > > The domain, or hostname, can be retrieved via: > request.env_table[''HTTP_HOST''] > > I used a method similar to the following in application_helper.rb > > def determine_site > # search for domain in sites table > @site = Site.find_by_domain(request.env_table[''HTTP_HOST'']) > # get default site if no site was found > @site = Site.find_by_domain("www.defaultdomain.com") if !@site > end > > > There''s obviously a ''sites'' table in the database that stores the > domain name, amongst other things. > ''determine_site'' is called in each controller action (this is what > could be more elegant), but it returns info relating to the site > including a field named ''code'' that I used to bring up the correct > stylesheets and logos. The css and logo files are named using the > site.code. This way I could keep all logos and stylesheets in the > normal locations. > > You could simply use the @site.code in the image and stylesheet html > in your layout. > I chose to be sure the files actually exist before calling them, and > keep my layout file pretty by defining and calling the following > methods (also in application_helper.rb) > > > def include_custom_stylesheet > if File.file?("#{RAILS_ROOT}/public/stylesheets/#{@site.code > }_styles.css") > ''@import "/stylesheets/'' + @site.code + ''_styles.css";'' > end > end > > def display_logo > if File.file?("#{RAILS_ROOT}/public/images/logo_#{@site.code}.png") > ''<img src="/images/logo_'' + @site.code + ''.png" border="0" alt="Logo" > />'' > else > # no logo found with that site code, use default > ''<img src="/images/logo_default.png" border="0" alt="Logo" />'' > end > end > > > So the layout.rhtml is basically > > <html> > <head> > <style type="text/css"> > @import "/stylesheets/default_styles.css"; > <%= include_custom_stylesheet %> > </style> > </head> > <body> > <div><a href="/" title="Home"><%= display_logo %></a></div> > <div><%= @content_for_layout %></div> > </body> > </html> > > > Note that you could simply return the default CSS file in the > ''include_custom_stylesheet'' method, as done in ''display_logo''. Given > the nature of CSS, it was simpler (and DRY''er in my CSS) for me to > just change what was necessary (as changes were minimal) and let the > "cascading" part of CSS do the magic of overriding the necessary > default styles. YMMV > You could also just call the logos from CSS too and avoid the logo > trick all together, but that may or may not work in your situation. > > There are definitely other ways of doing this, but this fit my > requirements fine so I went with it. > Hope that helps. > > -- > > Chris Martin > Web Developer > Open Source & Web Standards Advocate > http://www.chriscodes.com/ > >Yes, Chris, this helps, this helps big. Thanks a lot ! shawn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---