2012-02-01 9 views
1

#{aテンプレートタグを組み込みました。たとえば、代わりに毎回書く:Playを延長する方法!フレームワークテンプレートタグ

parameter="This Is a Test"ならば、生成された hrefは、パラメータは常に明示的にそれをすることなしに、デフォルトでslugifiedされるように、私はそれを拡張したいと思います http://localhost/controller/action/this-is-a-test

ある

#{a @Controller.Action(parameter.slugify()) /} 

.slugify()

ありがとうございました

答えて

3

あなたがしたいのは、自分の高速タグを定義することです。良い例はhereです。 この回答をwellと確認してください。

コードは、おそらく次のようになります。

@FastTags.Namespace("mytags") 
public class MyTags extends play.templates.FastTags{ 


    public static void _a(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { 
     ActionDefinition actionDef = (ActionDefinition) args.get("arg"); 
     if (actionDef == null) { 
      actionDef = (ActionDefinition) args.get("action"); 
     } 
     if (!("GET".equals(actionDef.method))) { 
      if (!("POST".equals(actionDef.method))) { 
       String separator = actionDef.url.indexOf('?') != -1 ? "&" : "?"; 
       actionDef.url += separator + "x-http-method-override=" + actionDef.method; 
       actionDef.method = "POST"; 
      } 
      String id = Codec.UUID(); 
      out.print("<form method=\"POST\" id=\"" + id + "\" " +(args.containsKey("target") ? "target=\"" + args.get("target") + "\"" : "")+ " style=\"display:none\" action=\"" + actionDef.url + "\">"); 
      _authenticityToken(args, body, out, template, fromLine); 
      out.print("</form>"); 
      out.print("<a href=\"javascript:document.getElementById('" + id + "').submit();\" " + serialize(args, "href") + ">"); 
      out.print(JavaExtensions.toString(body)); 
      out.print("</a>"); 
     } else { 
      out.print("<a href=\"" + actionDef.url + "\" " + JavaExtensions.slugify(serialize(args, "href")) + ">"); 
      out.print(JavaExtensions.toString(body)); 
      out.print("</a>"); 
     } 
    } 
} 

とあなたのテンプレートで次のように呼び出すこと:

#{mytags.a @Controller.Action(parameter) /} 
関連する問題