2

皆さん、安心してください!私のシェアポイントページには、次のような選択肢を持つ選択肢フィールドがあります。

(1) Go
(2) Warning
(3) Stop

今、私はそれをテキストではなくアイコンとしてリストに表示したいと考えています。そのために機能するjqueryスクリプトがありますが、含まれているテキストのすべてのリストを検索するには時間がかかります.表示される前にレンダリングされるため、とにかくxslを使用することをお勧めします.

では、どうすればこれを xsl で実現できますか? 私はxslしか学んでいないので、これは私が得た限りです:

<xsl:stylesheet 
  xmlns:x="http://www.w3.org/2001/XMLSchema" 
  xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" 
  version="1.0" 
  exclude-result-prefixes="xsl msxsl ddwrt" 
  xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" 
  xmlns:asp="http://schemas.microsoft.com/ASPNET/20" 
  xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
  xmlns:SharePoint="Microsoft.SharePoint.WebControls" 
  xmlns:ddwrt2="urn:frontpage:internal">

    <!-- Convert the Scope Field into an icon -->
    <xsl:template match="FieldRef[@Name='Scope']">
        <xsl:param name="thisNode" select="."/>
        <xsl:choose>
            <xsl:when test="$thisNode/@Scope='(1) Go'">
                <td class="statusRating1"></td>
            </xsl:when>
            <xsl:when test="$thisNode/@Scope='(2) Warning'">
                <td class="statusRating2"></td>
            </xsl:when>
            <xsl:when test="$thisNode/@Scope='(3) Stop'">
                <td class="statusRating3"></td>
            </xsl:when> 
            <xsl:otherwise>
                <xsl:value-of select="$thisNode/@Scope" />
            </xsl:otherwise>                
        </xsl:choose>
    </xsl:template> 

 </xsl:stylesheet>

適用したいcssは次のとおりです。

.statusRating1{background-image: url("/_layouts/custom/images/go.png"); }
.statusRating2{background-image: url("/_layouts/custom/images/warning.png"); }
.statusRating3{background-image: url("/_layouts/custom/images/stop.png"); }

今、私はこれを使って、または使わずに試してみmode="Choice_body"ました . 列の名前は間違いなく「スコープ」です。たぶん、正しいモードを追加する必要がありますか?mode="MultiChoice_bodyText_body<xsl:apply-templates />

firebug では、クラスが追加されていないことがわかります。

[更新]この方法でテンプレートを使用した他の場所では、テンプレートが正しくmode定義されていない限り、テンプレートが「取得」されないことに気付きました。しかし、私は世界中をグーグルで検索しmodeましたが、選択フィールドに使用する権利が見つかりません。そのための質問もここで作成ました。また、 の使用は、フィールド タイプを非常に簡単に変更できるMicrosoft の例thisNodeからのものです (この選択フィールドの場合を除く)。

4

2 に答える 2

1

属性のテンプレートでSPFieldChoiceフィールドのカスタム レンダリングを定義するには、値の本文を使用する必要がありますmode

名前付きのモードのテンプレートChoice_body MultiChoice_bodyが定義されていません。

したがって、あなたの場合、テンプレートは次のようになります。

<xsl:template match="FieldRef[@Name='Scope']" mode="body">

SharePoint フィールドをレンダリングするために定義されたテンプレート モードの属性は文書化されていませんが、この情報は で見つけることができます%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL\fldtypes.xsl。詳細については、テンプレートPrintFieldの実装を参照してください。

お役に立てれば、

ヴァディム

于 2012-12-25T13:10:22.693 に答える
0

テンプレートを作成したという事実だけでは、このテンプレートが実行されるには十分ではありません

また、XSLT 組み込み (既定) テンプレートのコードによって実行用に選択された場合、これらのテンプレートは という名前$thisNodeのパラメーターを認識せず、そのようなパラメーターをテンプレートに渡しません。

これは$thisNode、テンプレートが開始されたときのパラメーターの値が空の文字列であることを意味します。xsl:whenしたがって、テスト条件が満たされていないため、xsl:otherwiseが選択されます。

解決策:

次のいずれか:

  1. xsl:apply-templatesテンプレートに一致するノードを選択する明示的なコードをコードに含めるか、次のようにします。

  2. を削除<xsl:param>し、コード内で出現するすべての を に置き換え$thisNodeます.

于 2012-12-15T04:18:15.617 に答える