繁体   English   中英

奇怪的内容和已删除的页面仍然可以在Umbraco中查看

[英]Strange Content and Deleted page is still viewable in Umbraco

我正在运行umbraco v 4.0.3。 我的Web服务器是Windows Server 2003。

我注意到,除了其中托管的控件之外,还显示了我的其中一个页面以及来自父节点的内容。 由于该页面仅充当ascx控件的宿主,因此它没有自己的内容。

节点的内容区域为空,所以我不知道该内容的来源。

我已经做了以下尝试来解决问题的方法,但是这些都没有导致问题页面发生变化。 该页面仍然存在。

  • 我再次发布了该节点。
  • 我单击了“取消发布”按钮,然后发布了该节点。
  • 我已经清除了浏览器缓存。
  • 我使用了多个浏览器。
  • 我在Chrome上使用了隐身模式。
  • 我已经更改了节点所基于的模板,这应该阻止了宏的运行,但实际上并没有。
  • 我已将内容添加到节点。 新内容未显示。
  • 我已经更改了节点的名称。 当我以旧名称重新加载页面时,它仍然存在。
  • 我触摸过web.config以重新启动应用程序。 没有变化。
  • 我已经停止并启动了该网站。
  • 我右键单击该网站的顶部节点,然后选择“重新发布”
  • 我已经手动删除了数据文件夹下的umbraco.conf文件。
  • 我什至删除了该节点。

导航到页面时,我没有做任何更改 在这一点上,我应该得到一个404,但是页面仍然加载并仍然运行宏。

在这一点上,我不知所措,但是我猜想它与IIS或Dot.Net和缓存有关。

有人知道如何解决此问题吗?

编辑

我发现,如果我从构建删除页面的模板上删除了XSLT宏引用,则当在浏览器中加载删除页面时,父页面的复制就会消失。 由于这是我的主要问题,因此我重新创建了页面并继续。 我仍然困惑为什么删除的页面能够从多个浏览器加载。

我删除的宏用于我们网站的1,500多个页面中的绝大部分,并且在这些页面上都没有复制该宏在孩子身上的文档,在看来XSLT宏也无法到达该宏之外。 XML缓存。 我已经查看了代码,但没有看到对其他数据存储的任何引用。 我承认XSLT对我来说还是很新的。

下面列出了我删除了其引用的宏的代码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:umbraco.library="urn:umbraco.library"
  xmlns:custom="urn:custom.library"
  exclude-result-prefixes="msxml umbraco.library custom">


<xsl:output method="xml" omit-xml-declaration="yes"/>

<msxml:script language="C#" implements-prefix="custom">

  public System.Xml.XPath.XPathNodeIterator SplitMultiPageText(string unsplitText, 
                                                               string pageDelimeter) {
    System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
    string[] splitPages = System.Text.RegularExpressions.Regex.Split(unsplitText, pageDelimeter);

    System.Xml.XmlElement pagesElement = xmlDoc.CreateElement("pages");

    foreach (string page in splitPages) {
      System.Xml.XmlElement pageElement = xmlDoc.CreateElement("page");
      pageElement.AppendChild(xmlDoc.CreateCDataSection(page));
      pagesElement.AppendChild(pageElement);
    }

    return pagesElement.CreateNavigator().Select(".");
  }

</msxml:script>

<xsl:param name="currentPage"/>

<xsl:variable name="content" select="/macro/content" />
<xsl:variable name="pageNumber" select="/macro/pageNumber" />
<xsl:variable name="joinContent">
  <xsl:choose>
    <xsl:when test="/macro/joinContent = ''">
      <xsl:value-of select="boolean(false)" />
    </xsl:when>
    <xsl:otherwise><xsl:value-of select="/macro/joinContent" /></xsl:otherwise>
  </xsl:choose>
</xsl:variable>

<xsl:variable name="splitExpr">&lt;hr class=&quot;pagebreak&quot; /&gt;</xsl:variable>

<xsl:template match="/">

  <xsl:variable name="pages" select="custom:SplitMultiPageText($content, $splitExpr)" />
  <xsl:variable name="pageCount" select="count($pages/page)" />

  <xsl:choose>
    <xsl:when test="$pageCount = 1 or string($joinContent) = 'true'">


      <xsl:for-each select="$pages/page">
        <xsl:value-of
          select="umbraco.library:RenderMacroContent(., $currentPage/@id)"
          disable-output-escaping="yes" />
      </xsl:for-each>

    </xsl:when>
    <xsl:otherwise>
      <p class="multiPageNotice">This document is split among multiple pages. To view
      the other pages, use the <strong>page selector</strong> near the bottom of the screen.</p>
      <xsl:for-each select="$pages/page">
        <xsl:if test="position() = $pageNumber or ( $pageNumber = '' and position() = 1 )">
          <xsl:value-of
            select="umbraco.library:RenderMacroContent(., $currentPage/@id)"
            disable-output-escaping="yes" />
        </xsl:if>
      </xsl:for-each>
    </xsl:otherwise>
  </xsl:choose>


  <xsl:if test="$pageCount &gt; 1 and string($joinContent) != 'true'">
    <div class="pageSelector">
      <p>Page: </p>
      <ul>
        <xsl:for-each select="$pages/page">
          <li>
            <xsl:choose>
              <xsl:when test="position() = $pageNumber or ( $pageNumber = '' and position() = 1 )">
                <xsl:value-of select="position()" />
              </xsl:when>
              <xsl:otherwise>
                <a href="{umbraco.library:NiceUrl($currentPage/@id)}/page/{position()}">
                  <xsl:value-of select="position()" />
                </a>
              </xsl:otherwise>
            </xsl:choose>
          </li>
        </xsl:for-each>
      </ul>
    </div>
  </xsl:if>

</xsl:template>

</xsl:stylesheet>

根据您的评论,宏可能会将内容持久保存到与应用程序/ umbraco配置无关的存储中,例如xml文件或基于db的会话。 显然,这将在应用程序重新启动之外保留数据。 显然,我们将不得不看到宏的代码。

暂无
暂无

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

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