2010-09-01 4 views
5

Hier ist die Herausforderung: Abhängig von der eingehenden URL möchte ich eine bestimmte Zielseite anzeigen und bei der Anmeldung eine bestimmte Benutzererfahrung basierend auf der Identität des Benutzers.Grails-brandable-Anwendung

Zum Beispiel verweisen sowohl www.abc.com als auch www.xyz.com auf eine einzelne Grails-Instanz, die ein gemeinsames Portal-Erlebnis bietet. Wenn der Benutzer über www.abc.com ankam, möchte ich die ABC-Splash-Seite mit dem Anmeldeformular anzeigen. Wenn der Benutzer über www.xyz.com angekommen ist, möchte ich die XYZ-Splash-Seite mit dem Login-Formular anzeigen.

Sobald sich der Benutzer anmeldet, muss der ursprüngliche "Marken" -Kontext gemäß der eingehenden URL beibehalten werden. Selbst wenn alle GSPs, Controller usw. von allen Benutzern gemeinsam genutzt werden, nehmen ABC-Benutzer beispielsweise ihr eigenes CSS, Ressourcenbündel (oder Einträge) usw. auf, und der Benutzer wird eine völlig andere visuelle Erfahrung als XYZ-Benutzer haben .

Ist das möglich? Oder muss ich die Codebasis der Anwendung verzweigen und mehrere unabhängige Portalinstanzen hosten?

Antwort

7

http://www.grails.org/Views+and+Layouts

einen Blick darauf werfen, halte ich es für 90% der Probleme lösen kann. Haben Sie ein spezifisches Layout für jede Domain. Die Layouts sind für jede Ansicht geladen und bei der Festlegung des Blicks helfen können und fühlen

können Sie Variablen in einem Filter, basierend auf der URL festgelegt, die dann im Layout gelesen werden können http://www.grails.org/Filters

class MyFilters { 
    def filters = { 
     myFilter(controller:'*', action:'*') { 
      after = { 
       if (request.requestURI == "xyz") { 
       session.layout = "layout1.gsp" 
       } else { 
       session.layout = "layout2.gsp" 
       } 
      } 
     } 
    } 
} 
+0

Danke Aaron. Ich habe geplant, Layouts zu verwenden, aber was ich nicht herausgefunden habe, ist (a) wie man anfängliche Landing Pages basierend auf eingehender URL erhält und (b) wie man eine Kontextvariable basierend auf der eingehenden URL so einstellt, dass ich programmatisch kann Bestimmen Sie, welches Layout auf jeder Seite verwendet werden soll. (Ich dachte irgendwie, ich müsste so etwas machen: ) – ecodan

+0

den Code aktualisiert, um den alternativen Ansatz mit Filter anzuzeigen –

+0

Aaron - dein Kommentar hat zu diesem Zweck kreatives Denken ausgelöst, und wir konnten das Problem lösen, indem wir Filter (wie von Ihnen vorgeschlagen), taglibs und i18n verwenden. Vielen Dank! – ecodan