2

umbraco v 4.0.3 を実行しています。私の Web サーバーは Windows Server 2003 です。

ページの 1 つが、ホストされているコントロールのコンテンツに加えて、親ノードのコンテンツとともに表示されていることに気付きました。このページは ascx コントロールのホストとしてのみ機能するため、独自のコンテンツはありません。

ノードのコンテンツ領域が空なので、このコンテンツがどこから来ているのかわかりません。

問題を解決するために次のことを行いましたが、問題のページがまったく変更されることはありませんでした。ページは存続します。

  • ノードを再度公開しました。
  • 非公開ボタンをクリックして、ノードを公開しました。
  • ブラウザのキャッシュをクリアしました。
  • 複数のブラウザを使用しました。
  • Chrome でシークレット モードを使用しました。
  • ノードが基づいているテンプレートを変更したため、マクロの実行が妨げられるはずでしたが、そうではありませんでした。
  • ノードにコンテンツを追加しました。新しいコンテンツは表示されませんでした。
  • ノードの名前を変更しました。古い名前でページをリロードすると、まだそこにあります。
  • アプリケーションを再起動するために web.config に触れました。変化はありませんでした。
  • ウェブサイトを停止して開始しました。
  • サイトのトップ ノードを右クリックし、[再公開] を選択しました。
  • データ フォルダーの下にある umbraco.conf ファイルを手動で削除しました。
  • ノードも削除しました。

ページに移動したときに表示される内容は、何も変更しません。この時点で 404 が表示されるはずですが、ページはまだロードされており、マクロも実行されています。

この時点で、私は何をすべきか途方に暮れていますが、IIS または Dot.Net とキャッシュに関係があると推測しています。

これを修正する方法を知っている人はいますか?

編集

削除されたページが作成されたテンプレートから XSLT マクロ参照を削除すると、削除されたページがブラウザーに読み込まれたときに、親ページの重複がなくなることがわかりました。これが私の主な問題だったので、ページを作り直して続行しました。削除したページが複数のブラウザからロードできた理由について、私はまだ困惑しています。

私が削除したマクロは、私たちの Web サイトの 1,500 以上のページの大部分で使用されていますが、どのページでも親のドキュメントを子に再現することはできません。 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>
4

1 に答える 1

1

あなたのコメントを考えると、マクロが、xml ファイルや db ベースのセッションなど、アプリケーション/umbraco 構成から独立したストアにコンテンツを永続化する可能性があります。これにより、アプリケーションの再起動の外部でデータが保持されることは明らかです。もちろん、マクロのコードを確認する必要があります。

于 2012-11-30T09:05:35.437 に答える