2010-04-07 18 views
5

Bir CMS'yi Grails'de bir öğrenme egzersizi olarak yapıyorum ve içerik yöneticilerine farklı HTML sayfası yapıları (örneğin 2 sütun, 3 sütun vb.) Arasında seçim yapma yeteneği vermek istiyorum.Düzenler Grails denetleyicileri tarafından seçilebilir mi?

Grails Layouts mantıksal bir seçim gibi görünüyor, ancak Grails denetleyicisinin hangi düzenin görüntülenmek için kullanılacağını açıkça belirtmesi mümkün mü? İdeal olarak, Ruby on Rails başınaseçeneği, render metodu olacaktı ama ben böyle bir şey göremiyorum.

Düzenin adını geçerek applyLayout yöntemini kullanmanın mümkün olabileceği görülüyor, ancak bu her bir GSP sayfasının Layout by Convention'u kullanmak yerine mizanpajı açıkça (sayfa başına rahatsız edici ek yükü) istemesini gerektirir.

Herhangi bir fikrin var mı?

cevap

3

Bunu işlem başına gerçekleştirmenin bir yolunu bilmiyorum, ancak bunu denetleyici düzeyinde belirtebilirsiniz, örn.

class FooController { 

    static layout = 'cms' 

    def index = {} 
    def foo = { ... } 
    def bar = { ... } 
} 
+0

Bunu da gördüm, ancak kullanıcı hesabı olacak özel. – maerics

5

Neden sadece modelinde geçmek ve onu düzenini belirleyen meta etiketinde kılmıştır?

<meta name="layout" content="${myValueFromController}"/> 

Denemedim, ama işe yarayacak. Sadece kumandanın afterInterceptor ile birlikte Ted Naleids fikir kullanın:

+0

Bu çözüm işe yarayacak, ancak her görünüm için ' ... – maerics

2

Hey, sana bir çözüm buldum

foo.gsp:

<meta name="layout" content="${actionLayout}" /> 

FooController.groovy:

class FooController { 

    def index = { 
    // do awesome stuff 
    } 

    def afterInterceptor = { model -> 
    model.actionLayout = actionName} 
    } 
} 

Şimdi yapmanız gereken tek şey, düzenlerinizi eylemleriniz gibi adlandırmak veya başka bir adlandırma mantığı oluşturmaktır.

+2

Grails kutunun dışında bir şey yapar. Tek yapmanız gereken, geçerli denetleyici ve eylem adına dayalı bir düzeniyse, bir meta düzen etiketine sahip olamazsınız ve grails, görünümler/düzenler/$ {controller}/$ {action} .gsp. Aynı addaki her eylem için aynı düzeni paylaşma isteğiyse (örneğin: bir liste düzeni) öneriniz işe yarayacaktır. –

+0

Vay, bilmiyordum - teşekkürler! – codeporn

2

Belki bir şey özlüyorum, ancak bu küçük bir taglib sevgisiyle kolayca çözülemez miyiz?

E.g.

<g:if test="${controllerName == 'xyzController'}"> 
    <meta name="layout" content="xyzLayout"/> 
</g:if> 
<g:else> 
    <meta name="layout" content="abcLayout"/> 
</g:else> 

benim düzenleri içinde uygulanmış bir "seçilmiş" bir sınıf olması gerekir hangi sekme belirlenmesi için buna benzer bir şey kullanın. Bu, yine de vurgulama yaparken, tüm navigasyon html'mizi düzende tutmamı sağlar. İstediğinizden biraz farklı, ama ( ?) hala çalışıyor olabilir gibi görünüyor.