2

Dreamweaver TBB を作成しようとしていますが、別のテンプレート レベルでフィールド値を取得する必要がある時点で行き詰まっています。

以下は、formField レベルに存在する inputType フィールドを入力テンプレート レベルに取得する必要がある XML です。

<formField>
    <divClassName>fieldClassName</divClassName>
    <label>Please enter your Name</label>
    <labelId>labelNameId</labelId>
    <inputType>text</inputType>
    <input>
        <inputName>sam</inputName>
        <inputId>ssss</inputId>
        <inputSize>40</inputSize>
        <inputLabel>xxx</inputLabel>
        <inputValue>zzz</inputValue>
    </input>
    <input>
        <inputName>gf</inputName>
        <inputId>g</inputId>
        <inputSize>fdg</inputSize>
        <inputLabel>sg</inputLabel>
        <inputValue>gsdfg</inputValue>
    </input>
    <param1>ssss</param1>
    <param2>ssss</param2>
</formField>

同じレベルで値を取得するには、使用できます

<!-- TemplateBeginRepeat name="Component.Fields.formField" -->
    @@inputType@@
<!-- TemplateEndRepeat -->

しかし、私の要件は、入力テンプレートレベルでinputValueを取得することです

<!-- TemplateBeginRepeat name="input" -->
    @@inputType@@
<!-- TemplateEndRepeat -->

入力テンプレート レベルに存在する inputType がないため、このコードは返されません。だから私は使用しようとしました:

<!-- TemplateBeginRepeat name="input" -->
    @@RenderComponentField("formField[0].inputType",0)@@
<!-- TemplateEndRepeat -->

RenderComponentField を使用すると、出力が次のようになる 2 つの問題があります。

<tcdl:ComponentField name="formField[0].inputType" index="0">
    text
</tcdl:ComponentField>

私が必要としないtcdlタグと一緒に値を返します。

次に、インデックスが 0 を直接与える代わりに、 を使用する必要がありますが、使用TemplateRepeatIndexするとエラーが発生します@@RenderComponentField("formField[TemplateRepeatIndex].inputType",0)@@

では、別のテンプレート レベルでフィールド値を取得したい場合、どうすればこれを実現できますか。

4

3 に答える 3

2

あなたが発見したように、標準の DWT 関数を使用して「内側」ループから「外側」 TemplateRepeatIndex にアクセスすることはできません。

これを解決するにはいくつかの方法があります。おそらく最も簡単な方法は、コンテキスト変数を使用して値を格納および取得するカスタムの Dreamweaver 呼び出し可能関数を作成することです。

このアプローチについては、DWT での変数の取得と設定 | で、付属のソース コードとともに詳しく説明されています。SDL Tridion開発者

于 2013-02-06T14:03:42.940 に答える
1

あなたの質問は少しわかりにくいですが、2 つの問題があるようです

  1. 不要な余分な<tcdl:ComponentField/>タグがあります
  2. 使うとエラーになるTemplateRepeatIndex

それが正しくない場合は、質問を変更することを検討してください。

問題番号 1 については<tcdl:ComponentField/>、Template Builder で が表示されていると思いますか? それとも、最終的に公開されたページでこれを見ていますか? このタグは@@RenderComponentField@@関数によって出力に追加され、TridionUI マークアップの SiteEdit を出力に追加できるようにします。テンプレートの最後に「デフォルトの終了アクション」TBB を適用すると、公開されたページに表示されません。デフォルトのテンプレートには、SiteEdit/UI マークアップが適用された後にこのタグをクリーンアップするコードが含まれています。

2 番目の問題については、「SDL Tridion 2011 SP1の Dreamweaver TBB でネストされた繰り返し領域を処理する方法」および「http://www.tridiondeveloper.com/get-and-set-variables-in-dwts 」の投稿をご覧ください。 '。

ネスト/埋め込みフィールドは、Dreamweaver のデフォルトの Tridion 構文を使用すると混乱を招く可能性があるため、Nuno Linharesの優れたGetExtensionの使用を検討してください。これにより、あなたの人生はずっと楽になります

于 2013-02-06T10:20:10.553 に答える
1

TemplateRepeatIndex では、以下のように $ 記号を使用する必要があります

@@RenderComponentField("formField[${TemplateRepeatIndex}].inputType",0)@@

動作しない場合はお知らせください

于 2013-02-06T07:40:04.483 に答える