XSLT と Symphony を使用してフォーラムを構築していますが、トピックの返信でメンバーのユーザー名の横に追加のメンバー データ (役割/ランク、アバターなど) を表示するのに問題があります。
では、2 つの XML ドキュメントを示してから、それらをどのように使用しているか、どこで問題が発生しているかを説明します。長く見えますが、全体像を明確にするためです。
トピックへの返信の XML は次のようになります。「Test Topic」というタイトルのトピックへの 2 つの返信を含む例。ここで重要な点は次のauthor/item
とおりです。
<topic-replies>
<section id="10" handle="topic-replies">Topic Replies</section>
<entry id="66">
<parent-forum>
<item id="7" handle="general" section-handle="forums" section-name="Forums">General</item>
</parent-forum>
<parent-topic>
<item id="62" handle="test-topic" section-handle="forum-topics" section-name="Forum Topics">Test Topic</item>
</parent-topic>
<body><p>Testing post...</p></body>
<date-added time="14:44" weekday="4">2012-05-03</date-added>
<author>
<item id="1" handle="admin" section-handle="members" section-name="Members">Admin</item>
</author>
</entry>
<entry id="67">
<parent-forum>
<item id="7" handle="general" section-handle="forums" section-name="Forums">General</item>
</parent-forum>
<parent-topic>
<item id="62" handle="test-topic" section-handle="forum-topics" section-name="Forum Topics">Test Topic</item>
</parent-topic>
<body><p>And here's a reply...?</p></body>
<date-added time="22:56" weekday="5">2012-05-04</date-added>
<author>
<item id="1" handle="test-user-1" section-handle="members" section-name="Members">Test User 1</item>
</author>
</entry>
</topic-replies>
これは、登録されたメンバーの XML です。
<user-list>
<section id="1" handle="members">Members</section>
<entry id="1">
<username handle="admin">Admin</username>
<email>admin@email.com</email>
<role id="2">
<name handle="administrator">Administrator</name>
</role>
</entry>
<entry id="2">
<username handle="test-user-1">Test User 1</username>
<email>test.user.1@email.com</email>
<role id="4">
<name handle="user">User</name>
</role>
</entry>
</user-list>
XML に基づいて XSLT をコーディングすると、作成topic-replies
者のユーザー名しか取得できません。さらにデータが必要な場合は、から取得する必要がありuser-list
ます。これは、これらの変数を考慮して、私が行う方法です。
<xsl:variable name="user-list" select="/data/user-list/entry"/>
<xsl:variable name="reply-author" select="/data/topic-replies/entry/author/item"/>
<xsl:template match="topic-replies/entry">
<ul class="profile">
<xsl:for-each select="$user-list">
<xsl:if test="username = $reply-author">
<li><a class="{role/name/@handle}" href="{$root}/user/{username/@handle}"><xsl:value-of select="username"/></a></li>
<li><xsl:value-of select="role/name"/></li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
指定された作成者のみを表示するのではなく、各返信でディスカッションに参加したすべての作成者を取得することを除いて、これは機能します。出力は次のとおりです。
Test Topic
Testing post...
Admin
Administrator
Re: Test Topic
And here's a reply...?
Admin
Administrator
Test Usuer 1
User
私の質問は、データをテンプレートから取得しuser-list
て挿入するにはどうすればよいですか?topic-replies
キーを使用する必要があるかもしれないと思っていますが、キーを使用するのは初めてで、その背後にあるロジックを本当に考えられません。今のところ、私は本当に手がかりがありません。
前もって感謝します。