フラグメントのhtml/freemarkerコードでドロップダウンオプションのフィールドリファレンスを取得する方法は?

問題

  • ステップ を再現しています:
    0. システム設定/Freemarker Engineで、制限された変数のリストからserviceLocatorを削除します。 (後でフラグメントコードで使えるように)
    1. Webコンテンツ構造を作成し、そこにSelect From Listフィールドを設置する。
    2. このフィールドにoption1、option2の2つのオプションを追加します。
    3. option2については、自動生成されたField Referenceをダブルクリックし、optref2
    4のように変更する。 詳細タブで「複数選択を許可」を有効にします(これは、自動生成されたフィールド参照に触れないオプションと、手動で変更したオプションの2種類の動作の違いを後で確認できるようにするためです)。 構造体を保存します。
    5. この構造の新しいウェブコンテンツを作成し、フィールドの両方のオプションにチェックを入れます。 発行する。
    6. サイトID(サイトのgroupid)とウェブコンテンツの記事のarticleId(journalarticleテーブル)を取得します:この後のhtml/freemarkerフラグメントコードで使用されます。
    7. デザイン/フラグメントに移動し、新しいフラグメントセットを作成した後、新しい基本フラグメントを作成し始めます。
    HTMLボックスに、次のようなコードを貼り付けます:

    <div class="fragment_1">
    	 [#assign srv = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")]
       [#assign article = srv.getArticle(20121,"44153")]
       [#assign document = saxReaderUtil.read(article.getContent())]
       [#assign rootElement = document.getRootElement()]
    	 
    	 [#list rootElement.elements() as dynamicElement ]
    	   [#if dynamicElement.attributeValue("name") == "Select23481751"]
    	      [#assign selection = dynamicElement.element("dynamic-content").getStringValue()]
    	      ${selection}
    	   [/#if]
    	 [/#list]
    </div>
    

    ここで
    20121 は groupid
    "44153" は articleid
    Select23481751 は step1 で作成したドロップダウンフィールドの自動生成フィールド参照(Advanced タブで確認できます)
    これらの値はテスト環境では異なる場合があります。

    結果: 右側の下のボックスに表示されます(スクリーンショットも添付します)。

    Option44203449 Option62081055

    (したがって、2番目のオプションでは、ステップ3で変更したフィールド参照ではなく、最初に自動生成されたフィールド参照が表示されます: optref2)

    期待される の結果:表示されるはずです。

    オプション44203449オプトレフ2

Environment

  • DXP 7.4

解決策

  • 記事からのDDMStructureは、DMFormFieldOptionsにアクセスするために使用されるべきである。

    以下は、適切なフラグメントhtmlコードの例である:

    <div class="fragment_1"> 
    [#assign srv = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")]
    [#assign article = srv.getArticle(20119,"44810")]
    [#assign document = saxReaderUtil.read(article.getContent())]
    [#assign rootElement = document.getRootElement()]
    [#assign ddmStructure = article.getDDMStructure()]

    [#list rootElement.elements() as dynamicElement ]
    [#if dynamicElement.attributeValue("field-reference") == "Select55199703"]
    [#assign ddmFormField = ddmStructure.getDDMFormField("Select55199703") /]
    [#assign ddmFormFieldOptions = ddmFormField.getDDMFormFieldOptions() /]
    [#assign optionsReferences = ddmFormFieldOptions.getOptionsReferences() /]

    [#assign selections = dynamicElement.element("dynamic-content").getStringValue()?word_list]
    [#list selections as optionValue]
    ${"option value:"} ${optionValue} <br>
    ${"option reference:"} ${optionsReferences[optionValue]}<br><br>
    [/#list]
    [/#if]
    [/#list]
    </div>

    この例では、レスポンスは次のようになります:
    option value: Option56521562
    option reference: Option56521562

    option value: Option70933281
    option reference: optref2

この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています