V4.6.1 Getting all nodes that contain a specific value in a keywords field
Hi,
We're still on umbraco 4.6.1 but hoping you can still help. I'm sure there's already information out there on how to do this but I'm having trouble finding it.
I'm trying to create a XSLT file and macro that generates a menu of related pages on the right hand column of my site.
Within my umbraco document types i've created two fields.
Field 1: Unique Keyword (this give the page a unique name to add to Field 2 below)
Field 2: Send to pages (I add the unique keywords of related pages to this field)
Then I wanted to create an XSLT loop to list all the pages that contained the current pages unique keyword
So for example...
If the unique keyword of the current page is 'unicorn'
The the XSLT returns any page that contains 'unicorn' in the send to pages field.
I basically want to create a similar pages feature that inst restricted to the node hierarchy, collecting everything regardless of level.
If anyone could point me in the right direction that would be really helpful
As is usually the case, there's more than one way to implement such a feature.
Are you using the Unique Keyword for anything else (i.e., could you just use a page's ID in the Send to pages field)?
Anyways—here's a simple macro to help you get started:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umb="urn:umbraco.library"
exclude-result-prefixes="umb"
>
<xsl:param name="currentPage" />
<!-- Grab the "Home" node -->
<xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*[@level = 1]" />
<xsl:template match="/">
<!-- Grab all pages that have the current page's `uniqueKeyword` in their `sendToPages` property -->
<xsl:variable name="relatedPages" select="$siteRoot//*[@isDoc][umb:Split(sendToPages, ' ')/value = $currentPage/uniqueKeyword]" />
<section class="related">
<xsl:apply-templates select="$relatedPages" />
</section>
</xsl:template>
<!-- Template for a related page -->
<xsl:template match="*[@isDoc]">
<p>
<xsl:value-of select="@nodeName" />
</p>
</xsl:template>
</xsl:stylesheet>
Please note a couple of things:
uniqueKeyword and sendToPages are the aliases of the properties you've created - you may need to change these (case-sensitive, etc.)
I'm assuming you're just using a space between the keywords in the sendToPages property - if you're using commas or another character, you need to change that in the call to the Split() function.
This is great thanks for your help. So currentPage is a predefined parameter similar to umbracoNaviHide? I could see it being declared everywhere but I couldnt see it being set.
$currentPage is a special parameter that Umbraco supplies as context to a macro.
umbracoNaviHide is only a convention - but all of the predefined XSLT "templates" that you can start new macros off of, assume that you've used that alias for the property that determines if a page should be hidden in navigations.
V4.6.1 Getting all nodes that contain a specific value in a keywords field
Hi,
We're still on umbraco 4.6.1 but hoping you can still help. I'm sure there's already information out there on how to do this but I'm having trouble finding it.
I'm trying to create a XSLT file and macro that generates a menu of related pages on the right hand column of my site.
Within my umbraco document types i've created two fields.
Field 1: Unique Keyword (this give the page a unique name to add to Field 2 below)
Field 2: Send to pages (I add the unique keywords of related pages to this field)
Then I wanted to create an XSLT loop to list all the pages that contained the current pages unique keyword
So for example... If the unique keyword of the current page is 'unicorn' The the XSLT returns any page that contains 'unicorn' in the send to pages field.
I basically want to create a similar pages feature that inst restricted to the node hierarchy, collecting everything regardless of level.
If anyone could point me in the right direction that would be really helpful
Hi Andy,
As is usually the case, there's more than one way to implement such a feature.
Are you using the Unique Keyword for anything else (i.e., could you just use a page's ID in the Send to pages field)?
Anyways—here's a simple macro to help you get started:
Please note a couple of things:
sendToPages
property - if you're using commas or another character, you need to change that in the call to theSplit()
function.Hope that helps,
/Chriztian
This is great thanks for your help. So currentPage is a predefined parameter similar to umbracoNaviHide? I could see it being declared everywhere but I couldnt see it being set.
Thanks for your quick response!
Andy
Hi Andy,
Yes (and no :-)
$currentPage
is a special parameter that Umbraco supplies as context to a macro.umbracoNaviHide
is only a convention - but all of the predefined XSLT "templates" that you can start new macros off of, assume that you've used that alias for the property that determines if a page should be hidden in navigations./Chriztian
is working on a reply...