4

優れた FilterPane grails プラグインの HTML マークアップをカスタマイズしようとしていますが、少し問題があります。FilterPane は、検索/フィルター フォームをレンダリングするための一連のタグを提供します。アプリケーションでこれらをオーバーライドしたいと考えています。

_tagName.gspオーバーライドしたい s を単純にコピーできると思っていました

plugins/filterpane-2.0.1.1/grails-app/views/filterpane

の中へ

grails-app/views/filterpane

それらを変更しますが、指定されたプラグイン名プロパティで render メソッドが呼び出された場合、Grails はアプリケーションがプラグインのビューをオーバーライドしているかどうかを決してチェックしないようです。

org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateRenderer.findAndCacheTemplateプライベート メソッドに次のコードが含まれています。

...
GroovyPageScriptSource scriptSource;
if (pluginName == null) {
    scriptSource = groovyPageLocator.findTemplateInBinding(templatePath, pageScope);
}  else {
    scriptSource = groovyPageLocator.findTemplateInBinding(pluginName, templatePath, pageScope);
}
...

そのため、null 以外pluginNameが指定された場合、プラグインのビューを取得するだけで、アプリケーションがそれをオーバーライドしているかどうかを確認することはありません。

この問題を回避する簡単な方法は、 をオーバーライドGrailsConventionGroovyPageLocator.findTemplateInBindingするか、他の同様のメソッドをGrailsConventionGroovyPageLocator.

プラグインのビュー ディレクトリをチェックする前に、アプリケーションのビュー ディレクトリをチェックするメソッドGrailsConventionGroovyPageLocatorに置き換えて、単純なクラス オーバーライドを作成しました。findTemplateInBinding次に、デフォルトのプロパティresources.groovyを置き換えるために doWithSpring クロージャーを追加して変更しました。beanClassgroovyPageLocator

def doWithSpring = {
    def pageLocator = delegate.getBeanDefinition("groovyPageLocator")
    pageLocator.beanClass = MyConventionGroovyPageLocator
}

ただし、これはアプリケーションの起動時に呼び出されないようです。

私はここで本当に途方に暮れています。これは簡単だと思っていましたが、ちょっとしたワームの缶詰になってしまいました。誰か提案はありますか?私がやりたいのは、プラグインによって提供されるビューをオーバーライドすることだけです...

4

3 に答える 3

0

テンプレートの場所を変更する代わりに、プラグインソースを変更できます。

場所は次のとおりです。user_home\.grails\version\projects\project\plugins\plugin-name

于 2013-02-14T19:52:02.640 に答える
0

In order to change a view in a template of a plugin, perform the command

grails install-templates

source

This will copy the templates of the plugins to your project which you then can customize. What this does with for example the scaffolding plugin, is copy files to src/templates/scaffolding (note, not grails-app/templates/scaffolding). Therefore, in your case, I would try copying the files to src/views/filterpane

于 2015-10-04T15:07:58.917 に答える
0

私は grails の専門家ではありませんが、プラグイン ビューをオーバーライドするには、メイン プロジェクトのビュー フォルダーにプラグイン ビューを再作成する必要があります。たとえば、/auth/login.gspSpring Security Plugin から同じものを自分の/project/views/auth/login.gsp. プラグイン ファイル自体に変更を加えると、プラグインをアンインストールするとそれらが失われる可能性があります。

于 2014-10-29T21:56:27.807 に答える