質問&ディスカッション

Yousuke
参加者

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

モジュールでページフィールドを追加し、

そのページフィールドで選択したページが使用しているモジュールのフィールドを表示したいのですが、単純にモジュールを呼び出しても表示されません。

どのような記述なら表示できるかお知恵をお貸しください。

 

===

ページA(モジュールaを読み込ませる)

┗ ページB(モジュールbを読み込ませる)

┗ ページC(モジュールbを読み込ませる)

 

モジュール

┗ モジュールa

┗ モジュールb

===

 

●ページA

ページフィールドで下層ページのBとCを選択し、ページBとCで入力したテキストフィールドを表示させたい。

 

●ページB、C

ページAの下層ページ。

モジュールbにテキストフィールドを追加。

それぞれのページでテキストフィールドに入力。

 

●モジュールb

追加したテキストフィールドのスニペットのコピー

{% inline_text field="text_field" value="{{ module.text_field }}" %}

 

●モジュールaの中身

ページフィールドをリピーターオプションをOnにして追加。

 

{% for item in module.page_field %}
{% set content = content_by_id(item) %}
  <p>{% inline_text field="text_field" value="{{ module.text_field }}" %}</p>
{% endfor %}

 

これだと表示されないのでどのように記述すれば良いか知りたいです。

 

ちなみにモジュールaに下記

 

{{ content.widgets|pprint }}

 

を追加して取得しているものを元に

 

{% for item in module.page_field %}
{% set content = content_by_id(item) %}
  <p>{{ content.widgets.module_●●●●●.body.text_field }}</p>
{% endfor %}

 

(●の部分は14桁の数字)

このように書き換えたところで表示はされるものの、

その数字部分が変わると表示されなくなるので違う方法を探しています。

 

よろしくお願いします。

1件の承認済みベストアンサー
yskz_aoyama
解決策
投稿者

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

`export_to_template_context` は、テンプレート内にパラメータを露出させたい対象のモジュールに対して指定します。

 

今回の例だと、やりたいことは「ページ A のテンプレート内で、ページB,C が持っているモジュールbのパラメータを取得したい」になるので、 `export_to_template_context` はモジュールbに対してのみ指定すれば OK です。

 

それぞれ以下のように書くとやりたいことが実現できるかと思います。

 

モジュールa

 

{% for item in module.page_field %}
  {% set sub_page = content_by_id(item) %}
  <p>{% inline_text field="text_field" value="{{ sub_page.widgets.module_b.body.text_field }}" %}</p>
{% endfor %}

 

 

ページB,Cで利用するページテンプレート

 

{% module "module_b"
  path="../modules/module_b.module"
  label="module b"
  text_field="default text is here..."
  export_to_template_context=true
%}

 

 ※ module_b の部分は適宜読み替えてください。

 

元の投稿で解決策を見る

5件の返信
assi
ガイド役

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

@Yousuke 

出張中につき簡単な返答で申し訳ないのですが、こちらのドキュメントの `export_to_template_context` を利用すると実現できます!

https://developers.hubspot.jp/docs/cms/building-blocks/modules/export-to-template-context?_gl=1*1lls....

Yousuke
参加者

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

ありがとうございます!

参考のurlを試してみましたが意図した表示ができず。

下記のように記述しましたが間違ってましたでしょうか?

 

{% module "module_11111" path="/dentsu_direct/module/module1", label="module1", export_to_template_context=True %}
{% module "module_22222" path="/dentsu_direct/module/module2", label="module2", export_to_template_context=True %}
<ul>
  {% for item in widget_data.module_11111.field_page %}
  {% set content = content_by_id(item) %}
  <li>
    <time>{{ widget_data.module_22222.body.field_date | format_datetime('YYYY年MM月dd日', 'Asia/Tokyo', 'ja') }}</time>
    <p>{{ widget_data.module_22222.body.fields_text }}</p>
  </li>
  {% endfor %}
</ul>

 

このように試しまたがこれだとテンプレートにモジュールを読み込んでいるだけで、ページB,Cの内容は読み込めず内容を表示できませんでした。

 

下記のように単純にコピーできるスニペットのデフォルトを変更したものであれば表示はされました。

 

{% module "module_11111" path="/dentsu_direct/module/module1", label="module1", export_to_template_context=True %}
{% for item widget_data.module_11111.field_page %}
	{{ content_by_id(item) }}
{% endfor %}

 

 

やはりモジュールaで読み込むような記述になるのでしょうか?

よろしくお願いいたします。

0 いいね!
yskz_aoyama
解決策
投稿者

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

`export_to_template_context` は、テンプレート内にパラメータを露出させたい対象のモジュールに対して指定します。

 

今回の例だと、やりたいことは「ページ A のテンプレート内で、ページB,C が持っているモジュールbのパラメータを取得したい」になるので、 `export_to_template_context` はモジュールbに対してのみ指定すれば OK です。

 

それぞれ以下のように書くとやりたいことが実現できるかと思います。

 

モジュールa

 

{% for item in module.page_field %}
  {% set sub_page = content_by_id(item) %}
  <p>{% inline_text field="text_field" value="{{ sub_page.widgets.module_b.body.text_field }}" %}</p>
{% endfor %}

 

 

ページB,Cで利用するページテンプレート

 

{% module "module_b"
  path="../modules/module_b.module"
  label="module b"
  text_field="default text is here..."
  export_to_template_context=true
%}

 

 ※ module_b の部分は適宜読み替えてください。

 

Yousuke
参加者

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

ご教授ありがとうございます。

大変助かります!

 

違うモジュールのパラメータを取得するにはやはりモジュール名を指定することになるんですね。

意図した通りで表示されました。

@assi さん、@yskz_aoyama さん、お忙しい中ありがとうございました!

natsumimori
コミュニティーマネージャー
コミュニティーマネージャー

ページフィールドで選択したページ内にあるフィールドを表示したい

解決

@Yousuke さん、コミュニティーへの投稿ありがとうございます。

 

@assi @KMurota こちらいかがでしょう、何かアドバイスいただけることありそうでしょうか?