несколько сайтов на одном зонтике, требуется макрос xslt? - PullRequest
1 голос
/ 13 января 2012

Я очень новичок в Umbraco и не делал xslt или javascripting. У меня есть несколько веб-сайтов, для которых я могу предоставить CMS. Основное содержание одинаковое, однако баннеры будут другими. Чтобы решить эту проблему, я хотел бы запустить некоторый макрос или код для получения доменного имени веб-сайта и на основе этого доменного имени вызвать соответствующий баннер в шаблоне Umbraco для отображения. Пожалуйста, дайте мне знать, если это возможно и как это сделать. Если это невозможно, то как правильно это сделать.

С уважением Brainbox

1 Ответ

2 голосов
/ 15 января 2012

Есть несколько способов сделать это.


Если сайты используют разные шаблоны, но один и тот же макрос (метод 0):

Добавьте параметр в макрос (в разделе для разработчиков), затем обновите код соответствующим образом.

Шаблон:

<umbraco:Macro Alias="MyMacro" runat="server" MyParam="Hello, world" />

XSLT:

<xsl:value-of select="/macro/MyParam" />


Если сайты используют одинаковый шаблон и макрос (метод 1):

Вы можете использовать библиотеку umbraco для получения имени хоста и выполнения другого кода на основе этого. Создайте узел в разделе контента для каждого из различных сайтов и загрузите туда баннеры, а затем укажите их в XSLT через соответствующие им идентификаторы узлов

XSLT:

<!-- this gets the domain name -->
<xsl:variable name="domainName">
    <xsl:value-of select="umbraco.library:RequestServerVariables('HTTP_HOST')" />
</xsl:variable>

<!-- determine which banner to show -->
<xsl:choose>
    <xsl:when test="$domainName = 'www.websiteone.com'">

        <!-- get the node for website one -->
        <xsl:variable name="websiteOneHeaderNodeId" select="1001" />
        <xsl:variable name="websiteOneHeaderNode" select="umbraco.library:GetXmlNodeById($websiteOneHeaderNodeId)" />

        <!-- display the banner for website one -->
        <img src="{$websiteOneHeaderNode/banner}" />

    </xsl:when>
    <xsl:when test="$domainName = 'www.websitetwo.com'">

        <!-- get the node for website two -->
        <xsl:variable name="websiteTwoHeaderNodeId" select="1002" />
        <xsl:variable name="websiteTwoHeaderNode" select="umbraco.library:GetXmlNodeById($websiteTwoHeaderNodeId)" />

        <!-- display the banner for website two -->
        <img src="{$websiteTwoHeaderNode/banner}" />    

    </xsl:when>
    <xsl:otherwise>

        <!-- display the default banner -->
        <img src="/media/1001/defaultBanner.jpg" />

    </xsl:otherwise>
</xsl:choose>


Если сайты используют один и тот же шаблон и макрос (метод 2):

Этот способ немного чище и использует то, для чего подходит Umbraco. Я бы порекомендовал добавить свойство к типу документа, который представляет корневой узел каждого из сайтов. Допустим, псевдоним этого типа документа равен Site, а псевдоним свойства - bannerUrl. Затем вы можете загрузить свой баннер на каждый узел содержимого Site и затем получить к нему доступ в XSLT. В зависимости от того, какую страницу пользователь просматривает в данный момент, даже подстраницы с различными типами документов (и при условии, что в нем есть ваш макрос), следующий XSLT найдет соответствующий bannerUrl в зависимости от того, под каким Site узлом он находится.

XSLT:

<xsl:value-of select="$currentPage/ancestor-or-self::Site/bannerUrl" />
...