简体   繁体   English

根据Umbraco中的标签生成内容

[英]Generating content based on tags in Umbraco

Umbraco, or rather xslt, seems to give me errors when I try to generate a list of content nodes based on a specific tag. 当我尝试根据特定标签生成内容节点列表时,Umbraco或xslt似乎给了我错误。

Consider the following code in a Macro: 在宏中考虑以下代码:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:tagsLib="urn:tagsLib"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon"     xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
exclude-result-prefixes="msxml tagsLib umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:variable name="location"  select="$currentPage/othertag" />

<xsl:template match="/">
<div class="more-news">
  <xsl:value-of select="$currentPage/location"/>
  <h4>More news from <span class="capitalize"><xsl:value-of select="$location"/></span></h4>
  <ul>
    <xsl:for-each select="tagsLib:getEverythingWithTags('somalia')/root/node">
      <li><a href="#"><xsl:value-of select="@nodeName"/></a></li>
      <xsl:value-of select="@nodeUrl"/>
    </xsl:for-each>
  </ul>
</div>
</xsl:template>

</xsl:stylesheet>

What I'm trying to do here is finding all the content with a tag (location) defined on the current page. 我在这里试图做的是找到在当前页面上定义的带有标签(位置)的所有内容。 The above setup will work fine for finding all pages with location-tag 'somalia'. 上面的设置可以很好地查找带有位置标签“ somalia”的所有页面。

The line: 该行:

<xsl:for-each select="tagsLib:getEverythingWithTags('somalia')/root/node">

should (I think) be: 应该 (我认为)是:

<xsl:for-each select="tagsLib:getEverythingWithTags($location)/root/node">

But saving the code like that gives me the following error: 但是保存这样的代码会给我以下错误:

umbraco.DataLayer.SqlHelperException: Umbraco Exception (DataLayer): SQL helper exception in ExecuteReader ---> System.Data.SqlClient.SqlException: Incorrect syntax near ')'. 
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 
at System.Data.SqlClient.SqlDataReader.get_MetaData() 
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) 
at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters) 
at umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader(String commandText, SqlParameter[] parameters) 
at umbraco.DataLayer.SqlHelper`1.ExecuteReader(String commandText, IParameter[] parameters) 
--- End of inner exception stack trace --- 
at umbraco.DataLayer.SqlHelper`1.ExecuteReader(String commandText, IParameter[] parameters) 
at umbraco.cms.businesslogic.Tags.Tag.GetNodesWithTags(String tags) 
at umbraco.editorControls.tags.library.getEverythingWithTags(String tags)

Any help and thoughts appreciated. 任何帮助和想法表示赞赏。

Hav you checked the content of "$currentPage/othertag" with this line code : 您是否已使用以下代码检查“ $ currentPage / othertag”的内容:

<xsl:value-of select="$currentPage/othertag" />

After that, you should put this code line in your xslt instead of your foreach loop : 之后,您应该将此代码行放入xslt而不是foreach循环中:

<xsl:value-of select="tagsLib:getEverythingWithTags($location)" />

and check the content of the tags. 并检查标签的内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM