How to Embed Asynchronous Content with hinclude.js

Embedding controllers in templates is one of the ways to reuse contents across multiple templates. To further improve performance you can use the hinclude.js JavaScript library to embed controllers asynchronously.

テンプレートにコントローラーを埋め込むことは、複数のテンプレートでコンテンツを再利用する方法の 1 つです。パフォーマンスをさらに向上させるために、hinclude.js JavaScript ライブラリを使用してコントローラーを非同期的に埋め込むことができます。

First, include the hinclude.js library in your page linking to it from the template or adding it to your application JavaScript using Webpack Encore.

最初に、テンプレートから hinclude.js ライブラリにリンクするか、Webpack Encore を使用してアプリケーションの JavaScript に追加して、hinclude.js ライブラリをページに含めます。

As the embedded content comes from another page (or controller for that matter), Symfony uses a version of the standard render() function to configure hinclude tags in templates:

埋め込みコンテンツが別のページ (またはコントローラー) から取得されるため、Symfony は標準の render() 関数のバージョンを使用して、テンプレートにタグを含めるように構成します。
1
2
{{ render_hinclude(controller('...')) }}
{{ render_hinclude(url('...')) }}

Note

ノート

When using the controller() function, you must also configure the fragments path option.

controller() 関数を使用する場合は、fragments パス オプションも構成する必要があります。

When JavaScript is disabled or it takes a long time to load you can display a default content rendering some template:

JavaScript が無効になっている場合、または読み込みに時間がかかる場合は、テンプレートをレンダリングするデフォルトのコンテンツを表示できます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
# config/packages/framework.yaml
framework:
    # ...
    fragments:
        hinclude_default_template: hinclude.html.twig

You can define default templates per render() function (which will override any global default template that is defined):

render() 関数ごとにデフォルト テンプレートを定義できます (定義されているグローバル デフォルト テンプレートをオーバーライドします)。
1
2
3
{{ render_hinclude(controller('...'),  {
    default: 'default/content.html.twig'
}) }}

Or you can also specify a string to display as the default content:

または、デフォルトのコンテンツとして表示する文字列を指定することもできます:
1
{{ render_hinclude(controller('...'), {default: 'Loading...'}) }}

Use the attributes option to define the value of hinclude.js options:

attributes オプションを使用して、hinclude.js オプションの値を定義します。
1
2
3
4
5
6
7
{# by default, cross-site requests don't use credentials such as cookies, authorization
   headers or TLS client certificates; set this option to 'true' to use them #}
{{ render_hinclude(controller('...'), {attributes: {'data-with-credentials': 'true'}}) }}

{# by default, the JavaScript code included in the loaded contents is not run;
   set this option to 'true' to run that JavaScript code #}
{{ render_hinclude(controller('...'), {attributes: {evaljs: 'true'}}) }}