Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > masterpage для шаблона xslt


Автор: lankin 7.12.2009, 08:34
Собственно сабж. 

Нужно считать внешний шаблон и в виде переменной или шаблона использовать. Чтоб каждый раз в новом шаблоне не писать одно и то же.

Автор: diadiavova 7.12.2009, 09:58
Элементы import и include.

Автор: lankin 7.12.2009, 10:37
Да да, include и import. Спасибо.

Автор: lankin 7.12.2009, 14:19
вот такой внешний xslt:
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

  <xsl:param name="login_link"/>
  
  <xsl:template name="header" match="/">
    <table cellspacing="0" cellpadding="3" border="0" width="100%" class="n_w100 n_t16 p0 n_border0">
      <tr valign="top" bgcolor="#0055C2" class="n_vti">
        <td align="right" class="n_tar p3">
          <xsl:element name="a">
            <xsl:attribute name="href">
              <xsl:value-of select="$login_link"/>
            </xsl:attribute>
            <xsl:attribute name="class">
              n_tdu n_w
            </xsl:attribute>
            <xsl:element name="font">
              <xsl:attribute name="color">
                #ffffff
              </xsl:attribute>
              <xsl:attribute name="size">
                2
              </xsl:attribute>
              Управление профилем
            </xsl:element>
          </xsl:element>
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>


он вызывается в основном шаблоне вот так:
Код

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="LoginLink"/>

<xsl:include href="file:///F:/Working Projects/XSLTTemplates/Master_Header.xslt"/>

<xsl:template match="/">
<xsl:element name="div">
  <xsl:call-template name="header">
    <xsl:with-param name="login_link" select="$LoginLink" />
  </xsl:call-template>
</xsl:element>
</xsl:template>
</xsl:stylesheet>



Когда вызываю шаблон - передаю LoginLink, но почему то в итоге все равно он у меня пустой.  Может когда подключаются внешние шаблоны include-ом, то в них нельзя передать переменную? что-то с областью видимости?

Автор: diadiavova 7.12.2009, 14:40
Если ты вызываешь шаблон header и пытаешься ему передать параметр, то этот параметр надо засунуть вовнутрь вызываемого шаблона
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

  
  <xsl:template name="header" match="/">
  <xsl:param name="login_link"/>
    <table cellspacing="0" cellpadding="3" border="0" width="100%" class="n_w100 n_t16 p0 n_border0">
      <tr valign="top" bgcolor="#0055C2" class="n_vti">
        <td align="right" class="n_tar p3">
          <xsl:element name="a">
            <xsl:attribute name="href">
              <xsl:value-of select="$login_link"/>
            </xsl:attribute>
            <xsl:attribute name="class">
              n_tdu n_w
            </xsl:attribute>
            <xsl:element name="font">
              <xsl:attribute name="color">
                #ffffff
              </xsl:attribute>
              <xsl:attribute name="size">
                2
              </xsl:attribute>
              Управление профилем
            </xsl:element>
          </xsl:element>
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>

Автор: lankin 7.12.2009, 15:01
Работает!!!! Огромное спасибо, дядя вова. Получается, что это просто кусок от <template> до </template> вставляется из внешнего шаблона в основной. Потому  и не было у меня там даже намека на параметр. Ясно, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)