Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Lee 95 posts 115 karma points
    Dec 30, 2011 @ 15:14
    Lee
    0

    Navigate to an external webpage

    Hi

    I am trying to create a link that opens another webpage from my site.

    I have a navigationmenu that lists my nodes and if a user selects a particular menu item, it redirects to an external site rather than opening the node within my site.

     

    Could anyone help me here?

     

    Thanks

  • Stephen 204 posts 246 karma points
    Dec 30, 2011 @ 15:24
    Stephen
    0

    Are you trying to display the external site within your site in an IFRAME?

    S

  • Lee 95 posts 115 karma points
    Dec 30, 2011 @ 15:26
    Lee
    0

    No I want to actually go to the site.

    Does that make sense?

  • Stephen 204 posts 246 karma points
    Dec 30, 2011 @ 15:34
    Stephen
    0

    yes it does, if your menu is in XSLT then i would just manualy add the link...or if you want to be able to manage the link via the CMS then you could use a package. The built in redirect will only redirect you to an internal page but there are packages out there that will do what you want.

    This forum post also covers other methods...

    http://our.umbraco.org/forum/using/ui-questions/4258-Offsite-Redirect

    Hope this helps.

    S

  • Lee 95 posts 115 karma points
    Dec 30, 2011 @ 16:24
    Lee
    0

    I'm actually using Cogworks navigation.

    My item is on the top level and the node is called 'CPD'

     

    Could anyone give my some help on the 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"
      exclude-result-prefixes="msxml umbraco.library">

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

    <xsl:param name="currentPage" />

    <!--This sets the level that the nav starts at and tells us if we should recurse through child elements-->
    <xsl:variable name="startDepth" select="/macro/startingLevel" />
    <xsl:variable name="recurse" select="/macro/recurse" />
    <xsl:variable name="selectBranches" select="/macro/selectBranches"></xsl:variable>
    <xsl:variable name="maxMenuDepth" select="/macro/maxMenuDepth"></xsl:variable>
    <xsl:variable name="forceNode" select="/macro/forceNode"></xsl:variable>
    <xsl:variable name="walkChildren" select="/macro/expandChildren"></xsl:variable>
    <xsl:variable name="forceHome" select="/macro/forceHome"></xsl:variable>
    <xsl:variable name="securityTrimming" select="/macro/securityTrimming"></xsl:variable>
    <!--Alternate page title variable in here-->
     
    <!--Styles for the navigation-->
    <xsl:variable name="ulBaseClass" select="/macro/ulBaseClass"></xsl:variable>
    <xsl:variable name="branchClass" select="/macro/branchClass"></xsl:variable>
    <xsl:variable name="selectedClass" select="/macro/selectedClass"></xsl:variable>

    <xsl:variable name="startLevel">
      <xsl:choose>
        <xsl:when test="$startDepth >= 0">
          <xsl:value-of select="$startDepth"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$currentPage/@level"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

      <!--This calls first iteration of the navigation, sending the first node at the correct depth found in the ancestors of the current page-->
    <xsl:template match="/">
      <xsl:choose>
        <xsl:when test="$forceNode">
          <xsl:variable name="currentNode" select="umbraco.library:GetXmlNodeById($forceNode)"></xsl:variable>
          <xsl:call-template name="nodeIterator">
            <xsl:with-param name="parentNode" select="$currentNode/ancestor-or-self::*[@isDoc][@level=$startLevel]
                            [
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]" />
            <xsl:with-param name="pseudoCurrentPage" select="$currentNode" />
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:variable name="currentNode" select="$currentPage"></xsl:variable>
          <xsl:call-template name="nodeIterator">
            <xsl:with-param name="parentNode" select="$currentNode/ancestor-or-self::*[@isDoc][@level=$startLevel]
                            [
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]" />
            <xsl:with-param name="pseudoCurrentPage" select="$currentNode" />
          </xsl:call-template>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>

    <xsl:template name="nodeIterator">
        <xsl:param name="parentNode" />
        <xsl:param name="pseudoCurrentPage" />
        <!-- do not show info doc node types-->
      <xsl:variable name="calculatedMenuDepth" select="($parentNode/@level - $startLevel)+1" />

      <xsl:if test="$parentNode/*[@isDoc] or ($calculatedMenuDepth = 1 and $forceHome)">
        <ul>

          <xsl:attribute name="class">
            <xsl:choose>
              <xsl:when test="$calculatedMenuDepth = 1">
                <xsl:value-of select="concat($ulBaseClass, ' lv', $calculatedMenuDepth)" />
              </xsl:when>
              <xsl:when test="$calculatedMenuDepth > 1">
                <xsl:value-of select="concat('lv', $calculatedMenuDepth)" />
              </xsl:when>
            </xsl:choose>
          </xsl:attribute>

          <xsl:if test="$forceHome = 1 and $calculatedMenuDepth = 1">
            <!-- Create the class for the li element-->
            <li>
              <xsl:variable name="isHomeSelected">
                <xsl:choose>
                  <xsl:when test="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/@id = $currentPage/@id">1</xsl:when>
                </xsl:choose>
              </xsl:variable>

              <xsl:call-template name="cssClassConstructor">
                <xsl:with-param name="isSelected" select="$isHomeSelected" />
                <xsl:with-param name="isSelectedBranch" select="0" />
                <xsl:with-param name="hasChildren" select="1" />
                <xsl:with-param name="selectedClass" select="$selectedClass" />
                <xsl:with-param name="branchClass" select="$branchClass" />
              </xsl:call-template>

              <a href="{umbraco.library:NiceUrl($currentPage/ancestor-or-self::*[@isDoc][@level=1]/@id)}">

                <xsl:call-template name="cssClassConstructor">
                  <xsl:with-param name="isSelected" select="$isHomeSelected" />
                  <xsl:with-param name="isSelectedBranch" select="0" />
                  <xsl:with-param name="hasChildren" select="0" />
                  <xsl:with-param name="selectedClass" select="$selectedClass" />
                  <xsl:with-param name="branchClass" select="$branchClass" />
                </xsl:call-template>

                <!--set the innerText for the a element-->
                <xsl:value-of select="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/text()"/>

                <xsl:if test="string($currentPage/ancestor-or-self::*[@isDoc][@level=1]/text()) = ''">
                  <xsl:value-of select="$currentPage/ancestor-or-self::*[@isDoc][@level=1]/@nodeName"/>
                </xsl:if>
              </a>
            </li>
          </xsl:if>
          <!--End force home-->


          <!--for each node in the parent node that is not hidden by Umbraco-->
          <xsl:for-each select="$parentNode/*[@isDoc][
                              string(umbracoNaviHide) != '1'
                              and ($securityTrimming != '1'
                                or umbraco.library:IsProtected(@id, @path) = false()
                                or umbraco.library:HasAccess(@id, @path) = true())
                            ]">

            <!--Set the current node id i.e. the node we have looped to not the current page-->
            <xsl:variable name="currentNodeID" select="@id" />

            <!--Is the node a branch? i.e. are there children and is it in the colletion of ancestor nodes -->
            <xsl:variable name="isBranch">
              <xsl:choose>
                <xsl:when test="$currentPage/ancestor-or-self::*[@isDoc][@id = $currentNodeID]/child::*[@isDoc]">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <!--Is the node selected? i.e. is it the same as the currentPage node-->
            <xsl:variable name="isSelected">
              <xsl:choose>
                <xsl:when test="$currentPage/@id = $currentNodeID">1</xsl:when>
                <!-- parent selected -->
                <xsl:when test="$pseudoCurrentPage/@id = $currentNodeID">1</xsl:when>
               
              </xsl:choose>
            </xsl:variable>

            <xsl:variable name="isSelectedBranch">
              <xsl:choose>
                <xsl:when test="$isBranch = 1 and $selectBranches = 1">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <xsl:variable name="hasChildren">
              <xsl:choose>
                <xsl:when test="./*[@isDoc]">1</xsl:when>
              </xsl:choose>
            </xsl:variable>

            <li>

              <!-- Create the class attribute for the element-->
              <xsl:call-template name="cssClassConstructor">
                <xsl:with-param name="isSelected" select="$isSelected" />
                <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />
                <xsl:with-param name="hasChildren" select="$hasChildren" />
                <xsl:with-param name="selectedClass" select="$selectedClass" />
                <xsl:with-param name="branchClass" select="$branchClass" />
              </xsl:call-template>
             
              <xsl:variable name="url" select="redlizard"/>

    <a href="{umbraco.library:NiceUrl(@id)}">
     
                <xsl:call-template name="cssClassConstructor">
                  <xsl:with-param name="isSelected" select="$isSelected" />
                  <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />
                  <xsl:with-param name="hasChildren" select="0" />
                  <xsl:with-param name="selectedClass" select="$selectedClass" />
                  <xsl:with-param name="branchClass" select="$branchClass" />
                </xsl:call-template>

                <!--set the innerText for the a element-->
                <xsl:value-of select="./pageTitle/text()"/>
                <xsl:if test="string(./pageTitle/text()) = ''">
                  <xsl:value-of select="@nodeName"/>
                </xsl:if>
              </a>
     
              <!-- if it's a branch recurse through it's children-->
              <xsl:if test="((($isBranch = 1 and $recurse = 1) or ($walkChildren = 1 and $pseudoCurrentPage/descendant-or-self::*[@isDoc][@id = $currentNodeID]/child::*[@isDoc])) and $maxMenuDepth &gt; $calculatedMenuDepth)">
                <xsl:call-template name="nodeIterator">
                  <xsl:with-param name="parentNode" select="." />
                  <xsl:with-param name="pseudoCurrentPage" select="$pseudoCurrentPage" />
                </xsl:call-template>
              </xsl:if>

            </li>

          </xsl:for-each>

        </ul>
      </xsl:if>
      </xsl:template>
     
      <xsl:template name="cssClassConstructor">
        <xsl:param name="isSelected"></xsl:param>
        <xsl:param name="isSelectedBranch"></xsl:param>
        <xsl:param name="hasChildren"></xsl:param>
        <xsl:param name="selectedClass"></xsl:param>
        <xsl:param name="branchClass"></xsl:param>

        <xsl:variable name="class">
          <xsl:if test="$isSelected = 1">
            <xsl:value-of select="concat($selectedClass,' ')"/>
          </xsl:if>
          <xsl:if test="$isSelectedBranch = 1">
            <xsl:value-of select="concat($branchClass,' ')"/>
          </xsl:if>
          <xsl:if test="$hasChildren = 1">
            <xsl:value-of select="'hasChildren '"/>
          </xsl:if>
        </xsl:variable>

        <xsl:if test="string-length($class) > 0">
          <xsl:attribute name="class">
            <xsl:value-of select="normalize-space($class)"/>
          </xsl:attribute>
        </xsl:if>
       
      </xsl:template>
    </xsl:stylesheet>

  • Rich Green 2246 posts 4008 karma points
    Dec 30, 2011 @ 18:12
    Rich Green
    0

    Hi,

    You need to add another field to the doc type that you want to link externally (for example one called externalURL)

    Then change this bit of code:

    <a href="{umbraco.library:NiceUrl(@id)}">

      

                <xsl:call-template name="cssClassConstructor">

                  <xsl:with-param name="isSelected" select="$isSelected" />

                  <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />

                  <xsl:with-param name="hasChildren" select="0" />

                  <xsl:with-param name="selectedClass" select="$selectedClass" />

                  <xsl:with-param name="branchClass" select="$branchClass" />

                </xsl:call-template>

     

                <!--set the innerText for the a element-->

                <xsl:value-of select="./pageTitle/text()"/>

                <xsl:if test="string(./pageTitle/text()) = ''">

                  <xsl:value-of select="@nodeName"/>

                </xsl:if>

              </a>

     

     

    To:

     

    <a>

    <xsl:attribute name="href">

           <xsl:choose>

    <xsl:when test="externalURL !=''">

    <xsl:value-of select="externalURL"/>

    </xsl:when>

    <xsl:otherwise>

    <xsl:value-of select="umbraco.library:NiceUrl(@id)"/>

    </xsl:otherwise>

    </xsl:choose>

     

    </xsl:attribute>

     

                <xsl:call-template name="cssClassConstructor">

                  <xsl:with-param name="isSelected" select="$isSelected" />

                  <xsl:with-param name="isSelectedBranch" select="$isSelectedBranch" />

                  <xsl:with-param name="hasChildren" select="0" />

                  <xsl:with-param name="selectedClass" select="$selectedClass" />

                  <xsl:with-param name="branchClass" select="$branchClass" />

                </xsl:call-template>

     

                <!--set the innerText for the a element-->

                <xsl:value-of select="./pageTitle/text()"/>

                <xsl:if test="string(./pageTitle/text()) = ''">

                  <xsl:value-of select="@nodeName"/>

                </xsl:if>

              </a>

     

     

    Rich

  • Lee 95 posts 115 karma points
    Dec 30, 2011 @ 19:51
    Lee
    0

    Thanks Rich... i'll give that a try

  • Martin Rud 260 posts 1001 karma points c-trib
    Dec 31, 2011 @ 00:31
    Martin Rud
    0

    Hi Lee,

    I suggest the exact same approach as Rich did. But I would add that you should create a separate document type for the purpose: An "External link" document type with only one field: "externalURL"

    With this you avoid having nodes in the backend with at lot of fields that editors can fill out with no purpose (since the node will never be presented as a page by Umbraco since it´s just a link to an external page).

    /Martin

Please Sign in or register to post replies

Write your reply to:

Draft