[daisy] Get complete navigation Tree
Sieranski, Greg
greg.sieranski at quoininc.com
Wed May 7 20:22:49 CEST 2008
I was able to take all of this and get everything running perfectly! I
was wondering if you had any thoughts on how I could get the last
modified time of the documents in the navigation? We also have more than
one site i.e. foo.com/a/ foo.com/b/ and I was wondering if there is a
way to get the sitename and pass that through the viewdata to the jx?
Any thoughts on these two issues would be greatly appreciated.
--
Regards,
</Greg>
> Thanks, I think this is more than sufficient. :)
>> Greg,
>>
>> It seems like the navaggregator is pushing you in the wrong direction.
>> The only reason to look at the navaggregator is for same API examples of
>> how to use the NavigationManager component.
>>
>> What the navaggregator does is:
>> a. it retrieves the navigation tree
>> b. it dynamically generates a publisher request to get the content of
>> each the documents listed in the navigation tree
>> c. publishes all that on one page
>>
>> You only need step a. The navaggregator is much more complex than what
>> you need :-)
>>
>> The result XML you get from the navigation manager looks like this:
>>
>> <navigationTree xmlns="http://outerx.org/daisy/1.0#navigation"
>> completeTree="false">
>> <doc id="index" documentId="2-cd" branchId="1" languageId="2"
>> label="Home" path="/index" hasChildren="true" access="read,fullRead">
>> <doc id="news" documentId="100-cd" branchId="1" languageId="2"
>> label="News & blogs" path="/index/news" hasChildren="false"
>> access="read,fullRead"/>
>> <doc id="110-cd" documentId="110-cd" branchId="1" languageId="2"
>> label="Background FAQ" path="/index/110-cd" hasChildren="false"
>> access="read,fullRead"/>
>> <doc id="53-cd" documentId="53-cd" branchId="1" languageId="2"
>> label="Screenshots" path="/index/53-cd" hasChildren="false"
>> access="read,fullRead"/>
>> </doc>
>> <doc id="features" documentId="3-cd" branchId="1" languageId="2"
>> label="Features" path="/features" hasChildren="false"
>> access="read,fullRead"/>
>> <doc id="44-cd" documentId="44-cd" branchId="1" languageId="2"
>> label="License" path="/44-cd" hasChildren="false"
>> access="read,fullRead"/>
>> <doc id="45-cd" documentId="45-cd" branchId="1" languageId="2"
>> label="Community" path="/45-cd" hasChildren="false"
>> access="read,fullRead"/>
>> <link label="Documentation Daisy 2.2" id="l1" path="/l1"
>> url="/daisydocs-2_2"/>
>> <doc id="342-cd" documentId="342-cd" branchId="1" languageId="2"
>> label="Documentation other releases" path="/342-cd"
>> hasChildren="false" access="read,fullRead"/>
>> <link label="Knowledgebase" id="l2" path="/l2" url="/kb"/>
>> <link label="Wiki" id="l3" path="/l3" url="/wiki"/>
>> <link label="Issue tracker" id="l4" path="/l4"
>> url="http://issues.cocoondev.org/secure/BrowseProject.jspa?id=10030"/>
>> </navigationTree>
>>
>> Based on this, it is very simple to generate the paths of the documents,
>> just concat the id attributes with a slash between them, e.g.
>> 'index/news'. Optionally add ".html" at the end.
>>
>> BTW, I got this data simply by putting this URL in my browser:
>>
>> http://cocoondev.org:9263/navigation/tree?navigationDocId=1-cd&navigationDocBranch=main&navigationDocLanguage=en&contextualized=false&handleErrors=false
>>
>>
>> (won't work for you as port 9263 doesn't seem to be publicly accessible)
>>
>> I don't have time to put together a complete example (maybe someone else
>> does), but this is the relevant code you need from the navaggregator:
>>
>> var daisy = getDaisy();
>> var pageContext = daisy.getPageContext();
>> var repository = daisy.getRepository();
>> var siteConf = daisy.getSiteConf();
>>
>> // Retrieve a generated navigation tree
>> var activePath = cocoon.request.getParameter("activePath");
>> var navigationData = new SaxBuffer();
>> var navigationManager =
>> repository.getExtension("NavigationManager");
>> var navigationParams = new
>> NavigationParams(siteConf.getNavigationDoc(), activePath, false);
>> navigationManager.generateNavigationTree(navigationData,
>> navigationParams, null, true);
>>
>>
>> After this, pass the navigationData variable via the viewData to a
>> pipeline:
>>
>> var viewData = new Object();
>> viewData["navigationData"] = navigationData;
>> cocoon.sendPage("MySitemapPipeline", viewData);
>>
>> The pipeline would look something like this:
>>
>> <map:match pattern="MySitemapPipeline">
>> <map:generate type="jx" src="page.xml"/>
>> <map:serialize type="xml"/>
>> </map:match>
>>
>> with the page.xml containing something like
>> <page>${navigationData}</page>
>>
>> Once this is done, you should see the raw navigation XML as shown above.
>> To get it to the format you desire, put an XSLT in between the
>> map:generate and map:serialize. If you can't write such an XSLT, ask
>> someone for help :-) (as Karel suggested, looking at the navigation.xsl
>> might help)
>>
>> Nowhere in the solution, you should be doing things with
>> "p:publisherResponse/p:document" or with the DaisyLinks transformer.
>>
>> On Tue, 2008-05-06 at 14:28 -0400, Sieranski, Greg wrote:
>>
>>> We are currently running into a problem where the url is not
>>> displaying the nodeId. Using the navaggregator example I modified
>>> the navaggr_result.xsl to be:
>>>
>>> <xsl:for-each select="p:publisherResponse/p:document">
>>> <a
>>> href="daisy:{@documentId}@{@branchId}:{@languageId}"><xsl:value-of
>>> select="@documentId"/></a>
>>> </xsl:for-each>
>>>
>>> I then changed the sitemap to:
>>> <map:match pattern="navaggr-result">
>>> <map:generate type="jx" src="navaggr_result.xml"/>
>>> <map:transform src="navaggr_result.xsl"/>
>>> <map:transform type="DaisyLinks"/>
>>> <map:transform type="serializer"/>
>>> <map:serialize type="xml"/>
>>> </map:match>
>>> </map:pipeline>
>>>
>>> this gave us <a href="/foo/2-DSY.html?branch=1&language=1">2-DSY</a>
>>> but we need the node id not documentID. So we want <a
>>> href="/foo/foo-home.html?branch=1&language=1">2-DSY</a>
>>>
>>> Is there a way to get the nodeId instead of the documentId?
>>>
>>> --
>>> Regards,
>>> </Greg>
>>>
>>
>>
>
>
More information about the daisy
mailing list