2016-10-19 6 views
0

別のTwigファイルの内容となるダイアログボックスを作成したいとします。だから、jQueryのコールで、私が持っている:file.html.twigでJQueryの.html()呼び出しにTwigテンプレートを組み込み、新しい行を削除します。

$('<div></div>') 
    .html('{% include "folder/file.html.twig" %}') 
    .dialog({.... 

.htmlの呼び出しは、新しい行を許可していないとして、それが失敗した呼び出し.HTMLに置かれたときにそこに新しい行があり、そう。使用する方法があった場合は、私が使用している場合、しかし、仕事もすべて新しい行を取り除くために小枝から置き換える:それは外の(存在しない)任意の新しい行を置き換え

$('<div></div>') 
    .html('{% include "folder/file.html.twig"|replace({"\n":""}) %}') 
    .dialog({.... 

をレンダリングされたコンテンツではありません。

答えて

0

使用spacelessタグこれは次のようになりますため

$('<div></div>') 
    .html({% filter json_encode %}{% include "folder/file.html.twig" %}{% endfilter %}) 
    .dialog({.... 
0

$('<div></div>') 
.html(`{% include "folder/file.html.twig" %}`) 
.dialog({.... 

Template literals

+0

しかし、最近のいくつかのブラウザでは、それは、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Browser_compatibilityにアクセスすれば、そのページ上でのトリックになります私たちはIE、モバイルブラウザなどをサポートする必要があります。 – MicWit

0

まあ区切りバッククォート( `)を試してみてください、これは確かにはJavaScript内小枝のHTML出力をミキシングの問題を例示し、この非常に簡単になり、非常に迅速に、非常に厄介な - から言えば、経験。

それにもかかわらず、あなたは{{(コントローラ(レンダリング

すなわち純粋なPHPでより容易に)、レンダリングされたコントローラとして含まテンプレートを暴露することによってこれを回避あなたが対応 - >のgetContentを(調製することができるこの方法をハックすることができ「AppBundle:フォルダ:ファイル」))}}

.... 
Class Folder{ 
    .... 
    public function fileAction(){ 
     .... 
     $included_template_content = $this->renderView("folder/file.html.twig"); 
     // Process Content for javascript using php functions 
     return new Response($included_template_content); 
    } 
    .... 
} 
.... 

代わりに、あなたはあなたがこれをやって探索することができ、余分なサブリクエストを避けたい場合は小枝拡張

あなたが使用してフィルタを適用することができます
1

filter tag、パイプの代わりに。

$('<div></div>') 
    .html('{% filter replace({"\n":""})%}{% include "folder/file.html.twig" %}{% endfilter}') 
    .dialog({.... 

しかし代わりのではなく、単に引用符の間にそれを置くよりも、文字列にHTMLを有効にするjson_encode filterを使用し、交換してください。これにより、インクルードされたHTMLに引用符が含まれている場合の問題も防げます。

public function yourAction(Request $request) 
{ 
    $template = $request->isXmlHttpRequest() ? 'template_xhr.html.twig' : 'template.html.twig'; 

    return $this->render($template); 
} 

とAjax::

$.ajax({ url : 'url', success : function(data) { 
      $("#texte").html(data) 
    }) 
+0

これはhtmlタグにコードを取得しますが、残念ながらそれはありませんhtmlをレンダリングします。フォームのコードが代わりに表示されるように、HTMLの一部としてフォームがあります。このフィルタを新しい行などで実行する方法はありますか? – MicWit

+0

@MicWit最新の回答を見る –

0

あなたはユーザーAJAXをすることができます。これは、すべての空白を取り除きますので、あなたのコードとコンテンツは影響を受けませんが、それは1つのライン内のすべての表示がされます:

$('<div></div>') 
    .html('{% spaceless %}{% include "folder/file.html.twig" %}{% endspaceless %}') 
    .dialog({.... 

は、詳細はhttp://twig.sensiolabs.org/doc/tags/spaceless.htmlを参照してください。

関連する問題