"Не удалось получить информацию о типе из XML-схемы компонента" при загрузке страницы в SiteEdit 2009

Я включил встроенное редактирование в SitEdit 2009 SP2, используя ответ, приведенный здесь

Как включить редактирование встроенных полей в SiteEdit при использовании TBS XSLT?

но я продолжаю получать эту ошибку при загрузке получившейся страницы в SiteEdit:

Sys.FormatException: не удалось получить информацию о типе из XML-схемы компонента. Поле: cf_tcm:20-33457-64_content_header XPath: [1]

Мой фрагмент XSLT TBB:

<xsl:if test="//*[local-name()='content_header'] != ''">
    <h1>
        <div>
            <tcdl:ComponentField name="content_header" index="0">
                <xsl:value-of select="//*[local-name()='content_header']">
            </tcdl:ComponentField>
        </div>
    </h1>
</xsl:if>

Вывод в опубликованный файл:

<h1>
  <div>
    <span>
      <!-- Start SiteEdit Component Field: {"ID" : "cf_tcm:20-33457-64_content_header", "XPath" : "[1]", "IsMultiValued" : false} -->
      <tcdl:ComponentField name="content_header" index="0" SiteEditProcessed="true">
        Test
      </tcdl:ComponentField>
    </span>
  </div>
</h1>

Что не так с моим кодом?

1 ответ

Решение

Это сообщение об ошибке означает, что XPath в вашем <!-- Start SiteEdit Component Field: { ...} --> Команда не указывает на поле в текущем Компоненте. Учитывая, что ваш XPath отображается как [1]Это звучит довольно точно.

Вам нужно будет найти причину вывода пустого XPath. В вашем XSLT вы помечаете поле <tcdl:ComponentField> обертка. Эта обертка позже обрабатывается TBB "Включить встроенное редактирование" для генерации соответствующего <!-- Start SiteEdit Component Field ... --> команда. Поскольку внешнему интерфейсу SiteEdit требуется XPath для поля и tcdl:ComponentField содержит только имя поля, TBB должен будет искать XPath на основе имени поля.

TBB "Включить встроенное редактирование" из SiteEdit 2009 ищет текущий компонент при обработке tcdl:ComponentField глядя на текущий разрешенный элемент (engine.PublishingContext.ResolvedItem.Item.Id). Затем он ищет поле в этом Компоненте, чтобы определить его XPath.

Если вы посмотрите на пакет в построителе шаблонов, что такое Компонент внизу списка пакетов? Содержит ли этот компонент content_header поле?

Другие вопросы по тегам